2019-2020-2 20175317钟睿文《网络对抗技术》Exp9 Web安全基础
2019-2020-2 20175317钟睿文《网络对抗技术》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字符串查看所有天气数据。
在城市复选框对应源码的Value值中添加or 1=1
单击go
查看效果:
日志欺骗Log Spoofing
这种攻击通过在日志文件中插入脚本实现清除攻击者在日志中痕迹的作用。
用户名输入20175317%0d%0aLogin Succeeded for username: admin
,密码随意,可以看到登陆成功
这种漏洞可以被攻击者利用以添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。
字符串注入String SQL Injection
字符串SQL注入攻击对任何数据库驱动的站点都构成了严重威胁。 攻击背后的方法很容易学习,所造成的损害可能从相当大的损害到整个系统的损害。 尽管存在这些风险,但Internet上数量惊人的系统仍容易受到这种形式的攻击。它不仅容易引发威胁,而且只要一点常识和前瞻性,就可以轻松地避免这种威胁。
基于SELECT * FROM user_data WHERE last_name = '?'
查询语句构造自己的SQL注入字符串,姓名框输入Smith' or 1=1--
,执行后可以看到所有人的卡号等信息:
数据库后门Database Backdoors
使用字符串SQL注入执行多个SQL语句,使用易受攻击的字段创建两个SQL语句,第一个是系统的,第二个是自己定义的。首先输入101
查看现有的信息
可以看到现在的薪水是55000,接下来我们使用101; update employee set salary=100000
,执行两条语句,第一条用于查看信息,后面的update则将薪水更新为100000……哈哈哈哈哈这让我想起了侠盗猎车手罪恶都市中的作弊码……
使用101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175317@hackme.com'WHERE userid = NEW.userid
在每行插入前修改邮箱为指定邮箱:
XSS攻击
XSS钓鱼Phishing with XSS
编写好表单代码,在搜索框输入代码,页面增加一个表单:
用户在其中输入用户名和密码信息,攻击者就可以通过WebGoat获取这些信息:
存储型XSS攻击Stored XSS Attacks
存储型XSS攻击常见于论坛等留言平台,用户留言的时使用JavaScript脚本作为留言内容,这段脚本就保存在数据库中。任何用户在打开网页时该脚本自动运行,达到写入非法的消息内容,从而导致其他用户访问时载入非预期的页面或内容的目的。
title中随意输入,留言板中输入<script>alert("I'm 20175317!");</script>
,提交后如下:
反射型XSS攻击Reflected XSS Attacks
攻击者使用攻击脚本创建一个URL,受害者点击该url就会受到攻击。序列码输入<script>alert(" 20175317!");</script>
,之后提交:
CSRF攻击
跨站请求伪造Cross Site Request Forgery(CSRF)
跨站请求伪造是一种让用户加载一个包含网页的图片的一种攻击手段。提交请求时浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以控制受害者执行他们没有许可的操作。
根据自己参数的实际情况,在message中使用<img src="http://localhost:8080/WebGoat/attack?Screen=326&menu=900&transferFunds=1000" width="1" height="1" />
将url隐藏到一个隐藏图片中,提交后转走用户1000元
绕过CSRF确认CSRF Prompt By‐Pass
CSRF Prompt By‐Pass欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。
根据自己参数的实际情况,在message中使用
<iframe src="attack?Screen=327&menu=900&transferFunds=1000"> </iframe>
<iframe src="attack?Screen=327&menu=900&transferFunds=CONFIRM"> </iframe>
点击Submit提交:
实验中遇到的问题
问题一:webgoat-container-7.0.1-war-exec.jar
安装后没有功能
问题一解决方法:参考OpenJDK换为JDK与Kali-JDK1-8安装,重新配置jdk。
配后重新进入网页,发现会多出很多功能:
实验总结与体会
这是最后一次实验了,总体来说比较顺利,就是在jdk版本选择时遇到了一点小问题。这次实验中我使用了许多不同的方法尝试了攻击,通过使用WebGoat工具进行SQL注入攻击、XSS攻击、CSRF攻击,我对网页中的漏洞有了更深的理解,可能看起来没有问题的代码中也会存在漏洞,所以代码编写的严谨性就尤为重要了。
问题回答
(1)SQL注入攻击原理,如何防御
原理:
通过把SQL命令插入到Web表单等查询字符串中,使服务器执行语句时执行攻击者输入的恶意SQL命令。除此之外SQL注入攻击还可以通过在输入中加入“或 永真式”、在末尾加入注释符等方式实现重新构造命令语句达到登录等攻击目的。总之是通过输入框输入特殊字符串,提交到后台数据库中后会与SQL语句拼接成一个新的可实现攻击者目的的语句。
防御:
- 编写代码时使用正则表达式检查用户输入是否符合规范,对可能使代码产生运行错误的字符进行筛选,限制用户输入;
- 尽量不使用动态SQL语句,通过Web程序调用存储过程来完成对数据库的操作。
(2)XSS攻击的原理,如何防御
原理:
XSS攻击时,攻击者将一些恶意html标签或者javascript脚本插入到Web页面中,当用户浏览该页时,控制用户浏览器。攻击者利用用户对原网站的信任,执行用户不期望的命令。
防御:
- 用户要提高防范意识,不轻易输入个人信息与密码等;
- 对用户输入的可能使代码产生运行错误的字符进行筛选,限制用户输入;
- 对输入和URL参数进行过滤,在输出数据之前对潜在的威胁的字符进行编码、转义。
(3)CSRF攻击原理,如何防御
原理:
在用户的浏览器中执行攻击者的脚本,获得用户的cookie等信息,跨站请求伪造是借用用户的身份,向服务器发送攻击者构造的请求,以达到攻击者的目的。
防御:
- 用户要提高防范意识,不轻易输入个人信息与密码等;
- 验证请求中的Token,并且每一个重要的post提交页面都使用一个验证码
- 尽量不使用通用的cookie,避免伪造用户身份
- 添加加随机验证,验证请求的来源是否是合法用户