2019-2020-2 网络对抗技术 20175224 Exp9 Web安全基础
2021-02-16 22:20
标签:inpu rop 构造 sim sql语句 自己 根据 意思 反射 目录 一、实验基础问题回答 二、实验过程 三、问题与思考 四、实验总结 (1)SQL注入攻击原理,如何防御 原理: 防御办法: (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 原理: 防御办法: 下载webgoat-container-7.0.1-war-exec.jar文件 在含有该文件的目录下使用命令 1、比如在某个论坛提供留言板功能,黑客在留言板内插入恶意的html或者Javascript代码,并且提交。 黑客的脚本可以用来做如下所述的攻击: 1.通过javascript获取用户的cookie,根据这个cookie窃取用户信息 打开 在
一、实验基础问题回答
二、实验过程
WebGoat准备
介绍:WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
java -jar webgoat-container-7.0.1-war-exec.jar
运行Webgoat
,出现信息: Starting ProtocolHandler ["http-bio-8080"]
说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端
http://localhost:8080/WebGoat
进入WebGoat
登录界面,直接用默认用户名密码登录即可
XSS攻击
跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
① Phishing with XSS 跨站脚本钓鱼攻击
② Stored XSS Attacks 存储型XSS攻击
存储型XSS的攻击基本流程:
2、网站后台程序将留言内容存储在数据中
3、然后一个用户也访问这个论坛,并刷新了留言板,这时网站后台从数据库中读取了之前黑客的留言内容,并且直接插入在html页面中,这就可能导致:黑客留言的脚本本身应该作为内容显示在留言板的,但此时黑客的留言脚本被浏览器解释执行。
2.重定向网站到一个钓鱼网站
3.重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器
Cross-Site Scripting (xss)
攻击中的第二个:Stored XSS Attacks
Message
框中输入以下代码,并点击submit
,Title
随便输入
提交后,下方Message List
中会新增刚输入的Tile
名字的链接,点击链接。
可以看到我们的html
已经注入成功,messege
部分显示的是三色框
③ Reflected XSS Attacks 反射型XSS攻击
反射型XSS:我们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不同的HTML返回。
value可能出现在返回的HTML(可能是JS,HTML某元素的内容或者属性)中,
如果将value改成可以在浏览器中被解释执行的东西,就形成了反射型XSS.
别人可能修改这个value值,然后将这个恶意的URL发送给你,当URL地址被打开时,
特有的恶意代码参数就会被HTML解析执行.
它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
存储型XSS与反射型XSS的区别:
①存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。
②反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
-
打开xss的第三个攻击Reflected XSS Attacks
-
在Enter your three digit access code中输入点击Purchase,成功显示警告框,内容为我们script脚本指定的内容:
CSRF攻击
跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过**伪装来自受信任用户的请求**来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
① Cross Site Request Forgery(CSRF)
- 打开Cross-Site Scripting (xss)攻击中的第四个:Cross Site Request Forgery(CSRF)
- 查看页面下方Parameters中的src和menu值,分别为311和900
- 在
message
框中输入
"http://localhost:8080/WebGoat/attack?Screen=311&menu=900&transferFunds=5000" width="1" height="1" />
- 以图片的的形式将URL放进
Message
框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit
提交
- 提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
② CSRF Prompt By-Pass
- 打开`Cross-Site Scripting (xss)`攻击中的第五个:CSRF Prompt By-Pass
- 同攻击4,查看页面下侧Parameters中的src和menu值
- 在title框中输入学号,
message
框中输入代码 -
- 在Message List中生成以Title命名的链接"20175224"。
- 点击进入后,如图攻击成功:
SQL注入攻击
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
① Command Injection
- 右键点击页面,选择`inspect Element`审查网页元素对源代码进行修改
- 在复选框中任意一栏的代码后添加& netstat -an & ipconfig
- 点击
view
,能看到网络端口使用情况和 IP 地址,攻击成功
② Numeric SQL Injection
显示所有城市的天气情况
- 右键点击页面,选择`inspect Element`审查网页元素对源代码进行修改,在选中的城市编号`Value`值中添加`or 1=1`
- 攻击成功,显示所有城市的天气情况
③ Log Spoofing
通过查看下方灰色区域,我们分析它代表在 Web 服务器的日志中的记录的内容。目的:使用户名为“admin” 的用户在日志中显示“成功登录”。
方法:通过在日志文件中插入脚本实现。
-
在username中填入 axy175224%0d%0aLogin Succeeded for username: admin,利用回车(0D%)和换行符(%0A)让其在日志中两行显示
-
点击
Login
,可见axy175224在Login Failed
那行显示,我们自己添加的语句在下一行显示 -
可以向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。用户名输入
admin
,管理员可以看到弹窗的cookie信息。
④ String SQL Injection
目的:尝试通过 SQL 注入将所有信用卡信息显示出来。方法:基于以下查询语句构造自己的 SQL 注入字符串。
SELECT * FROM user_data WHERE last_name = ‘?‘
。
- 选择
Injection Flaws
中的String SQL Injection
- 输入查询的用户名
axy‘ or 1=1--
如此axy
和1=1
都成了查询的条件,而1=1
是恒等式,这样就能select表里面的所有数据。
⑤ LAB:SQL Injection
Stage 1: String SQL Injection通过注入字符串绕过认证
- 右键点击页面,选择
inspect Element
审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20或更大 - 以用户Neville(admit)登录,输入密码
hello‘ or ‘1‘ = ‘1
,成功得到所有人员列表
Stage 3: Numeric SQL Injection
- 通过注入数字型数据,绕过认证
- 可以通过普通账户,查看到管理员的用户信息
- 使用用户名
Larry
和密码larry
登录,浏览员工信息的按钮是ViewProfile
- 右键审查网页元素修改源代码,用社会工程学解释老板应该是工资最高的,所以将员工ID的
value
改成101 or 1=1 order by salary desc
,使得老板的信息作为查询到的第一条数据 - 成功得到老板的账户信息
⑥Database Backdoors
数据库通常作为一个 Web 应用程序的后端,它可以被用来作为存储恶意活动的地方,如触发器
- 输入id
101
,我们可以看到插入查询语句的字符串没有经过任何处理,即可以输入多条语句进行增、删、改、查 - 输入注入语句
101; update employee set Password=20175224
执行,可以看见密码框成功变为了自己设置的密码 - 输入语句:
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘axy@qq.com‘WHERE userid = NEW.userid
- 之后当用户更新设置邮箱时,就会设置成攻击者的地址
⑦Blind Numeric SQL Injection
- 某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语句
- 使用表单的返回信息(真或假)测试检查数据库中其它条目信息
- 可以利用系统后台在用的查询语句
SELECT * FROM user_data WHERE userid=accountNumber;
- 如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用AND函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果提示帐号有效,否则无效
- 例如,输入查询语句
101 AND 1=1
,因为两个条件都成立,所以页面返回帐号有效
- 输入查询语句
101 AND 1=2
,因为第二个条件不成立,所以而页面返回帐号无效
- 最后,可以使用二分法不断调整数值,缩小判断范围,判断出PIN数值的大小
- 针对查询语句的后半部分构造复杂语句,语句
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
- 这里提示
Invalid account number
表示PIN
- 经过二分法的不断调整后得到如下语句返回帐号有效:
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) = 2364 );
- 因此PIN数值为
2364
pin字段类型为varchar
- 查询语句:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) ‘H‘ );
- 该语句使用了SUBSTRING方法,取得PIN字段数值的第一个字母
-
Invalid account number
表示其PIN字段首字母≥H
- 经过多次测试(比较0-9、A-Z、a-z等字符串)和页面的返回数据,判断出第一个字符为
J
- 同理继续判断第二个字符
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 2, 1) ‘h‘ );
- 最终,判断出PIN字段的值为
Jill
三、问题与思考
打开网址时左边没有内容- 分析:电脑jdk版本和 这个jar的jdk版本不同
- 解决方案:重新安装JDK(参考资料)
四、实验总结
通过本次实验学习了使用WebGoat工具进行SQL注入攻击、XSS攻击、CSRF攻击,主要攻击方法便是利用语句漏洞。总体挺有意思,对SQL语句格式有了更深掌握。2019-2020-2 网络对抗技术 20175224 Exp9 Web安全基础
标签:inpu rop 构造 sim sql语句 自己 根据 意思 反射
原文地址:https://www.cnblogs.com/axyaxy/p/12965559.html
上一篇:使用JS获取地址栏的参数
文章标题:2019-2020-2 网络对抗技术 20175224 Exp9 Web安全基础
文章链接:http://soscw.com/index.php/essay/56295.html