2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础
2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础
目录:
-
-
- 命令注入(Command Injection)
- 数字型注入(Numeric SQL Injection)
- 日志欺骗(Log Spoofing)
- SQL 注入(LAB: SQL Injection)
- 字符串注入(String SQL Injection)
- 数据库后门(Database Backdoors)
- 数字型盲注入(Blind Numeric SQL Injection)
- 字符串型盲注入(Blind String SQL Injection)
-
- XSS 钓鱼(Phishing with XSS)
- 存储型XSS攻击(Stored XSS Attacks)
- 反射型XSS攻击(Reflected XSS Attacks)
-
- 跨站请求伪造(Cross Site Request Forgery (CSRF))
- 绕过 CSRF 确认( CSRF Prompt By‐Pass)
一 . 实验要求
- 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。二 . 实验过程记录
1 . Webgoat的安装
- 因WebGoat默认使用8080端口,所以开启前先用
netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。 - 下载webgoat-container-7.0.1-war-exec.jar,再将其拷贝到虚拟机中
- 普通安装,命令行输入
java -jar webgoat-container-7.0.1-war-exec.jar
- 浏览器转:
localhost:8080/WebGoat
- 直接用默认用户名密码登录即可,开始练习
2 . SQL的注入攻击
#### 1.Command Injection - 选择 Injection Flaws -> Command Injection - 右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加```"& netstat -an & ipconfig"``` - 点击 ```view```,看到网络端口使用情况和 IP 地址,攻击成功 ![image](https://img2018.cnblogs.com/blog/1042924/201905/1042924-20190523173039239-174492716.png)2.Numeric SQL Injection
- 选择 Injection Flaws -> Numeric SQL Injection
- 右键页面中复选框,选择inspect Element审查网页元素对源代码
value="101"
进行修改,在城市编号101后面添加or 1=1 - 点击
Go
,可以看到攻击成功
3.日志欺骗(Log Spoofing)
- 通过在日志文件中插入脚本实现欺骗。在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹
- 目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”
4.SQL 注入(LAB: SQL Injection)
- 选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改为20
- 用该用户信息进行登录,攻击成功,并获得账户信息的列表。
5.字符串盲注入:Blind String SQL Injection
- 前提是要知道pin值,这次查询的是一个字符串而不是数值。
- 输入:
101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );
- 将1换成2:
101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );
- 最后使用二分法测试,最终得到PIN的字段为:
Jill
3 . XSS的攻击
#### 1.XSS钓鱼: - 编写一个带有用户名的和密码框的表格: ``` //脚本``` - 我们在搜索到的表单中输入用户名和密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们。 ![image](https://img2018.cnblogs.com/blog/1289294/201905/1289294-20190524160849245-1814455315.png)
2.存储型XSS攻击:Stored XSS Attacks
- 这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行
- 根据题目要求,在留言板中输入
<script>alert("You've been attacked!!!");</script>
- 再次点击刚刚创建的帖子,可以看到弹出窗口:
3.反射型XSS攻击:Reflected XSS Attacks
- 原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
- 目标:使用攻击脚本创建URL,并将其写入网站中,当读取到该URL的时候就会被攻击
- 具体操作:输入代码
<script>alert("hhhhh You've been attacked!!!");</script>
,点击purse
的同时页面就给出了反馈:
4 . CSRF的攻击
1.跨站请求伪造(Cross Site Request Forgery (CSRF))
-
跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
-
查看页面右侧Parameters中的src和menu值,分别为267和900
在title中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=5000" width="1" height="1" />
,以图片的的形式将URL放进Message框。 -
这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
-
在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成。
-
查看页面下侧Parameters中的src和menu值,命名title,message框中输入代码:
<iframe src="attack?Screen=[scr]menu=[menu]&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=[scr]&menu=[menu]&transferFunds=CONFIRM"> </iframe>
三 . 实验基础问题回答
- **(1) SQL注入的原理是什么,如何进行防御呢?**- 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
- 防御手段:
- 对用户的输入进行校验。
不要使用动态拼装sql,可以使用参数化的sql- 或者直接使用存储过程进行数据查询存取。
- 不要使用管理员权限的数据库连接,为每个- 应用使用单独的权限有限的数据库连接。
- 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
- 应用的异常信息应该给出尽可能少的提示。
采取辅助软件或网站平台来检测sql注入。
-
(2) XSS攻击的原理是什么,如何进行防御呢?
- 原理:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。
- 防御手段:
- 特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
- 对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
- 实现Session标记、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
-
(3) CSRF攻击原理是什么,如何进行预防呢?
- 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
防御手段:- 在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
- “双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
- 用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
- 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。