[关闭]
@lightless 2017-04-07T17:26:44.000000Z 字数 1909 阅读 1749

FuckMySQL Writeup!

pentest writeup web


0x00 题目分析

根据题目描述,这个是一个渗透题,需要用日站的思路去做,并不仅仅是一个简单的web题,如果思路过于局限很容易被卡死(在ALICTF里已经被教做人了喂!)

打开所给的页面,发现是一个图片库,根据页面描述需要日到服务器,也就是有可能拿到服务器的shell。刷新几次发现图片是随机出现的,除了img目录外并无其他出现的页面或目录。此时可以考虑扫描端口以及目录了。

0x01 找后台

日站的一个比较常见的思路是找后台,当然现在的情况大概也只能找后台了,在实际情况中有时候需要扫二级域名找后台,这个题明显是不需要找二级域名的。
先开个扫描器扫目录,发现了www.zip,下载下来打开发现是葫芦娃,WTF?
除了这个别的没扫到什么有用的东西。

打开robots.txt看一下,发现了很多目录和页面,依次尝试找到了admina.php这个后台页面。

0x02 进入后台

现在已经找到了后台,下一步要做的就是进入后台了。此时主要有几个思路可以走,弱口令爆破,社工,注入等。
经过一些注入的尝试,发现并没有啥的注入点,啥都注不进去。
尝试几个用户名之后发现会提示用户名错误,根据这个情况可以爆破或者猜一猜用户名。根据网站最下面的footer发现了powered by lightless,把lightless作为用户名去尝试下,发现提示密码错误,由此可以判断用户名就是这个了,需要找密码。直接把lightless丢到社工库里去找,找到了很多密码,挨个尝试后发现有一个是正确的,可以登陆后台。

0x03 后台的提示

登陆进来后发现了管理员的TODO LIST,其中有提到管理员喜欢用vim并且鄙视EMACS党。还有一个ccaaaaaaaat.php的文件里有个猫的图片,管理员想将他加入图片库中。后两个提示基本没什么用。
在ccaaaaaaaat这个文件的注释中发现了hint,要我们寻找些什么东西,既然管理员喜欢使用vim,很有可能留下vim的备份文件,尝试对每个页面寻找备份文件,最终发现了ccaaaaaaaaat.php~这个文件,down下来发现是一份PHP源码。

0x04 MySQLのBlack马猴?!

仔细阅读一下这份源码,发现有很严谨的防注入过滤函数,大部分的关键字都被过滤了,我是绕不过他。下面发现了一段很有趣的代码:

  1. $result = $db->query($sql);
  2. if ($result->num_rows == 1) {
  3. $row = $result->fetch_assoc();
  4. if ($row['key2'] == $_POST['key2']) {
  5. echo "=.= Y are u so diao? I will give you a flag! ".$flag;
  6. exit;
  7. }
  8. } else {
  9. echo "I am fucking!";
  10. }

其中$key1$key2是可控的,需要满足两个条件,分别是从数据库中SELECT出信息,以及$row['key2'] == $_POST['key2']
这里需要用的MySQL的一个黑魔法,使用group by with rollup

在mysql数据库的group by语句存在with rollup修饰语,使用with rollup修饰语可以在group by结果后面额外添加一行(该行内容中group by的列会返回一个NULL,其他列则返回相应的内容)。

官方文档:http://dev.mysql.com/doc/refman/5.5/en/group-by-modifiers.html
利用方法参考:http://www.jinglingshu.org/?p=10541

0x05 GOT flag

绕过之后成功的得到了第一个flag,后面还跟着一串奇怪的东西,进行base64解码发现不正确,发现所有的字母都是大写,猜测是base32,使用base32成功解码。

解码后提示"Ni Xiang Yao Shell Me? GoGoGo!",说明此题未完,需要继续日。

0x06 脑洞大开

将那只猫的图片下载下来,使用十六进制编辑器打开,发现最后有附加数据:piinngg.php。(好坑啊喂!没有脑洞怎么可能想的到啊!)

访问这个页面,发现是输入IP地址,返回ping的结果,目测命令执行,尝试执行ls(payload为127.0.0.1&&ls),发现真的可以成功执行。

0x07 GET SHELL

但是在尝试127.0.0.1&&ls -al的时候失败了,猜测大概是因为空格被过滤了,使用${IFS}代替空格,成功,接下来就可以getshell了,然后在img文件夹下发现第二个flag。至此本题已经日完,收入shell一只。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注