2019-2020-2 20175312 陶光远《网络对抗技术》 Exp9 Web安全基础
2019-2020-2 20175312 陶光远《网络对抗技术》 Exp5 信息搜集与漏洞扫描
一、实验目标与内容
1.实践目标
本实践的目标理解常用网络攻击技术的基本原理
2.实践内容
做不少于7个题目,包括(SQL,XSS,CSRF)。
二、实践步骤
1、WebGoat安装
官网下载webgoat-container-7.0.1-war-exec.jar
通过netstat -tupln | grep 8080命令查看端口是否被占用,如果被占用,通过kill+进程号命令终止进程
在webgoat-container-7.0.1-war-exec.jar文件目录下执行java -jar webgoat-container-7.0.1-war-exec.jar
在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面,使用默认用户名密码登录
2、SQL注入攻击
2-1、命令注入(Command Injection)
命令注入攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这类风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响。但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。命令注入是在正常的参数提交过程中添加恶意代码以达到执行某条指令的目的。
右键选择inspect Element审查网页元素,选中一栏代码,右键选择Edit As Html进行修改,添加"&&ifconfig"
点击view,可以看到IP地址,攻击成功
2-2、数字型注入(Numeric SQL Injection)
注入数字型数据如永真式以实现注入效果,在station字段中注入特征字符,能组合成新的SQL语句,例如:SELECT * FROM weather_data WHERE station = [station]可以通过注入SQL字符串查看所有天气数据。
右键选择inspect Element审查网页元素,找到名字为station的select元素,在101和102后面添加or 1=1
查询到了所有城市的天气情况,攻击成功
2-3、日志欺骗(Log Spoofing)
这种攻击通过在日志文件中插入脚本实现清除攻击者在日志中痕迹的作用。
用户名输入20175312%0d%0aLogin Succeeded for username: admin,密码随意,可以看到登陆成功
2-4、字符串注入(String SQL Injection)
字符串SQL注入攻击对任何数据库驱动的站点都构成了严重威胁。 攻击背后的方法很容易学习,所造成的损害可能从相当大的损害到整个系统的损害。 尽管存在这些风险,但Internet上数量惊人的系统仍容易受到这种形式的攻击。它不仅容易引发威胁,而且只要一点常识和前瞻性,就可以轻松地避免这种威胁。
姓名框输入Smith' or 1=1--,执行后可以看到所有人的卡号等信息:
2-5、数据库后门(Database Backdoors)
利用数据库中的触发器,使用INSERT语句来使系统执行恶意代码
输入101可查询现有信息:
输入101; update employee set salary=20175312,成功更改工资
输入101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175312@qq.com' WHERE userid = NEW.userid,之后表中添加新用户时其邮箱为设置的假邮箱
3、XSS攻击
3-1、跨站脚本钓鱼攻击(Phishing with XSS)
在XSS帮助下实现钓鱼工具或向某些官方页面中增加内容,此处添加一个表单,用户在其中输入用户名和密码信息,攻击成功:
3-2、存储型XSS攻击(Stored XSS Attacks)
存储型XSS攻击常见于论坛等留言平台,用户留言的时使用JavaScript脚本作为留言内容,这段脚本就保存在数据库中。任何用户在打开网页时该脚本自动运行,达到写入非法的消息内容,从而导致其他用户访问时载入非预期的页面或内容的目的。
title中随意输入,留言板中输入,提交后如下:
3-3、反射型XSS攻击(Reflected XSS Attacks)
通过使被攻击者执行攻击者的脚本,使攻击者获取被攻击者的cookie等敏感数据,进而可以窃取其临时身份,进行一系列操作
序列码输入,点击purchase
4、CSRF攻击
4-1、跨站请求伪造(Cross Site Request Forgery)
跨站请求伪造是一种让用户加载一个包含网页的图片的一种攻击手段。提交请求时浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以控制受害者执行他们没有许可的操作。
根据自己参数的实际情况,在message中使用
4-2、绕过CSRF确认(CSRF Prompt By‐Pass)
CSRF Prompt By‐Pass欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。
<iframe src="attack?Screen=326&menu=900&transferFunds=1000"> </iframe>
<iframe src="attack?Screen=326&menu=900&transferFunds=CONFIRM"> </iframe>
四、问题回答
(1)SQL注入攻击原理,如何防御
原理:SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。
防御:采用预编译语句集,它内置了处理SQL注入的能力;使用正则表达式过滤传入的参数;字符串过滤
(2)XSS攻击的原理,如何防御
原理:想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的生份登陆,做一些破坏
防御:当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符;当恶意代码被作为某一标签的属性显示,通过用 “将属性截断来开辟新的属性或恶意方法:属性本身存在的 单引号和双引号都需要进行转码;对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。
(3)CSRF攻击原理,如何防御
原理:在用户的浏览器中执行攻击者的脚本,获得用户的cookie等信息,跨站请求伪造是借用用户的身份,向服务器发送攻击者构造的请求,以达到攻击者的目的。
防御:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
五、实验收获与感想
本次实验在流程上较为简单,除了因为jdk版本问题导致登陆网页出了些问题,但很快参考博客完成了,并未耽误很多时间,可以说实验完成的非常顺利。
我在此次实验中对Web安全基础的基本环节有了相当程度上的理解,学习到了多种攻击方法,对于如何进行防范也有了一定的认识,实际操作了各种攻击过程,复习了相关课程内容,可以说有很大收获。