2019-2020-2 20175324 王陈峤宇《网络对抗技术》Exp9 Web安全基础
2019-2020-2 20175324 王陈峤宇《网络对抗技术》Exp9 Web安全基础
实践内容
理解常用网络攻击技术的基本原理,做不少于7个题目,包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。实践过程如下:
WebGoat安装
WebGoat是OWASP维护的,用于进行WEB漏洞测试和学习的JAVA应用程序。
下载jdk-8u161-linux-x64.tar.gz
文件,然后用netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill+进程号
终止占用8080端口的进程。在含有webgoat-container-7.0.1-war-exec.jar
文件的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar
在浏览器中输入http://localhost:8080/WebGoat
进入WebGoat登录界面,使用默认用户名密码登录
SQL注入攻击
命令注入Command Injection
命令注入攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这类风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响。但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。命令注入是在正常的参数提交过程中添加恶意代码以达到执行某条指令的目的。
右键选择inspect Element
审查网页元素,在复选框中选择一栏代码,右键选择Edit At Html
进行修改,添加"&&ifconfig"
点击view
,可以看到IP地址,攻击成功。
数字型注入Numeric SQL Injection
注入数字型数据如永真式以实现注入效果,在station
字段中注入特征字符,能组合成新的SQL语句,例如:SELECT * FROM weather_data WHERE station = [station]
可以通过注入SQL字符串查看所有天气数据。
点击 go 查看天气数据
在城市复选框对应源码的Value值中添加or 1=1
单击go
查看效果:
日志欺骗Log Spoofing
这种攻击通过在日志文件中插入脚本实现清除攻击者在日志中痕迹的作用。
用户名输入wcqy5324%0d%0aLogin Succeeded for username: admin
,密码随意,可以看到登陆成功
这种漏洞可以被攻击者利用以添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。
字符串注入String SQL Injection
字符串SQL注入攻击对任何数据库驱动的站点都构成了严重威胁。 攻击背后的方法很容易学习,所造成的损害可能从相当大的损害到整个系统的损害。
基于SELECT * FROM user_data WHERE last_name = '?'
查询语句构造自己的SQL注入字符串,姓名框输入Smith' or 1=1--
,执行后可以看到所有人的卡号等信息:
数据库后门Database Backdoors
使用字符串SQL注入执行多个SQL语句,使用易受攻击的字段创建两个SQL语句,第一个是系统的,第二个是自己定义的。首先输入101
查看现有的信息。
可以看到现在的薪水是55000,接下来我们使用101; update employee set salary=666666
,执行两条语句,将薪水更新为666666
这就是传说中的薪水小偷吗
使用101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175324@hackme.com'WHERE userid = NEW.userid
在每行插入前修改邮箱为指定邮箱:
XSS攻击
XSS钓鱼Phishing with XSS
编写好表单代码,在搜索框输入代码,页面增加一个表单:
用户在其中输入用户名和密码信息,攻击者就可以通过WebGoat获取这些信息:
存储型XSS攻击Stored XSS Attacks
存储型XSS攻击常见于论坛等留言平台,用户留言的时使用JavaScript脚本作为留言内容,这段脚本就保存在数据库中。任何用户在打开网页时该脚本自动运行,达到写入非法的消息内容,从而导致其他用户访问时载入非预期的页面或内容的目的。
title中随意输入,留言板中输入<script>alert("20175324wcqy");</script>
,提交后如下:
反射型XSS攻击Reflected XSS Attacks
攻击者使用攻击脚本创建一个URL,受害者点击该url就会受到攻击。序列码输入<script>alert(" 20175324!");</script>
,之后提交:
CSRF攻击
跨站请求伪造Cross Site Request Forgery(CSRF)
跨站请求伪造是一种让用户加载一个包含网页的图片的一种攻击手段。提交请求时浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以控制受害者执行他们没有许可的操作。
根据自己参数的实际情况,在message中使用<img src="http://localhost:8080/WebGoat/attack?Screen=326&menu=900&transferFunds=5000" width="1" height="1" />
将url隐藏到一个隐藏图片中,提交后转走用户5000元
绕过CSRF确认CSRF Prompt By‐Pass
CSRF Prompt By‐Pass欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。
根据自己参数的实际情况,在message中使用
<iframe src="attack?Screen=327&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=327&menu=900&transferFunds=CONFIRM"> </iframe>
点击Submit提交:
实验中遇到的问题
在实验开始时,我的webgoat菜单没有选项,在请教同学后,我找到了解决方案:
首先需要下载更新jdk,如果不下载打开WebGoat的效果是这样的,菜单栏里没有选项
WebGoat需要Java SE8的支持,因此可以在官网下载jdk-8u251-linux-x64.tar.gz
建立目录,将下载的jdk复制过去并解压。
sudo mkdir -p /usr/local/java
sudo cp jdk-8u251-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xzvf jdk-8u251-linux-x64.tar.gz
配置相关环境变量sudo vim /etc/profile
,将下面代码复制进末尾
JAVA_HOME=/usr/local/java/jdk1.8.0_251
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_251/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_251/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_251/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_251/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_251/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_251/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_251/bin/javaws
重新载入profilesource /etc/profile
和 java -version
可以看到已经安装完成
实验总结与体会
在这次实验中,我们使用了许多不同的方法尝试了攻击,通过使用WebGoat工具进行SQL注入攻击、XSS攻击、CSRF攻击。通过这次实验,我对网页中的漏洞有了更深的理解。有些代码看似没问题,但实际上在使用中会存在漏洞,所以代码编写的严谨性就尤为重要了。
问题回答
(1)SQL注入攻击原理,如何防御
原理:
通过把SQL命令插入到Web表单等查询字符串中,使服务器执行语句时执行攻击者输入的恶意SQL命令。除此之外SQL注入攻击还可以通过在输入中加入“或 永真式”、在末尾加入注释符等方式实现重新构造命令语句达到登录等攻击目的。总之是通过输入框输入特殊字符串,提交到后台数据库中后会与SQL语句拼接成一个新的可实现攻击者目的的语句。
防御:
- 编写代码时使用正则表达式检查用户输入是否符合规范,对可能使代码产生运行错误的字符进行筛选,限制用户输入;
- 限制查询长度:由于SQL注入过程中需要构造较长的SQL语句,因此,一些特定的程序可以使用限制用户提交的请求内容的长度来达到防御SQL注入的目的
- 根据程序要求为特定的表设置特定的权限,如:某段程序对某表只需具备select权限即可,这样即使程序存在问题,恶意用户也无法对表进行update或insert等写入操作。
(2)XSS攻击的原理,如何防御
原理:XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的。
防御:
- 用户要提高防范意识,不轻易输入个人信息与密码等;
- 对输入(和URL参数)进行过滤,对输出进行编码。
- 对输入和URL参数进行过滤,在输出数据之前对潜在的威胁的字符进行编码、转义。
(3)CSRF攻击原理,如何防御
原理:
在用户的浏览器中执行攻击者的脚本,获得用户的cookie等信息,跨站请求伪造是借用用户的身份,向服务器发送攻击者构造的请求,以达到攻击者的目的。
防御:
- 用户要提高防范意识,不轻易输入个人信息与密码等;
- 验证请求中的Token:token可以在用户登录之后放于session中,然后每次请求都从session中拿出,与请求中的token相比。
- 尽量不使用通用的cookie,避免伪造用户身份