sql注入2-BugkuCTF平台

sql注入2-BugkuCTF平台

方法1

这道题是DS_Store源码泄露,跑一下就出来了,自动生成了一个文件夹“123.206.87.240_8007”,打开找到flag文件即可得到答案。

昶
方法2

利用字符串与数字做运算时,字符串会转为数字再做运算,例如"abc"=""=0"12ab"=12>11,可看下图示例,若是username=0-1=-1时就会报错,但username=0-0=0时是不会报错的,会回显相应的信息。
这样我们就能利用 admin'-0-' 来构造payload。因为源代码类似于 select * from xxx where username='输入处'; 所以 admin'-0-' 输入后就相当于username='admin'-0-'',也就是字符串与数字的运算问题了。
首先使用异或注入(不详自行百度)判断哪些被过滤了,手工测太麻烦,在Burp下跑字典(字典里面就是常用的sql关键词)。
发现题目给的“提示 !,!=,=,+,-,^,%”这些都是没有被过滤的,而像“union,or,and,for,information,逗号,空格”等都被过滤了。

昶
昶

由于information都被过滤了,就不能使用information_schema来爆表、爆列了。这时想到源代码的uname、passwd,猜测就是最后的字段名。
由于uname=admin已经确定,那么写脚本异或注入一下得出passwd的长度为32,猜测是md5加密后的值,那就一位位爆出来。

昶
昶

发现“ascii(),substr(),mid()”都没有被过滤,substr(database(),1,2)=substr(database() from 1 for 2),但由于for、逗号、空格被过滤,这里考虑使用substr()mid()也完全一样。
说明原理:若passwd=abc123。
substr((passwd)from(1))='abc123',substr((passwd)from(2))='bc123'
比较ascii值:ascii(substr((passwd)from(2)))=98    //只比较字符串得第一位,98即b得ascii值
当表达式为真时,返回“username error!!@_@”;当表达式为假时,返回“password error!!@_@”。
写脚本跑一下即可。“0192023a7bbd73250516f069df18b500”这串字符取md5解密一下得到“admin123”。
使用用户名“admin”和密码“admin123”登录后输入ls执行即可得到flag。

昶
昶
昶
转载请注明出处。
本文网址:https://blog.csdn.net/hiahiachang/article/details/105059489

发布了16 篇原创文章 · 获赞 2 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/hiahiachang/article/details/105059489
今日推荐