2019-2020-2 20175322周弋鸿 《网络对抗技术》Exp9 Web安全基础
一、实践目标
实践对象
- Kali Linux
实践内容
- Webgoat实践下相关实验
- 理解常用网络攻击技术的基本原理
实践要求
- 包括(SQL,XSS,CSRF)不少于7个题目
二、实践步骤
任务一:WebGoat
- 下载JDK安装包
- 建立目录,将下载的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-8u161-linux-x64.tar.gz
- 配置环境变量
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
- 通知系统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
- 设置默认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
- 重新载入profile
source /etc/profile
-
通过
java -version
以及javac -version
即可看到是否安装完成 -
下载webgoat-container-7.0.1-war-exec.jar文件
-
因WebGoat默认使用8080端口,所以开启前先用
netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 进程号
终止占用8080端口的进程 -
普通安装,需要在含有
webgoat-container-7.0.1-war-exec.jar
文件的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar
-
浏览器打开WebGoat,输入
http://localhost:8080/WebGoat
进入WebGoat登录界面 -
用默认用户名密码登录
任务二:SQL注入攻击(Injection Flaws)
命令注入(Command Injection)
-
右键点击页面,选择
inspect Element
审查网页元素对源代码进行修改 -
在复选框中任意一栏的代码,右键单击后,选择
Edit At Html
进行修改,添加"&&ifconfig"
-
点击
view
,可以看到执行指令后的网络端口使用情况和IP地址,攻击成功
数字型注入(Numeric SQL Injection)
-
右键点击页面,选择
inspect Element
审查网页元素对源代码进行修改 -
在选中的城市编号Value值中添加
or 1=1
-
显示所有城市的天气情况,攻击成功
日志欺骗(Log Spoofing)
-
在 username 中填入
Zyh%0d%0aLogin Succeeded for username: admin
,密码随意,可以看到登陆成功
-
这种漏洞可以被攻击者利用以添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到
字符串注入(String SQL Injection)
- 姓名框输入
Smith' or 1=1--
,执行后可以看到所有人的卡号等信息
数据库后门Database Backdoors
-
输入101查看现有的信息
-
使用
101; update employee set salary=100000
,执行两条语句,第一条用于查看信息,后面的update则将薪水更新为100000
-
使用
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175322@hackme.com'WHERE userid = NEW.userid
在每行插入前修改邮箱为指定邮箱
任务三:XSS攻击
XSS 钓鱼(Phishing with XSS)
-
编写好表单代码,在搜索框输入代码,页面增加一个表单
-
输入用户名和密码信息,攻击者就可以通过WebGoat获取这些信息
存储型XSS攻击(Stored XSS Attacks)
- title中随意输入,留言板中输入
<script>alert("I'm 20175322!");</script>
- 下方
Message List
中会新增刚输入的Tile
名字的链接,点击链接
反射型XSS攻击(Reflected XSS Attacks)
- 输入
<script>alert(" 20175322!");</script>
,之后提交
任务四:CSRF攻击
跨站请求伪造(Cross Site Request Forgery (CSRF))
- 根据自己参数的实际情况,在message中使用
<img src="http://localhost:8080/WebGoat/attack?Screen=321&menu=900&transferFunds=5000" width="1" height="1" />
- 点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元
绕过 CSRF 确认( CSRF Prompt By‐Pass)
- 根据自己参数的实际情况,在message中使用
<iframe src="attack?Screen=329&menu=900&transferFunds=1000"> </iframe>
<iframe src="attack?Screen=329&menu=900&transferFunds=CONFIRM"> </iframe>
- 点击Submit提交,攻击成功
三、实践报告
基础问题
1.SQL注入攻击原理,如何防御
- 原理:Web应用对后台数据库查询语句处理存在的安全漏洞。通过把SQL命令插入到Web表单等查询字符串中,使服务器执行语句时执行攻击者输入的恶意SQL命令。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作。
- 防御:
- 后台控制输入的长度或者禁止用户输入一些特殊符号
- 加密数据库中的内容
2.XSS攻击的原理,如何防御
- 原理:将一些恶意html标签或者javascript脚本插入到Web页面中,当用户浏览该页时,控制用户浏览器。攻击者利用用户对原网站的信任,执行用户不期望的命令。
- 防御:
- 用户提高防范意识,不要轻易输入个人信息
- 限制用户输入,筛选字符
- 运用转义安全字符手段消除潜在的威胁的字符
3.CSRF攻击原理,如何防御
- 原理:跨站请求伪造,冒名登录。伪装来自受信任用户的请求来利用受信任的网站(钓鱼网站)。
- 防御:
- 用户提高防范意识,不要轻易输入个人信息
- 验证请求中的Token,并且每一个重要的post提交页面都使用一个验证码
- 定期清理cookie或不使用cookie
- 添加加随机验证,验证请求的来源是否是合法用户
实践感想
- 这是本课程的最后一个实验,简单学习了SQL注入攻击、XSS攻击和CSRF攻击。实验进行地比较顺利,通过自己动手实践,发现周围的网络环境其实很不安全,平时要注意保护个人的信息安全。
- 九次实验都顺利完成,知识面得到了极大的拓展,感觉自身收获很多。