sqli-labs.less8-12过关记录
- Pass8
根据题意这是布尔盲注
布尔盲注通俗的说就是只有两种回显,要么回显正常页面要么错误回显,不会输出错误语句将,通过输入测试语句然后判断页面是否回显正常来确定测试的数据是否存在
输入id=1'返回错误页面
输入id=1' and 1=1--+回显正常
这里要用到substr()函数,格式是substr(参数,1,1)='字符',通过截取参数的第一个字符来对比是否等于等号后的字符,如果相等则为真,否为假
输入1' and (select substr((database()),1,1)='s')--+,返回正常页面,说明当前数据库的第一个字符为s
通过python脚本来写就是
获取到当前数据库为security,然后利用count()函数来统计当前数据库的数量
获取当前数据库中所有表的名字,脚本比较简陋,不过还好后面可以通过序号分割每个表的名字
- Pass9
根据名字可得知是时间盲注,时间盲注的注入方式是通过注入语句然后观察返回数据所需要的时间来判断是否为注入成功
这里用到sleep()函数来观察页面返回时间来确定是否存在时间盲注,时间可以尽量多一点,以免是网络问题导致时间相同而数据却不同
python脚本爆库如下:
通过发包和回包的时间差来判断是否正确
- Pass10
和Pass9一样,只是双引号闭合
- Pass11
打开发现给了一个登录界面
输入username输入admin' password输入123456
返回错误语句,还可以发现页面url没有变化,所以这是通过post发送信息
经测试通过#号来注释后面的语句,且只有2列
在插件中post模块输入uname=1' union select version(),database()#&passwd=adsfjllkjasdf查看版本和当前数据库
爆表uname=1' union select (select table_name from information_schema.tables where table_schema='security' limit 0,1),database()#&passwd=adsfjllkjasdf
中间要加上limit来限制每次只输入一行,不然一次性不能输出这么多行,当然这个可以用mysql函数来解决
在table_name处加上group_concat来将查询的内容全放在同一行里面,
获取字段名
获取表数据
- Pass12
这关闭合利用"),其他和上一关一样
剩下的过几天再写了。。。