[BUUCTF 2018]Online Tool(特详解)

news2024/11/17 21:51:49

这段代码块检查请求中是否设置了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.coloradmin.cn/o/1417972.html

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

相关文章

OpenCV实战:控制手势实现无触摸拖拽功能

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV来控制手势&#xff0c;瞬间提升操作体验&#xff01;跨越界限&#xff0c;OpenCV手势控制拖拽功能现身。 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下…

Django模型(三)

一、1对1关系映射 关系型数据库的强大之处在于各表之间的关联关系。 Django 提供了定义三种最常见的数据库关联关系的方法&#xff1a;多对一&#xff0c;多对多&#xff0c;一对一 一对一关联使用 OneToOneField来定义一对一关系 就像使用其他类型的 Field 一样&#xff1a;…

共享wifi项目怎么分辨是正规还是割韭菜?!

早在前几年数字化经营火热的时候微火就在尝试一种共享方式可以让用户在公共场所可以快捷的免费体验WiFi从而提升实体商户数字化服务&#xff0c;所以就研发出了共享wifi贴项目&#xff0c;而用户则需要扫码即可连接&#xff0c;无需传统的咨询人员输入密码。这种模式在一定程度…

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试

后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 1…

百度百家号旋转验证码识别代码分享

最近研究了一下图像识别&#xff0c;一直找到很好的应用场景&#xff0c;今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好&#xff0c;下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫&#xff0c;对验证码图片进行采…

ES实战回顾

1、你用的集群节点情况&#xff1f; 一个ES集群&#xff0c;18个节点&#xff0c;其中3个主节点&#xff0c;15个数据节点&#xff0c;500G左右的索引数据量&#xff0c;没有单独的协调节点&#xff0c;它的每个节点都可以充当协调功能&#xff1b; 2、你们常用的索引有哪些&a…

SQL注入的剩余类型

除了联合查询注入&#xff0c;报错注入&#xff0c;盲注注入 sql注入还有以下几类&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9; 开始填坑 1.UA注入 原理&#xff1a;有些网站会把用户的UA信息写入数据库&#xff0c;用来收集和统计用户…

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测 目录 回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSSVM【24年…

【JaveWeb教程】(35)SpringBootWeb案例之《智能学习辅助系统》登录功能的详细实现步骤与代码示例(8)

目录 案例-登录和认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 案例-登录和认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能…

Python tkinter (6) —— Listbox控件

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 Python tkinter (5) 选项按钮与复选框 目录…

LeetCode(2)

目录 概念解释 栈 队列 树 树的概念 结点的分类 有序树 无序树 森林 二叉树 满二叉树 完全二叉树 二叉排序树 平衡二叉树 1.用栈实现队列 解法&#xff1a;双栈 2.字符串解码 解法&#xff1a;栈 3.二叉树的中序遍历 解法一&#xff1a;递归 解法二&#xff…

【干货】【常用电子元器件介绍】【电容】(一)--电容器的种类、命名方法、识别

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。   顾名思义,电容器就是“储存电荷的容器”,故电容器具有储存一定电荷的能力。就像 一般容器可以装水(或漏水),电容器可以充电(Charge)或放电(Discharge)。…

麒麟系统安装minio_centos8.0安装最新minio_离线安装minio并设置权限_创建桶---minio工作笔记001

https://www.minio.org.cn/?id=18&id=3&id=0&id=11&id=9&spinz=qianfeng&adinfo678=baidu&spinz=qianfeng&adinfo678=baidu%3E 首先去到官网去下载minio,然后 可以看到已经显示的官网,然后再去,右边点击下载 进入下载页面一般都是amd64的版本…

世界坐标系转换为平面地图坐标

将世界坐标系转换为平面地图坐标的方法通常涉及地图投影。地图投影是一种将地球&#xff08;一个三维球体&#xff09;上的点转换为平面&#xff08;二维&#xff09;地图上的点的方法。 这里介绍几种常见的地图投影方法&#xff1a; 墨卡托投影&#xff08;Mercator Projectio…

Phoncent博客GPT写作工具

对于许多人来说&#xff0c;写作并不是一件轻松的事情。有时候&#xff0c;我们可能会遇到写作灵感枯竭、写作思路混乱、语言表达困难等问题。为了解决这些问题&#xff0c;Phoncent博客推出了一款创新的工具——GPT写作工具&#xff0c;它利用了GPT技术&#xff0c;为用户提供…

Open CASCADE学习|读取STEP文件并显示

STEP文件是基于ISO 10303标准创建的三维模型数据交换文件&#xff0c;也称为产品模型数据交换标准&#xff08;Standard Exchange of Product data model&#xff09;。这种文件格式旨在提供一个不依赖具体系统的中性机制&#xff0c;实现产品数据的交换和共享。 STEP文件是一…

烟台莱州市事业单位报名流程及照片审核处理方法图文详解

烟台莱州市的事业单位招聘考试一直是众多求职者关注的焦点&#xff0c;今年也不例外。随着招聘季的到来&#xff0c;烟台莱州市的事业单位报名工作已经正式启动。对于有意向加入莱州市事业单位的朋友们来说&#xff0c;这是一个不容错过的机会。小编已经为大家精心准备了详细的…

写静态页面——魅族导航_前端页面练习

0、效果&#xff1a; 1、html代码&#xff1a;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

C语言-指针的基本知识(下)

四、指针的分类 按指针指向的数据的类型来分 1:字符指针 字符型数据的地址 char *p;//定义了一个字符指针变量&#xff0c;只能存放字符型数据的地址编号 char ch; p &ch; 2&#xff1a;短整型指针 short int *p;//定义了一个短整型的指针变量p&#xff0c…