Kingkk's Blog.

sqli-labs练习(less11-22)

2017/12/14 Share

之前less1-10的主要通过get注入,less11-20几乎通过POST注入

less-11

先检测出是post方式提交的数据(最简单的方法就看有没有增加参数嘛) 然后可以通过抓包或者审查元素的方式获取到post的参数,如下三个

  • uname=1
  • passwd=1
  • submit=Submit

然后就可以去构造然后去post发包啦 首先在uname字段构造个万能密码,然后通过#注释后面的内容 或者也可以尝试闭合后面的引号 可以看到,登录失败了,原因在于or语句之后还有一句and语句,因为并没有password=1这个字段,所以该语句为假,返回为空。 至于网上说的and优先级比or高的说法其实并不认同,个人认为两者运算优先级应当是相同的,在没有括号的情况下严格按照从左至右的顺序进行判断,也可以测试得出 然后就有两种方式可以注入:

  • 在uname字段注释后面内容然后进行注入
  • 在passwd字段注释后面内容,或者构造or永真语句。

具体注入方法和之前类似,就不赘述

less-12

进行简单的测试,发现双引号引起报错,并且 闭合括号与双引号即可, 然后和之前一样,开始注入就行了(这里正好前面没有uname=1和passwd=1的字段,所以刚好就返回union select的这一行字段)

less-13

单引号测试,报错 闭合下括号,即可,但是,不显示数据。。。 没办法了,布尔盲注吧,至少比基于时间稍微快点。附上payload passwd=1') or ascii(substr((select database()),1,1))>10 #

less-14

一样了,闭合用双引号即可 payload:passwd=1" or ascii(substr((select database()),1,1))<10 #

less-15

没有sql报错语句,只能通过加入永真语句,然后观察登录与否来判断 ok,单引号注入 然后继续布尔盲注: passwd=1' or ascii(substr((select database()),1,1))>10#

less-16

测试passwd=1")or 1=1#登录成功, 然后,也一样了,布尔大法 passwd=1")or ascii(substr((select database()),1,1))<10#

less-17

这个就有类点类似于一个修改密码的选框 输入指定的username,以及要更新的password,通过update语句,更新数据库中的password中对应username的password字段。反正这个也是看了别人写的才看懂的把。 先分析下源码。这里对uname做了较为严格的过滤,注入只好从passwd入手 这里就要涉及到另一个函数updatexml,虽然这个函数与xml有关,但其实使用它注入时并不怎么需要了解xml的知识,只是通过输入错误的第二个参数,然后报错返回我们需要的数据结果即可(还有个前提,要提前知道某个用户名存在,就猜测admin了..) passwd=a ' or 1=updatexml(1,concat(0x2a2a2a2a2a,(select database())),1)#测试了下,0x2a2a2a中2a的个数为基数时数据才显示完整,具体原因不知==、 这样即可通过xpath的报错,来获取想要的数据(tips:第一个参数一定要加,否则报错不会把数据呈现出来,第三个参数随意) 然后按照老套路注入,然后到最后获取数据的时候,会出现一个小问题 说是不能获取同一列中的数据,然后参考了下别的大佬的方法(具体原理不是很懂) 把sql语句改为select password from (select password from users where username='admin')a 就是说在加一层select 然后再给他随便取一个别名即可 其实感觉假如不怕费时的话还是盲注大法好,不过就是会毁数据库。。不过这也算多学了一招,但是条件也比较苛刻,必须有报错语句返回

less-18

这道题的本意应该是让我们通过已经登录的身份,然后在对uagent字段进行注入,因为源码中uname和passwd都进行了过滤 研究下sql语句 本来想用burpsuite抓包的,但是不知道为什么我这burpsuite无法往localhost发送数据包,然后自己用python随手写一个脚本来发包把, 先附上payload:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0 **'or updatexml(0,concat(0x2a2a2a,version()),0),'0','0') # **(后面两个’0’,以及一个括号是为了闭合语句的,不然会报sql错误) 然后能愉快的看到数据了,然后就修改那个version部分来读数据吧。

less-19

登录进去之后会显示你的referer信息,大概意思就是说通过http头中referer进行注入 观察下sql语句, 然后开始注入,本来是想用hackbar自带的referer进行注入的,后来发现好像会转义你的单引号等字节,所以还是用了py 和之前的基本差不多,就是把注入点改了下 再介绍下另一个函数extractvalue,其实目的和使用方法与updatexml差不多,只是参数变成了两个

less-20

分析下源码 大概意思就是说,你第一次登录之后会帮你设置一个uname的cookie,然后保存你的信息。然后只要这个cookie存在,就显示你的信息。 这里依旧uname和passwd都被过滤了,唯一一个点就是这个cookie值 然后修改cookie中uname的值进行注入

less-21

这里对uname的值进行了一次base64的加密,于是,只要改一下之前的payload(闭合个括号)在用base64加密一下即可

less-22

感觉没什么好讲的,变成双引号闭合而已

总结

这里主要修改了注入的点,比如POST数据,http头,以及cookie,不过感觉更麻烦的就是黑盒测试,不清楚到底哪里是注入点,以及改如何闭合语句,感觉还是需要多加锻炼。 终于也算把基础的刷完了,了解了注入的大概思路,后面就继续进阶advanced injection吧,学习些更骚气的姿势 最后,感谢 http://blog.csdn.net/u012763794/article/details/51361152

CATALOG
  1. 1. less-11
  2. 2. less-12
  3. 3. less-13
  4. 4. less-14
  5. 5. less-15
  6. 6. less-16
  7. 7. less-17
  8. 8. less-18
  9. 9. less-19
  10. 10. less-20
  11. 11. less-21
  12. 12. less-22
  13. 13. 总结