目录
实验目的及内容
目的: 理解常用网络攻击技术的基本原理
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登录界面
- 其中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)
SELECT * FROM user_data WHERE last_name = '?'
目标:下面的表格,允许用户查看他们的信用卡号码。尝试通过 sql 注入将所有信用卡信息 显示出来。尝试的用户名是“Smith”。
3、攻击成功,得到所有用户的信用卡号码
分析:Smith 和1=1都成了查询的条件,而1=1是恒等式,因此能查询到表里面的所有数据
(六)数据库后门(Database Backdoors)
原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert,?select,?update?or?delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。?
目标:我们的目标是学习如何利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MysqL 数据库,不支持触发器,所以该课程不会真正完成。 我们的 Login ID 是 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
操作方法:
<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 举报,一经查实,本站将立刻删除。