2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础

2018-2019-2 20165236《网络对抗技术》Exp9  Web安全基础

本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。

实验步骤

一、WebGoat准备工作:

WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入、访问控制、隐藏字段、Cookie等。

1、首先下载webgoat-container-7.0.1-war-exec.jar文件:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第1张图片

2、在含有该文件的目录下使用命令java -jar webgoat-container-7.0.1-war-exec.jar打开Webgoat,如图:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第2张图片

3、当显示: Starting ProtocolHandler ["http-bio-8080"]说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第3张图片

4、在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面,直接用默认用户名密码guest登录,如图:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第4张图片

5、登陆成功后,可在网页左侧挑选想要进行的课程:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第5张图片

二、SQL注入攻击

命令注入攻击:

命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这类风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击;
原理:在正常的参数提交过程中添加恶意代码以执行某条指令;
目标:可以在目标主机上执行任何系统命令。

1、右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& netstat -an & ipconfig":

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第6张图片

2、点击view,能看到网络端口使用情况和 IP 地址,攻击成功:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第7张图片

数字型SQL注入(Numeric SQL Injection)
目标:通过注入SQL字符串查看所有的天气数据。
1、点击Injection Flaws-Numeric SQL Injection
右键点击复选框,选择inspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第8张图片

2、攻击成功,显示所有城市的天气情况:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第9张图片

日志欺骗(Log Spoofing):
通过在日志文件中插入脚本实现欺骗;
原理:在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹;
目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”

1、点击Injection Flaws-Log Spoofing;
2、在User Name中填入webgoat%0d%0aLogin Succeeded for username: admin,利用回车0D%和换行符%0A让其在日志中两行显示;
3、输入密码后点击Login,可以看到webgoat在Login Fail那行显示,我们自己添加的语句在下一行显示:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第10张图片

字符串型注入(String SQL Injection)
目标:基于查询语句构造自己的SQL 注入字符串将所有信用卡信息显示出来。
1、点击Injection Flaws-String SQL Injection
2、输入查询的用户名Smith' or 1=1--(操作中我们使用了'提前闭合"",插入永真式1=1,且--注释掉后面的内容,这样就能select表里面的所有数据)

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第11张图片

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第12张图片

LAB: SQL Injection:
使用SQL注入绕过认证;
1、在密码框输入' or 1=1 --,登录失败,会发现密码只有一部分输入,说明密码长度有限制,在密码框右键选择inspect Element审查网页元素对长度进行修改:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第13张图片

2、再次输入' or 1=1 --,登录成功:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第14张图片

数据库后门(Database Backdoors)
原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
目标:利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MySQL 数据库,不支持触发器,所以该课程不会真正完成。 我们的 Login ID 是 101。

1、输入101,得到该用户的信息。我们可以看到,输入的语句没有验证,很容易进行 SQL 注入:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第15张图片

2、输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='[email protected]'WHERE userid = NEW.userid;

BEFORE/AFTER参数指定了触发执行的时间,在事件之前或是之后;
FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第16张图片

数字型盲注入(Blind Numeric SQL Injection)
原理:某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语;
目标:该题目允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。我们找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。

1、利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;
2、如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐 号有效,否则无效。
例如:输入查询语句101 AND 1=1,因为两个条件都成立,所以页面返回帐号有效:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第17张图片

3、输入查询语句101 AND 1=2,因为第二个条件不成立,所以而页面返回帐号无效:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第18张图片

4、针对查询语句的后半部分构造复杂语句,如:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );如果提示无效,则pin值小于5000,使用二分法,最终得出pin的值为2364,输入2364并提交:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第19张图片

字符串型盲注入(Blind String SQL Injection)
原理:与数字型盲注入类似,某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
目标:找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交;

1、这里我们查询的字段是一个字符串而不是数值,与上一节类似我们同样可以通过注入的方式查找到该字段的值:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );(该语句使用了SUBSTRING 方法,取得pin 字段数值的第一个字母,并判断其是否比字母“H”小。)
2、经过多次测试(比较0-9A-Za-z等字符串)和页面的返回数据,判断出第一个字符为J。同理继续判断第二个字符:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
3、最终,判断出pin字段的值为Jill,提交该值:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第20张图片

三、XSS攻击

Phishing with XSS跨站脚本钓鱼攻击
1、在XSS的帮助下,我们可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。目标是创建一个form,要求填写用户名和密码。
一个带用户名和密码输入框的表格如下:





This feature requires account login:




Enter Username:


Enter Password:





2、在XSS-Phishing with XSS搜索上面代码,可以看到页面中增加了一个表单:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第21张图片

现在需要一段脚本,与上面代码合并搜索:






This feature requires account login:




Enter Username:


Enter Password:






在搜索到的表单中输入用户名和密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第22张图片

反射型XSS攻击(Reflected XSS Attacks)
原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它;

目标:使用攻击脚本创建URL,并将其写入网站中,当读取到该URL的时候就会被攻击;

1、输入代码,点击purse的同时页面就给出了反馈:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第23张图片

四、CSRF攻击
CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

1.跨站请求伪造(Cross Site Request Forgery (CSRF))
原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如:,当受害者的浏览器试图呈现此页面时,它将使用指定的参数向www.mybank.com的“me”端点发出请求。浏览器将请求链接以获得图像,即使它实际上是一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,比如“购买物品”,或者脆弱网站提供的任何其他功能。

1、查看页面右侧Parameters中的src和menu值,分别为267和900
2、在title中输入任何参数,message框中输入,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的(宽高设置成1像素的目的是隐藏该图片),用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
3、在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第24张图片

2.绕过 CSRF 确认( CSRF Prompt By‐Pass)
原理:跨站点请求伪造(CSRF/XSRF)是一种攻击,它欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它。本课展示如何通过发出另一个伪造的请求来绕过这样的提示符。这也适用于一系列提示,例如向导或发出多个不相关的伪造请求。

1、查看页面右侧Parameters中的src和menu值分别为270和900
2、并在title框中输入学号,message框中输入代码:


3、在Message List中生成以Title命名的链接,点击进入后,攻击成功,可以从左侧的任务栏看到任务已完成:

2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础_第25张图片

五、实验后回答问题

(1)SQL注入攻击原理,如何防御?

答:攻击原理:在用户名、密码输入框中输入一些类似',--,#的特殊字符,这些字符提交到后台数据库会与SQL语句拼接,从而实现引号闭合、注释部分SQL语句的目的,构成永真式,进而实现登录、显示信息等目的。防御:可以在后台控制输入的长度,禁止用户输入例如 -- 、' 这类的特殊符号。

(2)XSS攻击的原理,如何防御?

答:攻击原理:攻击者在Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,诱骗用户或浏览器执行一些不安全操作。
防御:用户在浏览网页时,时刻注意,在填写类似用户名密码等信息时提高警惕。同时,网页编写时,过滤一些特殊字符如 ” < > & 等 ,将其转化为不被浏览器解释执行的字符。

(3)CSRF攻击原理,如何防御?

答:攻击原理:CSRF就是冒名登录。攻击者的目的是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中。一旦用户进行了登录,Session就是用户的唯一凭证,攻击者得到Session后,就可以伪装成被害者进入服务器;
防御:定期清理cookie,不让浏览器记住密码,每次都手动输入。

六、实验体会

本次实验是本学期该课程最后一个实验,实验过程不算太复杂,我也认认真真顺利完成了实验,同时也算是对这个学期所学知识的一个总结。

 

你可能感兴趣的:(2018-2019-2 20165236《网络对抗技术》Exp9 Web安全基础)