CTF之Sqli-Labs题⽬解析(1-11题)
第⼀题
提⽰输⼊numeric类型的ID作为参数,尝试在url后添加?id=1查看,发现有显⽰。
改为?id=-1后⽆显⽰,也⽆报错,于是可以考虑-1空出位置后加union select爆数据。
改为?id=1'单引号报错,双引号不报错,可以推断出使⽤单引号闭合。这⾥双引号不报错的原因是mysql在执⾏查询的时候会做⼀个类型转换,1”会转换为1,mysql测试⼀下。
所以刚才双引号回显正常。
继续刚才的步骤,加上注释之后,错误也消失了,所以在这个时候可以union select了。
然后添加order by语句,?id=1' order by 4 --+,当order by 4的时候报错,所以⼀共有3个字段。
然后使⽤union select 1,2,3 知道字段值对应的回显位置。
可以看到,⼦查询中第⼆个字段的位置对应name的位置,第三个字段的位置对应password的位置。
然后⽤select group_concat(table_name) from information_schema.tables where table_schema = database()爆表名
⽤select group_concat(column_name) from lumns where table_name = XXX爆列名即可,其中XXX为上⼀步爆出的表名,如图
第⼆题
添加单引号和双引号都报错,所以可以判断为数字类型,直接union select并添加注释
linux下的sleep函数
然后information_schema爆库即可
第三题
单引号报错,双引号正常,说明是单引号闭合。
加order by测字段数⼜报错,发现需要闭合括号
添加括号果然正确,看⼀下后台sql:
果然是需要括号闭合的,后⾯步骤不再重复了。
第四题
与上⼀题类似,只不过单引号+括号闭合变成了双引号+括号闭合。
后台看⼀下sql语句
第五题
单引号闭合错误,双引号闭合正常,说明需要单引号闭合,加上注释后回显正常,⽤id=-1 union select 1,2,3测试回显位发现⽆论什么数据都会是同样的页⾯
考虑使⽤报错注⼊。
⼀般使⽤updatexml这个函数进⾏报错注⼊
原理就是利⽤updatexml这个函数,可以看⼀下mysql中关于updatexml函数的⽤法(help 函数名),⼤意就是从第⼀个参数xml_target 中到匹配第⼆个参数的语句,替换为第三个参数的语句。
构造payload如下:
这⾥在updatexml中间的参数构造爆表名的语句,⽽这个语句是不符合xpath语法的。⽽使⽤0x7e的原因是mysql在输出错误信息时,只打印特殊符号之后的信息。0x7e在ascii中表⽰为~,这样就会爆出两个0x7e之间的错误信息,这⾥可以看到,成功爆出表名。
后台看⼀下php逻辑
可以看到,只要构造的sql语句可以查出数据,就会输出You 这句话,⽽不会在页⾯上有其他的显⽰。⽽sql出错的话,会直接在页⾯上打印错误信息。
第六题
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论