网络安全自学篇-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代码审计(三)

猜你喜欢

转载自blog.csdn.net/weixin_44047795/article/details/106583931