IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> web安全-命令执行 -> 正文阅读

[PHP知识库]web安全-命令执行

目录

一、背景介绍

二、漏洞成因

三、相关函数

四、system函数利用

五、passthru函数、exec函数

六、popen、proc_open函数

七、漏洞利用

八、修复方案


一、背景介绍

? ? ? ? 程序员使用脚本语言开发应用的过程中,脚本语言的开发十分快速,但是也伴随着一些问题。比如速度慢。如果我们开发的应用 ,特别是企业级的一些应用就需要去调用一些外部程序。当web应用需要调用一些外部程序是时就会用到一些执行系统命令的函数。

二、漏洞成因

????????应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令中执行,在没有过滤的情况下就会造成命令执行漏洞。

三、相关函数

????????system(args)有回显

????????passthru(args)有回显

????????exec(args)回显最后一行必须用echo输出

????????反引号``

????????popen(handle,mode)无回显

????????proc_open('cmd','flag','flag')无回显

四、system函数利用

? ? ? ? 1.

<?php
    system($_GET[1], $status);
    var_dump($status);

可以看到状态返回码,成功为0,失败为1.

<?php
    $arg = $_GET['cmd'];
    if($arg) {
        system("$arg");
    } 
    ?>

2.and(&&) 和or(||)

<?php
$arg = $_GET['cmd'];
if($arg){
    system("ping $arg");
}
 ?>

在终端值行命令使用特殊符号带来不同结果

????????&&:

????????左true 右true;两边都执行

????????左false 右true;都不执行,反之左边执行

????????左false 右false ;都不执行

????????||:

????????左true 右true;执行左边

????????左false 右true;执行右边

????????左true右false ;执行左边

????????左false 右false ;都不执行

????????|:

????????左true 右true;优先执行右边的命令

????????左false 右true;都不执行

????????左true右false ;都不执行

????????左false 右false ;都不执行

????????&:

????????左true 右true;两边都执行

????????左false 右true;右边执行

????????左true右false ;执行左边

????????左false 右false ;都不执行

????????用&符号注意用URL编码

<?php
$arg = $_GET['cmd'];
if($arg){
    system("dir\"$arg\"");
}
 ?>

<?php
$arg = $_GET['cmd'];
if($arg){
    system("echo '$arg'>1.txt");
}
 ?>

?

五、passthru函数、exec函数

<?php
passthru($_GET[1], $stat);
var_dump($stat);
 ?>

也返回状态码,类似于system

<?php
exec($_GET[1]);
 ?>

此时是不返回任何值的,(回显最后一行,必须用echo输出

<?php
echo exec($_GET[1]);
 ?>

?

<?php
 exec($_GET[1], $stat);
 var_dump($stat);
?>

想打印所有结果传递第二个参数,参数是引用传递自动填充一个数组

六、popen、proc_open函数

????????popen打开进程文件指针,打开一个指向进程的管道,该进程由派生给定的command命令执行而产生的。

<?php
    $a = popen($_GET[1], 'r');
    while ($line = fgets($a)){
        echo $line;
    }
?>

?

?php
    $des = array(
        0 => array("pipe", "r"),//标准输入
        1 => array("pipe", "w"),//标准输出
        2 => array("file", "./error-output.text", "a")
    );
$a = proc_open($_GET[1], $des, $pipes);
var_dump($a);
//echo stream_get_contents($pipes[1]);
while ($b = fgets($pipes[1])){
    echo $b;
}
?>

?stream_get_contents 读取流中的内容

七、漏洞利用

????????如果有写权限的话

????????????????1、反弹shell,尝试提权

????????????????2、执行pwd绝对路径,写一句话木马:

? ? ? ????????????????????????? ?cmd=echo ^</?php phpinfo()?^> >/var/www/xxx/xx/info.php

Windows系统中 转义符号是^

八、修复方案

? ? ? ? 1.不要调用其他程序处理,尽量少用执行命令的函数,并在disable_functions中禁用。

? ? ? ? 2.对参数进行过滤,escapeshellcmd/escapeshellarg过滤。

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

????????????????escapeshellcmd? ? 转义特殊字符

? ? ? ? 3.参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义

? ? ? ? 4.exec()函数中数据,避免用户可控。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:10:13  更:2022-02-26 11:10:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:23:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码