[BUUCTF 2018]Online Tool(特详解)

news/2025/3/26 16:14:42/

这段代码块检查请求中是否设置了HTTP_X_FORWARDED_FOR头部。如果设置了,它将REMOTE_ADDR设置为HTTP_X_FORWARDED_FOR的值。这通常用于处理Web服务器位于代理后面的情况。

  • 如果URL中未设置host参数,它使用highlight_file(__FILE__);来显示PHP文件的源代码。

  • $host 字符串传递给 escapeshellarg 后,它会在字符串周围添加单引号,并对一些特殊字符进行转义,以防止它们被解释为特殊命令。

  • escapeshellcmd 函数用于转义字符串,并删除任何特殊字符,使其安全用作单个命令。

  • 如果设置了host参数,它获取该值,使用escapeshellargescapeshellcmd进行一些净化,创建基于客户端IP地址的唯一沙盒目录,然后在该沙盒内对指定的主机执行nmap命令。

注意:使用escapeshellargescapeshellcmd表明试图防止命令注入漏洞

chdir($sandbox);
  • chdir 函数用于改变当前的工作目录(Current Working Directory,CWD)为指定的目录。

  • 在这里,$sandbox 是之前根据用户IP地址创建的沙盒目录的名称(通过 md5("glzjin" . $_SERVER['REMOTE_ADDR']) 计算得到的)。

  • 这意味着 PHP 脚本的当前工作目录将被更改为用户特定的沙盒目录,后续的文件和命令将在这个目录下执行。

1,首先判断客户端提供给服务器和服务器自动获取的ip是否一致。 2,判断get host参数时候传值,没有传值高亮当前代码。 3,传值,host传递参数经过escapeshellarg,escapeshellcmd函数的限制。 4,以’glzjin’+ip通过md5加密形成值,并作为文件名创建文件,当前文件地址更改为创建的文件 5,输出 system执行结果。

通过其他师傅明白了点,原文PHP escapeshellarg()+escapeshellcmd() 之殇 (seebug.org)

1. 传入的参数是:`172.17.0.2' -v -d a=1`
2. 经过`escapeshellarg`处理后变成了`'172.17.0.2'\'' -v -d a=1'`,即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
3. 经过`escapeshellcmd`处理后变成`'172.17.0.2'\\'' -v -d a=1\'`,这是因为`escapeshellcmd`对`\`以及最后那个**不配对儿**的引号进行了转义:http://php.net/manual/zh/function.escapeshellcmd.php
4. 最后执行的命令是`curl '172.17.0.2'\\'' -v -d a=1\'`,由于中间的`\\`被解释为`\`而不再是转义字符,所以后面的`'`没有被转义,与再后面的`'`配对儿成了一个空白连接符。所以可以简化为`curl 172.17.0.2\ -v -d a=1'`,即向`172.17.0.2\`发起请求,POST 数据为`a=1'`。

但是经过上面的函数处理后变成了一个被单引号包围的字符串,不会当命令去执行,这里我们需要闭合一个单引号。

nmap有一个参数-oG可以实现将命令和结果写到文件

所以我们可以控制自己的输入写入文件,这里我们可以写入一句话木马链接,也可以直接命令 cat flag

flag

?host=' <?php echo `cat /flag`;?> -oG test.php '

这里注意用反引号cat /flag

image-20240128191921643

然后直接读取

image-20240128191936477

其实这里我是不太懂的,因为查資料escapeshellcmd会

反斜线(\)会在以下字符之前插入: *&#;`|*?~<>^()[]{}$*, \x0A\xFF'" 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 %! 字符都会被空格代替。

那么运行结果会是这样的

\<\?php echo \`cat /flag\`\;\?\> -oG test.php

image-20240128190320445

这个在php文件怎么执行呢?

然后

nmap -T5 -sT -Pn --host-timeout 2 -F  \<\?php echo \`cat /flag\`\;\?\> -oG test.php 

image-20240128191343217

在 Linux 中,反斜杠(\)是转义字符,用于改变后面字符的原始意义。它告诉解释器后面的字符应该被特殊对待,而不是按照其原始含义解释。\\ 表示一个反斜杠字符。

就目前来看可以看到\都没有了只剩下了<?php echo `cat /flag`;?>

那一切都合理了\在linux中其实相当于无实义连接符


http://www.ppmy.cn/news/1336866.html

相关文章

260:vue+openlayers 通过webgl方式加载矢量图层

第260个 点击查看专栏目录 本示例介绍如何在vue+openlayers中通过webgl方式加载矢量图层。在做这个示例的时候,采用vite的方式而非webpack的方式。这里的基础设置需要改变一下。 ol的版本7.5.2或者更高。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文…

数论与图论

数论&#x1f388; 筛质数 最普通的筛法O(nlogn)&#xff1a; void get_primes2(){for(int i2;i<n;i){if(!st[i]) primes[cnt]i;//把素数存起来for(int ji;j<n;ji){//不管是合数还是质数&#xff0c;都用来筛掉后面它的倍数st[j]true;}} } 诶氏筛法 O(nloglogn)&#…

【软件测试】学习笔记-构建并执行 JMeter 脚本的正确姿势

有些团队在组建之初往往并没有配置性能测试人员&#xff0c;后来随着公司业务体量的上升&#xff0c;开始有了性能测试的需求&#xff0c;很多公司为了节约成本会在业务测试团队里选一些技术能力不错的同学进行性能测试&#xff0c;但这些同学也是摸着石头过河。他们会去网上寻…

嵌入式学习第二章——C语言基础6

目录 1&#xff0c;一些常用的排序方法 1&#xff0c;冒泡法 2&#xff0c;选择法 3&#xff0c;插入法 4&#xff0c;希尔排序 5&#xff0c;快速排序 1.二维数组: 1.二维整形数组: 1.定义: 2.元素访问: 3.元素初始化: 1.全部初始化: 2.局部初始化: 3.默认初始化: 4.二维…

分布式ID(4):雪花算法生成ID之Leaf(美团点评分布式ID生成系统)

1 Leaf官方地址 Leaf源码地址: https://github.com/Meituan-Dianping/Leaf Leaf官方说明文档地址: https://tech.meituan.com/2019/03/07/open-source-project-leaf.htmlhttps://github.com/Meituan-Dianping/Leaf/blob/master/README_CN.md 这边只做简单介绍,详细说明…

机器学习 | 深入探索Numpy的高性能计算能力

目录 初识numpy numpy基本操作 数组的基本操作 ndarray运算 数组间运算 矩阵 初识numpy Numpy&#xff08;Numerical Python&#xff09;是一个开源的Python科学计算库&#xff0c;用于快速处理任意维度的数组。Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务&…

笔记 | Clickhouse 命令行连接及查询

在 ClickHouse 中&#xff0c;可以使用命令行客户端执行查询。默认情况下&#xff0c;ClickHouse 的命令行客户端称为 clickhouse-client。下面是一些基本的步骤和示例&#xff0c;用于使用 clickhouse-client 进行查询。 首先&#xff0c;需要确保已经安装了 ClickHouse 服务…

电商数据API接口|电商数据抓取|关键词搜索商品详情

电商行业通过多种方式在发展进步&#xff0c;使线上购物变得更加便捷。2019年&#xff0c;约有19.2亿人在线购买商品或服务。这一数字预计从2019年的19.2亿增加到2021年的21.4亿。由于线下很多商店关闭&#xff0c;加上购物者也害怕在公共场合感染COVID-19&#xff0c;使2020年…