- 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.
-
- 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.
-
- 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.
-
- 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
嗯
以上了