Marven11

Results 8 issues of Marven11

接 #42 ,原issue太长了重新开一个 > > 主要是最近比较忙没时间看CTF了,而且最近没有看到fenjing解不出的Jinja SSTI题目,不知道该更新什么 > > 题目最好满足这些条件: > > 确定是Jinja SSTI, 而且(希望)不是python2 > payload被WAF时至少得有一点反应,比如说出现特殊页面或者关键字被替换 > payload提交方式任意,只要可以用python脚本自动化就行(甚至塞在JWT中提交也行) > 题目保证幂等性,也就是说同样的payload无论提交多少次结果都一样 > Fenjing不能绕过其中的WAF,而且最好可以用通用手法绕过 > > 最好提供题目链接或者源代码(至少有WAF的部分),如果能提供一条成功绕过的payload就更好了,感谢各位师傅

flask会读取`Content-Type`等HTTP Header放在request中,可以用来构造任意字符串 思路来自这题: > fenjing常用的大写等等手法都被ban了,端口还和fenjing的webui一样... > > 用mimetype可以构造任意字符串,但是只能构造一个 > > 有了,任意字符串可以这么构造: `print(111|pprint|replace(1,request.mimetype)|attr(request.origin))((97,97,97))` > > RCE的话可以用fork+exec实现 > > 最后的poc长这个样子,没有回显 > > ```python > payload2 = """ > {%set(s1)=(111111|pprint|replace(1,request.mimetype)|attr(request.pragma|e))((95,95,101,113,95,95))%} > {%set(s2)=(11111111111|pprint|replace(1,request.mimetype)|attr(request.pragma|e))((95,95,103,108,111,98,97,108,115,95,95))%} >...

[题目](https://ctf.show/challenges#ezzz_ssti-4495)和[WP](https://xz.aliyun.com/t/16292) 左抄抄右抄抄。。。 简单来说这个题目需要缩短payload长度,但是通过普通的手段生成的payload还是过长,没法直接打这题 这题的打法是用`{%set x=config.update(aaa=bbb)%}`往config这个字典里暂存我们的对象,把一个payload拆成多个,依次提交就能解出来 但是焚靖现在还不能把一个表达式拆成多个,要生成这样的payload可能需要小改生成器,然后让cracker用生成器给出的表达式的生成多个payload,工作量还是很大的

现在blazehttp在发送请求的时候总是会设置`Content-Length` header 但是根据[文档](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Length),这个Header只有在HTTP 1.1且没有使用`Transfer-Encoding: chunked`的时候才应该被设置 虽然现在的样本中没有使用`Transfer-Encoding`的地方,但是为了自定义样本不出错仍然需要修复这个Bug

支持HTTP/SOCKS5代理,从而使用burp suite等软件查看发送的请求

现在blazehttp会自动检测WAF页面的状态码,但CLI和GUI对这个功能的支持有些差异 CLI只支持自动检测,不支持手动指定WAF页面的状态码 GUI支持手动指定WAF页面的状态码,但是指定的状态码和自动检测得到的状态码不同则停止检测 这个PR给CLI加上了`-w`选项支持手动指定状态码,同时将GUI改为直接使用指定的状态码进行检测

让-g选项真正解析glob表达式而不仅仅是列出对应文件夹