后台代码 - PHP 代码审计
经过对应用(软件、网站)源代码的阅读,发掘其中的安全漏洞,本课程以PHP 语言来讲明代码审计的关联办法。把开源的靶场DVWA 做为审计的对象。
0x01 DVWA 的安装
DVWA 简单来讲便是一个网站源代码,用php 语言写的,把DVWA 安装到phpStudy 中。
DVWA 中,能够直接下载安装并且其中包括了非常多平常的Web 安全漏洞,开源漏洞靶场。
官网首页
http://www.dvwa.co.uk/
可下载版本: v1.0.8v1.9v1.10 *Development*安装修改数据库配置文件 /config/config.inc.php.dist -> config/config.inc.php$_DVWA[ db_server ] = 127.0.0.1;
$_DVWA[ db_database ] = dvwa;
$_DVWA[ db_user ] = root;
$_DVWA[ db_password ] = root;
$_DVWA[ default_security_level ] = low;
$_DVWA[ default_phpids_level ] = disabled;
开启PHP 远程文件包括 php.iniallow_url_include = on Setup/Reset DB登录DVWA
admin/password
切换安全等级
Security Level: low
0x02 命令注入漏洞审计
LOW直接输入命令 直接输入IP 位置127.0.0.1,会表示ping 命令的结果查看源代码<?php
if( isset( $_POST[ Submit ] ) ) {
// Get input
$target = $_REQUEST[ ip ];
// Determine OS and execute the ping command. if( stristr( php_uname( s ), Windows NT ) ) {
// Windows
$cmd = shell_exec( ping . $target );
}
else {
// *nix
$cmd = shell_exec( ping -c 4 . $target );
}
// Feedback for the end user echo "<pre>{$cmd}</pre>";
}
?>
代码分析 服务器经过GPC获取了一个IP 位置,赋值给了$target 变量命令拼接ping $target由shell_exec() 运行拼接后的命令。当点击提交按钮的时候,服务器执行了1条命令(一个字符串)?!一个字符串中包括多个命令?$target = "127.0.0.1";
// ping 127.0.0.1
$target = "127.0.0.1 && whoami";
// ping 127.0.0.1 && whoami
$target = "300.0.0.1 || whoami";
// ping 300.0.0.1 || whoami
漏洞的利用 127.0.0.1 && whoamiMedium命令测试 127.0.0.1 && whoami,不可执行whoami 命令。查看源代码<?php
if( isset( $_POST[ Submit ] ) ) {
// Get input
$target = $_REQUEST[ ip ];
// Set blacklist
$substitutions = array(
&& => ,
; => ,
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( s )
|