一、实践目标
- 理解常用网络攻击技术的基本原理。
- 在Webgoat,实践相关实验。
- SQL注入攻击
- XSS攻击
- CSRF攻击
二、实践过程
环境配置:
下好jar包然后放在根目录下
使用:java -jar *.jar就可以解压运行webgoat了!
使用webgoat:
打开Firefox,输入http://127.0.0.1:8080/WebGoat/login.mvc
访问webgoat
我使用的是7.1版本,直接使用网页下的两个用户密码就行,我使用的管理员登陆的。
sql注入:
Numeric SQL Injection:
要求注入字符串然后可以访问所有的天气情况:
这里修改一下网页源代码就好了,随便选个城市然后修改他的value值,添加or 1=1 即可;
String SQL Injection:
要求作为smitn然后查看所有的信用卡信息:
输入or 1=1 --
--是注释掉后面的代码。
LAB: SQL Injection:
第一步:
字符串注入:要求不使用正确密码就可以登陆管理员的账户,和前面一样,但是我们要先修改网站源代码
使其在password一项中可以输入足够长:
然后构造真式即可
第三步:
Numeric SQL Injection:
先使用第一步的办法登陆员工的账户,然后再员工账户里点击查看按钮时查看管理员用户的信息
我们先看看这个老板账户的值是排在表的最后:
然后就可以通过修改id为101 or 1=1order by salary desc这个语句来倒序查询下一个用户信息;
下图就是修改位置,本来一开始想直接修改成老板的id但是不成功;
成功图:
Blind Numeric SQL Injection:
数字盲注:要求就是通过输入框输入语句去查找到pins表里pin的值是多少:
因为这里在输入框里输入语句可以进行判断,会给出判断结果,所以使用
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500);
然后慢慢缩小范围即可:
找到最后的结果为2364:
Blind String SQL Injection:
和数字盲注差不多,这里是找字符串,语句就有所变化:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );
意思是查找这个name的第一个字符的值是不是h
这里有大小写区分,然后改变第一个1所在位置的值就是改变查找的字符串的字符位置;
第一个字符为J
第二个为i
XSS:
Phishing with XSS:
要求使用XSS和HTML插入,将html插入到该请求凭证中,添加javascript来实际收集凭证
就是在输入框里输入一段攻击html代码,然后会运行脚本实施钓鱼攻击,会给原网页添加一些输入框,比如用户名和密码
这样原本不需要输入的东西就被要求输入然后就可以窃取到了!
这里就是在search框里加入了代码,然后提交,就会出现新的输入框,然后输入用户名密码,用javascript弹框出来就完了:
Stored XSS Attacks:
这里就是相当于有人放了一段恶意的脚本放在别人可以浏览的地方,比如微博评论,留言等等,然后只要有人打开这个留言就会
执行脚本实施攻击:
标题随便取,内容就是简单的弹框:
LAB: Cross Site Scripting:
第一步:
就是编辑员工信息页面,然后在里面能写下最够长的选项里,这里选的地址一栏,还可以是地区一栏,
往里面写下脚本,然后别人来查看就会运行脚本。
第三步:
和上一步一样就是查看别的账户信息然后被攻击:
第五步:
执行反射的xss:这里应该是要求执行一段带有url,也就是能连接到另一个站点的脚本,但是我看大家好像都只是随便执行了一段脚本,
这个带url我也是不太清楚,先通关再说:
Reflected XSS Attacks:
和上面一样,要求当未验证的用户输入用在HTTP响应时会发生XSS。在一个反射XSS攻击中,
攻击者可以使用攻击脚本制造一个URL,然后提交到另一个网站、发邮件或让受害者点击。
主要就是这个脚本代码方面。
Cross Site Request Forgery (CSRF):
要求:给新闻组发邮件。电子邮件包含一个URL指向恶意请求的图像。在这节课中,URL应该指向“攻击”servlet,
其中包含了“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,它具有任意的数值。
这里其实就说明了编写规则,只要查看网页上给出的scr和menu的值即可:
标题随便,在内容里写<imgsrc="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=20000"/>
然后提交,打开消息就行了:
CSRF Prompt By-Pass:
要求:输入代码,第一个为转帐的请求,第二个请求确认第一个请求触发的提示
根据提示来编写,也是需要查看网页的几个值:
然后编写成下面的代码即可:
<img src="attack?Screen=1471017872&menu=900&transferFunds=6000"
width="1" height="1">
<img src="attack?Screen=1471017872&menu=900&transferFunds=confirm"
width="1" height="1">
CSRF Token By-Pass:
也是要求编写代码,构造好了,然后发送,点击即可
三、实验总结:
最后一次实验了,这种闯关的感觉还不错,再就是确实这么课可以说是大学这几年里最有乐趣的一门课了。