首先我们来了解基础

基础知识来源于:<web安全攻防>徐焱

命令执行漏洞

应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行漏洞,这就是命令执行漏洞。

先了解下这些知识

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

“||”:当前面的语句只能怪出错时,执行后面的语句,例如:ping 1||whoami

“&”:如果当前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1&whoami

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

测试学习我们可以写一个简单的PHP

1 <?php
2
3 echo system(“pint -n 2 ”.$_GET[‘IP’]);
4
5 ?>

搭建好我们可以进行简单漏洞攻击 如图我们执行了查看系统当前用户命令

DVWA靶场的命令执行漏洞

LOW

Low Command Injection Source

先分析代码!

1.    <?php
2.
3. if( isset( $_POST[ 'Submit' ] ) ) {
4. // Get input
5. $target = $_REQUEST[ 'ip' ];
6.
7. // Determine OS and execute the ping command.
8. if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
9. // Windows
10. $cmd = shell_exec( 'ping ' . $target );
11. }
12. else {
13. // *nix
14. $cmd = shell_exec( 'ping -c 4 ' . $target );
15. }
16. // Feedback for the end user
17. echo "<pre>{$cmd}</pre>";
18. }
19.
20. ?>

我们分析这个靶场的代码可以看到$_REQUEST接受用户传过来的值 我们并没有看到有什么过滤机制的代码所以 可以输入任何东西。

测试执行ping127.0.0.1没问题 我们利用管道命令来 再加命令语句

我这边环境时本地windows我们选用windows的管道符 来执行  OK

Medium

Medium Command Injection Source

继续先分析代码

1.    <?php
2. if( isset( $_POST[ 'Submit' ] ) ) {
3. // Get input
4. $target = $_REQUEST[ 'ip' ];
5. // Set blacklist
6. $substitutions = array(
7. '&&' => '',
8. ';' => '',
9. );
10. // Remove any of the charactars in the array (blacklist).
11. $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
12. // Determine OS and execute the ping command.
13. if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
14. // Windows
15. $cmd = shell_exec( 'ping ' . $target );
16. }
17. else {
18. // *nix
19. $cmd = shell_exec( 'ping -c 4 ' . $target );
20. }
21. // Feedback for the end user
22. echo "<pre>{$cmd}</pre>";
23. }

我们注意6-9行 这里是个黑名单过滤 我们可以想办法绕过    这里虽然把&&和分号;加入了黑名单,但是我们还可以用逻辑或(||)、管道符(|)或(&)来命令执行  绕过

PHP的命令执行漏洞学习的更多相关文章

  1. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

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

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

  3. ASP代码审计学习笔记 -4.命令执行漏洞

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

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

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

  5. Struct2远程命令执行漏洞(S2-053)复现学习

    1.S2-053(CVE-2017-12611) RCE出自一道题目 http://www.whalwl.cn:8027/hello.action 漏洞产生原因:Struts2在使用Freemarke ...

  6. JBOSSAS 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)

    本文主要记录一下JBOSSAS 5.x/6.x 反序列化命令执行漏洞的测试过程 仅供学习 文中利用到漏洞环境由phith0n维护: JBoss 5.x/6.x 反序列化漏洞(CVE-2017-1214 ...

  7. ThinkPHP5.0.21&5.1.* 代码执行和命令执行漏洞利用

    ThinkPHP5.0.21&5.1.* 代码执行和命令执行漏洞利用 ThinkPHP5.0.21&5.1.*  exploit code execution and command ...

  8. 2020/1/28 PHP代码审计之命令执行漏洞

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

  9. [web安全原理]PHP命令执行漏洞基础

    前言 PHP命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...

随机推荐

  1. Linux命令之tab 键补全

    tab 键补全 tab 键可以实现命令及路径等补全,提高输入效率,避免出错 命令补全 用户给定的字符串只有一条惟一对应的命令,直接补全, 两次Tab会给出列表 内部命令: 外部命令:bash根据PAT ...

  2. Android面试题收录及解答10月刊

    前言 嗨,大家好,好久不见.这里跟大家侃侃这中间发生了什么. 一个月前呢,想准备面试,就网上随便找找面试题什么的,发现要么就是卖课的,要么就是不给详细回答的或者回答不够深的(也许是我没找到).反正稍微 ...

  3. 通过express快速搭建一个node服务

    Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.可以理解为是运行在服务端的 JavaScript.如果你是一个前端程序员,不太擅长像PHP.Python或Ruby等 ...

  4. BIO编程

    在实际的工作开发中,传统的模型有client/service模型.client端和service端要进行通信的话,有一种套接字的方式.传统的socket编程,包含一个socket服务端和一到多个soc ...

  5. OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...

  6. python中,*args和**kwargs这两个参数的作用是什么?

    *args和**kwargs这两个都是不定长参数,可以解决函数中参数不固定的问题,*args可以把位置参数转化成元组,**kwagrs可以把关键字参数转化成字段

  7. Java学习的第四十一天

    1.例4.4内置函数 public class cjava { public static void main(String[] args) { int i=10,j=20,k=30,m; m=max ...

  8. Linux 系统编程 学习:008-基于socket的网络编程3:基于 TCP 的通信

    背景 上一讲我们介绍了 基于UDP 的通信 这一讲我们来看 TCP 通信. 知识 TCP(Transmission Control Protoco 传输控制协议). TCP是一种面向广域网的通信协议, ...

  9. Django做验证码登录

    验证码 关注公众号"轻松学编程"了解更多. 1.作用 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力 ...

  10. Runnable接口和Callable接口的区别

    Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已:Callable接口中的call()方法是有返回值的,是一个泛型,和Future.Fut ...