700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php代码审计命令执行 PHP代码审计笔记--命令执行漏洞

php代码审计命令执行 PHP代码审计笔记--命令执行漏洞

时间:2024-07-17 03:18:16

相关推荐

php代码审计命令执行 PHP代码审计笔记--命令执行漏洞

命令执行漏洞,用户通过浏览器在远程服务器上执行任意系统命令,严格意义上,与代码执行漏洞还是有一定的区别。

0x01漏洞实例

例1:

$target=$_REQUEST['ip'];

$cmd = shell_exec('ping '.$target);

echo "

{$cmd}

";

?>

提交http://127.0.0.1/cmd.php?ip=|net user

提交以后,命令变成了 shell_exec('ping '.|net user)

0x02 常用命令执行函数

exec()、system()、popen()、passthru()、proc_open()、pcntl_exec()、shell_exec() 、反引号` 实际上是使用shell_exec()函数

system() 输出并返回最后一行shell结果。

exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

popen()、proc_open() 不会直接返回执行结果,而是返回一个文件指针

#system('net user');

#passthru ('dir');

#echo exec('whoami');

#echo shell_exec('whoami');

#echo `whoami`;

?>

0x03 漏洞利用及绕过姿势

| 命令管道符

<>>> 文件重定向符

测试: 0 | dir c:

代码只过滤了部分特殊字符,可以考虑用其他字符进行测试,这边列举一下Window/Linux可利用的特殊字符:

windows支持:

| 直接执行后面的语句 ping 127.0.0.1|whoami

|| 前面出错执行后面的,前面为假 ping 2 || whoami

& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

Linux支持:

; 前面的执行完执行后面的 ping 127.0.0.1;whoami

| 管道符,显示后面的执行结果 ping 127.0.0.1|whoami

11 当前面的执行出错时执行后面的 ping 1||whoami

& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

0x04如何防止命令执行漏洞

PHP内置的两个函数可以有效防止命令执行:

escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。资料参考:/manual/zh/function.escapeshellarg.php

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。资料参考:/manual/zh/function.escapeshellcmd.php

当然,修复方法还有很多方式,修复方式一般有两种思维:

1、黑名单:过滤特殊字符或替换字符 2、白名单:只允许特殊输入的类型/长度

修复代码示例一:

$target=$_REQUEST['ip'];

$octet = explode( ".", $target );

if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {

$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

$cmd = shell_exec('ping '.$target);

echo "

{$cmd}

";

}

else {

echo '

ERROR: You have entered an invalid IP.

';

}

?>

修复代码示例二:

$target=$_REQUEST['ip'];

$cmd = shell_exec('ping '. escapeshellcmd($target));

echo "

{$cmd}

";

?>

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

参考文章:

命令执行漏洞 /p/1e706f13b088

ASP代码审计 -4&period;命令执行漏洞总结

命令执行漏洞: 保存为cmd.asp,提交链接:http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令

&sol;1&sol;28 PHP代码审计之命令执行漏洞

0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...

PHP代码审计笔记--代码执行漏洞

漏洞形成原因:客户端提交的参数,未经任何过滤,传入可以执行代码的函数,造成代码执行漏洞. 常见代码注射函数: 如:eval.preg_replace+/e.assert.call_user_func. ...

ASP代码审计学习笔记 -4&period;命令执行漏洞

命令执行漏洞: 保存为cmd.asp,提交链接:http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令

Kali学习笔记30:身份认证与命令执行漏洞

文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...

PHP代码审计学习之命令执行漏洞挖掘及防御

[1]可能存在命令执行漏洞的函数: 00x1:常用的命令执行函数:exec.system.shell_exec.passthru 00x2:常用的函数处理函数:call_user_func.call_ ...

php代码审计5审计命令执行漏洞

命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤 挖掘思路:用户能够控制函数输入,存在可执行代码的危险函数 命令执行和代码执行 ...

-11-14&colon;命令执行漏洞防御,PHP反序列化漏洞产生原因,笔记

命令执行漏洞防御尽量不要使用系统执行命令在进入执行命令函数方法之前,变量一定要做好过滤,对敏感字符进行转义在使用动态函数之前,确保使用的函数是指定的函数之一对PHP语言来说,不能完全控制的危险函数最好 ...

PHP命令执行漏洞初探

PHP命令执行漏洞初探 Mirror王宇阳 by PHP 命令执行 PHP提供如下函数用于执行外部应用程序:例如:system().shell_exec().exec().passthru() sys ...

随机推荐

mysql&colon;添加索引

ALTERTABLEtb_user_typeADDINDEXuser_type_index3(report_type_id) ALTERTABLEtb_user_typeADDIN ...

XML入门级的简单学习

xml案例<?xml version="1.0" encoding="ISO-8859-1"?> Ge ...

BZOJ4195 程序自动分析

Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...

Chrome 控制台不完全指南【转载】

Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...

C&plus;&plus;使用之常量的定义

在介绍C++的常前,先看下下面的代码. for (int i = 0; i < 512; ++i) { …; } 512是什么,它具有什么含义?在代码中若直接使用类似512这些“魔数”(magi ...

Internet Explorer 11(IE11)无法切换第三方输入法

Windows 8.1搭载了新的IE11版本,还发布了IE11 for Windows 7. IE11除了支持全尺寸Win设备以外,还比IE10更快速流畅,支持3D等高性能的浏览体验.全新F12开发者 ...

mul8&lowbar;unsigned multipliter

李亚民老师更注重硬件设计思想的训练.他给出的硬件设计方法更贴近底层硬件,下面看看他的设计思想: ...

C语言缓冲区(缓存)详解

缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是输出设备,分为输 ...

IIS 加载 JSON 错误 404 解决办法

MIME设置:在IIS的站点属性的HTTP头设置里,选MIME映射中点击”文件类型”-”新类型”,添加一个文件类型:关联扩展名:*.json内容类型(MIME):application/x-java ...

python虚拟环境搭建大全(转)

Pipenv & 虚拟环境 本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地 ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。