網絡安全自學篇-PHP代碼審計(四)

一個網絡安全小白在學習過程中記錄下的筆記,希望在CSDN能和大家一起成長,學習,分享,進步,下面分享的是代碼審計中代碼執行漏洞的案例,希望對入門網安的朋友們有所幫助,大神有興趣看看即可,勿噴感謝,同時也歡迎各位師傅私聊交流學習。文章有所參考,也感謝教授我網安知識的師父們,感謝出生在這個互聯網時代,知識觸手可及。

代碼執行漏洞

原理:web應用本身過濾不嚴,即參數可控,導致攻擊者可以通過惡意請求將代碼注入到應用中執行。
挖掘思路:
1、用戶能夠控制函數輸入
2、存在能夠執行代碼的危險函數
常見的危險函數有:
eval、assert、回調函數、動態函數執行、preg_replace函數
案例:

eval、assert
<?php
if(isset($_GET['cmd'])) {
    $cmd = $_GET['cmd'];
    eval("\$cmd = $cmd");
}else{
    echo "FAIL!";
}

傳入參數?cmd=system(ipconfig);
在這裏插入圖片描述

回調函數call_user_func、call_user_func_array、array_map

語法:

 call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
 //call_user_func(函數名,參數)
 
<?php
function CallBack() {
    global $b;
    eval($b);
}
if(isset($_GET['cmd'])){
    $b = $_GET['cmd'];
}
call_user_func('CallBack',$b);

在這裏插入圖片描述或者

$b = "phpinfo()";
call_user_func($_GET['a'],$b);
動態函數
$_GET['a']($_GET['b']);

在這裏插入圖片描述或者

$_GET['a']($_POST['b']);
preg_replace正則

重點:$pattern 存在/e模式修正符修飾允許代碼執行
正則表達式語法規則->/表達式[修正符]/
(1)普通字符作爲原子
preg_match

preg_match('/a.*d/','asddassdasd',$match);
var_dump($match);

在這裏插入圖片描述preg_match_all

preg_match_all("/a.*d/","asddassdasd",$matchs);
var_dump($matchs);

在這裏插入圖片描述(2)特殊字符作爲原子,即需要反斜槓轉義

preg_match_all("/\[php\]/","[php]",$matchs);
var_dump($matchs);

在這裏插入圖片描述
(3)通用字符類型作爲原子
詳見網絡安全自學篇-PHP代碼審計(二)

preg_match_all("/\d/","[php]as334535das",$matchs);
var_dump($matchs);

在這裏插入圖片描述(4)自定義原子表作爲原子

preg_match_all("/[AJ]sp/","[php]Jsp34535dAsp",$matchs);
var_dump($matchs);

在這裏插入圖片描述(5)限定符

$pattern1 = '/ba*du/';  //匹配出現0次或1次或多次
$pattern2 = '/ba+du/';  //匹配出現1次或多次
$pattern3 = '/ba?du/';  //匹配出現0次或1次
preg_match_all($pattern1,"baaaaaadu",$matchs);
var_dump($matchs);

pattern1
在這裏插入圖片描述pattern2
在這裏插入圖片描述pattern3
(6)邊界限定

$pattern1 = '/^baidu/';
$pattern2 = '/baidu$/';
$pattern3 = '/^baidu$/';
preg_match_all($pattern3,"baidu",$matchs);
var_dump($matchs);

(7)反向引用
匹配日期

$pattern1 = '/\d{4}(-)\d{2}\\1\d{2}/';
preg_match_all($pattern1,"2020-06-06",$matchs);
var_dump($matchs);

在這裏插入圖片描述(8)/e修飾
第一個參數

$cmd = $_GET['cmd'];
$str = '<php>system(ipconfig);</php>';
preg_replace("/<php>(.*?)$cmd","\\1",$str);

在這裏插入圖片描述
第二個參數
在這裏插入圖片描述第三個參數
在這裏插入圖片描述往期文章:

網絡安全自學篇-PHP代碼審計(一)
網絡安全自學篇-PHP代碼審計(二)
網絡安全自學篇-PHP代碼審計(三)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章