• sqli blind injection盲注,以马冬梅为例


    1. This lab contains a blind SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs an SQL query containing the value of the submitted cookie.
    2. The results of the SQL query are not returned, and no error messages are displayed. But the application includes a "Welcome back" message in the page if the query returns any rows.
    3. The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.
    4. To solve the lab, log in as the administrator user.

    lab就这么说的,大概意思就是用tracking cookie注入点来获取admin的用户密码


    blind injection跟union的方式不同,主要用来发现没有回显的场景。像之前的lab是能显示出来user password的内容。

    blind是不能显示,只能回答yes or no,有点像那个游戏,就是一个人脑门子上贴个纸条,然后猜自己脑门子上写的是啥,对方只能回答yes or no。如下

    问 :是人吗?

    答:是

    问:是女的吗?

    答:是

    问:是古代的吗?

    答:不是

    问:是马冬梅吗?

    答:恭喜,答对了。


    明白这个,就开此次lab的操作吧。

    但是这道题目里怎么回答yes or no呢,就是看有没有welcome back这句话,怎么说呢,如果你构造的是个对的request,就能显示welcome back(相当于回答了你,是),否则呢,就是NO了~~

    先来个1=1,肯定是了(有welcome back)

    再来个1=2, 没有welcome back,那就是相当于回答你“不是“”了。

     接下来,要看下有没有ueser这个表,怎么构造呢?

    TrackingId=xxxx' AND (SELECT 'a' FROM users LIMIT 1)='a

    这个时候,如果没有user肯定就回答no了(不显示welcome)

    但是,哇,有welcom back

     这么一来,就知道,soso,有user这个表呢,

    也许有朋友有问题了,为什么用a,用10086不行吗? as you wish。same 啦!

    那接下来,要确认下有没有administrator这个用户(因为有welcome back 所以说明为真)

    ' AND (SELECT 'a' FROM users WHERE username='administrator')='a

     再下一步呢,就是猜密码了。。猜,那这个暴力破解有啥区别呢,等等,我们是可以减少点工作量的,

    例如,先看下密码是几位的。。。

    AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a

    可以从1开始挨个去尝试,

    长度大于1吗?是 welcome

    长度大于2吗?是 welcome

    。。。。。。

    我的做法不是挨个试,而是5,10,15,18,20。。比挨个好点哈哈,当然也有更好的办法。burp 的intruder(翻译成什么呢,不速之客吗?)

    意思就是,从1到50,每次加1,挨个试吧,跑起来,看结果! 

     

     看到length在20的时候变化了,而且回答“不是了”,也说明是20,因为长度是20,大于20 不满足了。

    再往下就是猜admin的密码,怎么猜,挨个猜。。。。知道长度是20,就从第一位,猜到20.。。如果不lucky的话,算算要试多次呢,

    ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a

    关于substring,从第几位开始,取后面几位,下图,就是从第四位开始,选2位,所以是ba

     这个的意思呢,就是从第一位开始,就看一位,看是不是等于a,问答吗,遍历,知道回答争取为止,这个呢,就是我们的第一位的数字

    ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a

    不想亲自动手的话呢,也可以再次请出不速之客

    所以可以得出,我们第一位的密码是b,boyboyboy

     后面19位呢?不速之客again

    两个都来遍历呗

    要跑720个,所以,此时可以去喝水上厕所了(community版本的话,可以去睡觉了),回来之后呢

    上结果~~~

     

    自己手动把这20个按顺序找出来,他们是

    bhu2sa4k62e4jah6k8yl(这个时候考验的是眼神,别看串行了就行)

    wow


    总结,

    这个case用到的方式就是更改逻辑,触发一个可以检测到的差异(welcome back),不断构造逻辑(是否)这样一步步找到答案(马冬梅)

    1. 找表的名字table

    2.找是否存在administrator

    3 找密码的长度(挨个试)

    4 密码(逻辑也是挨个问啦,遍历20次)

    用到的东西

    1. intruder不速之客

    2 substring

    以上了

  • 相关阅读:
    MCU与MPU的区别
    UVA297 四分树 Quadtrees
    三国志14信息查询小程序(历史武将信息一览)制作更新过程06-复现小程序
    MySQL进阶——视图
    Pre-trained Language Models Can be Fully Zero-Shot Learners
    旋转偏心裁切刀切向跟踪及半径补偿
    1-网络架构和Netty系列-网络模型
    SpringCloud微服务
    7.手机登陆功能开发
    关系数据库标准语言SQL
  • 原文地址:https://blog.csdn.net/quandaquan/article/details/126375648