日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP-代码审计-命令执行

發布時間:2024/6/3 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP-代码审计-命令执行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當你的才華

還撐不起你的野心時

那你就應該靜下心來學習


? ? ? 代碼審計學習線上實驗,都是CE一邊實操,一邊整理的筆記,方便以后翻看時,可快速查閱。

目錄

命令注入漏洞產生的原因

簡介

相關函數

命令注入漏洞防范


命令注入漏洞產生的原因

? ? ? 命令注入攻擊可被攻擊者用來導入代碼到某特定的計算機程序,以改變程序的運行進程或目的。 PHP命令注入則是由于Web應用程序對用戶提交的數據過濾不嚴格,導致黑客可以通過構造特殊命令字符串的方式,將數據提交至Web應用程序中,并利用該方式執行外部程序或系統命令實施攻擊,非法獲取數據或者網絡資源等

簡介

PHP命令注入攻擊漏洞是PHP應用程序常見漏洞之一

國內著名的PHP應用程序,如discuz!、dedecms等大型程序在網絡中均被公布過存在命令注入攻擊漏洞,黑客可以通過命令注入攻擊漏洞快速獲取網站權限,進而實施掛馬、釣魚等惡意攻擊,造成的影響和危害十分巨大。

同時,目前PHP語言應用于Web應用程序開發所占比例較大,Web應用程序員應該了解命令注入攻擊漏洞的危害。

需要注意PHP命令注入和Sql注入、PHP代碼執行漏洞的區別:

  • Sql注入漏洞是將Sql語句注入到后臺數據庫中進行解析并執行

  • PHP代碼執行漏洞是將PHP代碼注入到Web應用中通過Web容器執行

  • 命令注入漏洞是指注入可以執行的系統命令(如windows中的CMD命令、linux中的Bash命令)并執行

相關函數:

? ?system()、exec()、passthru()、shell_exec()、popen()、proc_open()、pcntl_exec()一共7個函數。

?

命令注入函數,分為三類

第一類函數

? ? ? ?包括system()、exec()、shell_exec()、passthru()可以直接傳入命令執行并返回結果,其中system()最簡單,不需要輸出函數,會自動打印命令執行結果,所以這里我們先講解system()函數

代碼如下,變量 $id 獲取 get 方式傳遞的變量名為 bash 的變量值(值為一個字符串),然后傳入system()函數被當作命令執行:

  • <?php
  • $id = $_GET['bash'];
  • system("$id");
  • ?>
  • ?通過代碼分析,構造我們的payload為:?bash=pwd時,頁面就能成功返回當前當前.php文件所在目錄的地址

    ?其他幾個函數類似相同的道理,比如exec()、shell_exec()、passthru()函數,大家自己手動試試吧。

    exec() 函數

  • <?php
  • $id = $_GET['bash'];
  • $get = exec("$id");
  • echo $get;
  • sehll_exec 函數

  • <?php
  • $id = $_GET['bash'];
  • $get = shell_exec("$id");
  • echo $get;
  • passthru 函數

  • <?php
  • $id = $_GET['bash'];
  • $get = passthru("$id");
  • echo $get;
  • ?

    第二類函數

    說明:

    ? ? ? ?resource popen ( string $command , string $mode )

    ? ? ? 打開一個指向進程的管道,該進程由派生給定的 command 命令執行而產生

    • 第一個參數?$command 會被當作命令執行
    • 第二個參數?$mode 決定執行模式,有兩個取值r?或者?w?,來指明是讀還是寫

    ?

    ? ? ? ?包括popen()、proc_open(),當使用這類函數傳入命令時,命令會執行,但不會返回執行結果。

    代碼如下,

  • <?php
  • $bash = $_GET['bash'];
  • popen("$bash",'r');
  • ?通過代碼分析,構造我們的payload為:?bash=ifconfig >> /tmp/popen.txt時,頁面沒有返回信息,但我們這行命令的意思是將ifconfig 輸出的信息寫道路徑為/temp 下的popen.txt里。

    ?

    第三類函數

    說明:

    ? ? ? ? void pcntl_exec ( string $path [, array $args [, array $envs ]] )

  • 以給定參數執行程序:
  • ? path : path必須時可執行二進制文件路徑或一個在文件第一行指定了一個可執行文件路徑標頭的腳本
  • (比如文件第一行是#!/usr/local/bin/perl的perl腳本)
  • ? args: args是一個要傳遞給程序的參數的字符串數組
  • ? envs : envs是一個要傳遞給程序作為環境變量的字符串數組,這個數組是 key => value格式的,key代表要傳遞的環境變量的名稱,value代表該環境變量值
  • $path 為可執行程序的路徑,如果是perl或者Bash腳本,則需要在文件頭加上?#!/bin/bash來標識可執行程序路徑,args 表示傳遞給args表示傳遞給path程序的參數,$envs 則是執行這個程序的環境變量。?

    參考鏈接:https://www.shiyanlou.com/courses/895

    ?

    命令注入漏洞防范

    通常我們可以使用白名單對用戶輸入進行過濾,這是一種通用的手段。

    除此之外這里有幾項具體的建議:

  • 使用自定義函數或函數庫來替代外部命令的功能

  • 使用 escapeshellarg()函數來處理命令參數

  • 使用 safe_mode_exec_dir 指定可執行文件的路徑


  • 我不需要自由,只想背著她的夢

    一步步向前走,她給的永遠不重


    ?

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的PHP-代码审计-命令执行的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。