20145325张梓靖 《网络对抗技术》 Web安全基础实践
实验内容
- 使用webgoat进行XSS攻击、CSRF攻击、SQL注入
- XSS攻击:Stored XSS Attacks、Reflected XSS Attacks
- CSRF攻击:Cross SSite Request Forgery(CSRF)、CSRF Prompt By-Pass
- SQL注入攻击:Numeric SQL Injection、Log Spoofing、String SQL Injection、Database Backdoors step一、Database Backdoors step二、Blind Numeric SQL Injection
基础问题回答
- SQL注入攻击原理,如何防护
- SQL注入是指攻击者能够在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非受权的任意查询,从而进一步获得相应的数据信息。简单来讲,即把SQL语句当作用户名等输入正常网页中。
- 防护SQL注入就须要在web设计中,设计成用户可以输入的内容是不能直接放到后台要执行的SQL语句里的,或者让web应用程序对用户输入数据的合法性进行判断,不合法则不容许提交。
- XSS攻击的原理,如何防护
- 经过对网页注入可执行代码(如HTML、javascript)且成功地被浏览器执行,以达到攻击的目的
- 与防护SQL注入同样,能够对用户输入的数据进行合法性验证,即对输入参数进行过滤,与可执行代码、特殊字符相关的不容许经过
- CSRF攻击原理,如何防护
- 经过假装来自受信任用户的请求来利用受信任的网站,即受害用户登陆受信任网站后,在本地生成了COOKIE而又在不登出该网站的状况下,访问了危险网站,而此时访问的危险网站可能就已经写入了利用你的身份进行而恶意操做的代码
- 由于CSRF攻击主要利用的就是受害用户的身份,即COOKIE,因此能够对web应用时进行设置,不长时间保存COOKIE等,同时咱们也要尽可能避免访问危险网站
实验总结与体会
在本次实验中,使用了webgoat来分别进行XSS攻击、CSRF攻击、SQL注入的实验测试。在进行SQL测试时,若是输入框为下拉框,那么咱们可使用kail里的burpsuite来做为网页代理,对传送的网页内容进行编辑之后再发到服务器,若是是text的输入框,直接输入就好;XSS与CSRF有些相似,都是在合法用户的身份下进行操做,只不过XSS是直接利用站点内的信任用户,而CSRF是经过假装来自受信任用户的请求来利用受信任的网站。之因此可以进行这些攻击,主要是由于咱们的web设计有漏洞,或者说没有想到会有这些状况的发生,因此咱们正在进行各类代码设计的时候,必定要作的就是对用户输入进行合法性验证,经过了才提交到后台进行处理,没经过则不处理。
实践过程记录
XSS攻击
CSRF攻击
- Cross SSite Request Forgery(CSRF)
- 该实验为在新建邮件里写入能够更改由题目要求的attack的src、menu的transferFunds数值参数
- 可选用html里的iframe模块,可自动链接打开所标示网页
- 这里在message里写入的内容为
<iframe src="attack?Screen=284&menu=900&transferFunds=5000"></iframe>

- CSRF Prompt By-Pass
- 该实验与上个实验相似,一样是经过邮件的方式进行恶意请求,只不过这里不只是对transferFunds数值参数进行了变化,还对这个过程的进行了请求确认,因此须要两个iframe模块,而且由题目可知在请求确认的模块里transferFunds参数的值
这里在message里写入内容为html
<iframe
src="attack?Screen=271&menu=900&transferFunds=5000">
</iframe>
<iframe
src="attack?Screen=271&menu=900&transferFunds=CONFIRM">
</iframe>

SQL注入攻击
- Numeric SQL Injection
- 该实验为使用SQL注入语句,将本来选中一个地点只显示一个地点的天气情况变为选中一个地点显示全部地点天气信息
- 在kail中可以使用burpsuite做为网页代理,对传送的网页内容进行编辑之后再发到服务器
这里就选用burpsuite,在地点_id后增长or 1=1;--
,所以处的地点_id是数值型的,因此不用在开始加单引号
java
- Log Spoofing
- 该实验为在用户名处经过使用%0d%0a(回车换行)以及文字内容输入来令人迷惑,虽然有成功登录的文字信息,但实质上是登陆失败的
这里的user name处写入的内容是%0d%0aLogin succeeded !admin
web
- String SQL Injection
- 该实验和Numeric SQL Injection相似,一样是要求本来只能查到某一我的的信息,经过SQL语句的注入使整张表都显示出来
着这里的last name写入的内容是' or 1=1;--
,由于last name是字符型的,因此须要在开始加上单引号
sql
- Database Backdoors step1
- 该实验是要在user ID中实现多条SQL语句的注入,其中101是题目给的已存在的帐户ID
这里第一次填入的内容是or 1=1;update employee set salary=53250;
数据库
- 虽然实验成功经过了,可是并无按我所想的,不只把用户表的全部内容显示出来同时把工资值变化了
- 发现是由于在or以前没打空格或任意用户名加空格,它觉得是有个叫or的用户,1=1它也读不懂,但由于有后面的分号,它仍是知道有多句SQL,因此实验经过
咱们从新将user ID输入101 or 1=1;update employee set salary=53250;
浏览器
- Database Backdoors step2
- 该实验所要使用的SQL语句已经在题目中给出,意思是使用该SQL语句实如今myBackDoor表中一旦添加新用户那么就在用户表里将新用户的邮箱改成题目固定的邮箱
在user ID输入的内容为101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid;
安全
- Blind Numeric SQL Injection
- 该实验目的是要找的cc_number为1111222233334444的pin大小(题目已给出pin为数值),输入正经常使用户ID做用是判断这个用户是否存在
咱们首先测试下效果,101是题目给的已知用户ID
服务器
经过上一实验咱们能够知道100用户并不存在
cookie
- 效果知道了后,根据题目,咱们知道pin是个数值,要知道cc_number对应的pin,则只有一个一个尝试,先使用<、>来大概肯定范围(同and一块儿,and前为存在的用户ID,例如101,一旦and后面的语句,即判断pin的值大小成立,则下面就会显示存在用户,而后继续缩小范围进行查找,直到找到惟一肯定的,即便用=号时成立)
- 由博客后面的学习指导Webgoat学习笔记之习题破解能够知道,所求的对应pin就是2367
直接在numer框中输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

- 能够看到用户存在的显示,即成功找到cc_number为1111222233334444的pin值
题目说找到对应pin值后,将值输入框中,该实验即经过

学习指导参考
SQL注入攻击原理以及基本方法
xss攻击原理与解决方法
浅谈CSRF攻击方式
Webgoat学习笔记之习题破解