PHP代码审计二

简介: PHP代码审计

SQL注入漏洞

总体分为两种:数字注入  字符注入

当输入的参数为整型时,则可认为是数字型注入

比如:ID、年龄、页码等都可认为是数字型注入 不需要单引号来闭合

当输入的参数为字符串时,称之为字符型 需要单引号闭合

数字注入

使用seay源码审计工具 打开对应源代码 搜索select

id这里使用了变量进行传递 进一步跟踪变量

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

640.png

发现获取的变量并没有做任何过滤 直接带入了数据库 在浏览器上进行测试

640.png

字符注入

sql语句中 变量两边多了单引号 在测试的过程中 把引号闭合 获取信息

宽字节注入

%df%27===>(addslashes)====>%df%5c%27====>(GBK)====>運’
用户输入===>过滤函数===>代码层的$sql==>mysql处理请求==>mysql中的sql

默认编码character_set_client==>根据character_set_connection转码==>更新数据库时转化成字段所对应的编码

function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
    return $string;
}
上述函数为过滤 '  \ 的函数
将 '转为 \'
将 \ 转为 \\ 
将 " 转为 \"

当输入单引号闭合变量 代码中的函数把单引号进行转换

640.png

数据库设置了gbk 编码   添加%df 让单引号逃逸


mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";


640.png

代码执行漏洞

eval() 、assert()将输入的字符串参数作为PHP程序代码来执行

<?php
if(isset($_GET['cmd'])){
    $cmd = $_GET['cmd'];
    eval("\$cmd = $cmd");
} else{
    echo "fail";
}
?>

也可以执行系统命令


<?php
if(isset($_GET['cmd'])){
    $cmd = $_GET['cmd'];
    assert("\$cmd = $cmd");
} else{
    echo "fail";
}
?>



mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
$callback 是要调用的自定义函数名称
$parameter 是自定义函数的参数

常见的回调函数:

call_user_func()、call_user_func_array()、array_map()等

<?php
//function callBack(){
//    $x = $_GET['x'];
//    eval($x);
//}
//call_user_func('callBack');
$b = 'phpinfo()';
call_user_func($_GET['a'],$b);
?>

640.png

640.png

动态执行函数

1. 定义一个函数

2. 将函数名(字符串)赋值给一个变量

3. 使用变量名代替函数名动态调用函数

<?php
$_GET['a']($_GET['b'])
?>

640.png

preg_replace 函数

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
$pattern 正则匹配的内容
$replacement 用于替换的字符串或字符串数组
$subject 要进行搜索和替换的字符串或字符串数组
$pattern 存在/e模式修正符修饰 允许代码执行
<?php
// 第一个参数
$cmd = $_GET['cmd'];
$str = '<php>phpinfo()</php>';
preg_replace("/<php>(.*?)$cmd","\\1",$str);
// 第二个参数
preg_replace("/php/e",$_GET['cmd'],"php");
// 第三个参数
$str = $_GET['cmd'];
preg_replace("/\[php\](.*?)\[\/php\]/e","\\1",$str)
?>


命令执行漏洞

system函数

string system ( string $command [, int &$return_var ] )
$command 要执行的命令
$return_var 如果提供此参数,则外部命令执行后的返回状态将会被设置到此变量中

弹出计算器

<?php
system($_GET['x']);
?>

10e18ad75afa279f9a1f87fb059a5f8.png

passthru函数

string passthru ( string $command [, int &$return_var ] )
$command 要执行的命令
$return_var 如果提供此参数,Unix命令的返回状态会被记录到此参数
<?php
$a = $_GET['x'];
passthru($a);
?>

exec函数

string exec ( string $command [, array &$output [, int &$return_var ]] )
$command 要执行的命令
$output 如果提供此参数,会有命令执行的输出填充此数组
$return_var 如果同时提供$output和$return_var参数,命令执行后的返回状态会被写入到此变量
<?php
$a = $_GET['x'];
echo exec($a);
?>
// 需要输出 并且只显示一行

shell_exec 函数

string shell_exec ( string $cmd )
$cmd 要执行的命令
反引号(`)则调用此函数
<?php
$a = $_GET['x'];
echo shell_exec($a);
?>
相关文章
|
安全 小程序 PHP
PHP代码审计(七)Rips源代码审计系统使用教程
上一篇中提到的Seay源代码审计系统是由C#编写的winform程序,现在已经停止更新了,但是,还是比较好用的。 PHP代码审计还有另一个工具,也是一个神器Rips
336 0
|
安全 小程序 PHP
PHP代码审计(五)PHP代码审计方法与步骤
(1):获取到网站源码(这就是废话……) (2):将网站部署到你自己的环境中,能运行。 这里特殊说明一下我的习惯,我本地的环境与线上的环境基本上保持一致,这样在本地审计及线上部署的时候能发现更多的问题。不建议说是随便搭个环境能跑起来就行,这样不是很严谨。 (3):拿到源码之后,浏览大概的项目结构。
147 0
|
Shell PHP Windows
PHP代码审计(四)PHP文件操作函数(2)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
89 0
|
安全 小程序 PHP
PHP代码审计(六)Seay源代码审计系统使用教程
www.cnseay.com/ 当然,这个已经不能访问了。 软件的版本比较早,需要.NET framework3.5框架,我这里是软件启动的时候自动提醒安装,如果没有自动提醒,那么你需要手动安装.NET frameWork3.5框架,否则,程序应该是没有办法运行。
1220 0
|
5月前
|
JSON PHP Apache
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
54 1
|
5月前
|
SQL 安全 API
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
126 4
|
5月前
|
前端开发 网络安全 PHP
PHP代码审计之MVC与ThinkPHP简介
PHP代码审计之MVC与ThinkPHP简介
46 2
|
5月前
|
监控 安全 网络安全
PHP代码审计之简单思路方法
PHP代码审计之简单思路方法
164 1
|
7月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
8月前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)