7.代码与命令注入
一.代码注入
1.eval函数
在php中,使用eval(string)函数可以执行任意有效的PHP代码,如何eval("phpinfo();"),evel("echo date()"),
也可以是更加复杂的代码,比如@eval($_POST["code"];)代码,用户提交POST请求参数如下:
code=$a=10;$b=20;print($a+$b);
code=$time1 = "2022-08-02 20:00:00";
$time2 = "2022-08-02 20:00:03";o
echo(strtotime($time2))-strtotime($time1);
# 或者更加复杂的代码:
code=$conn = mysqli_connet('127.0.0.1','root','','learn');
mysqli_set_charset($conn,'utf8');
$result = mysqli_query($conn,"select * from user");
$reows = mysqli_fetch_all($result);
var_dump($rows);
2.assert函数
assert函数用于判断一个表达式是否成立,所以会先执行该表达式,进而达到判断的目的。所以assert
相对于eval来说,功能要简单一些,只能执行表达式,但是依然可以达到执行代码的目的,比如针对
@assert($_POST['code']);的代码,用户提交的POST请求如下:
code = phpinfo();
code = print(date("Y-m-d"));
# 除此之外,我们也可以构造让assert函数执行eval()函数的payload:
code=eval('$time1 = "2022-08-02 20:00:00";
time2 = "2022-08-02 20:00:06";
echo(strtotime($time2)-strtotime($time1));');
3.preg_replace函数
针对@preg_replace("/test/e",$_POST['code'],"test");构造的payload如下:
code = phpinfo();
code = print(date("Y-m-d"));
code = @eval('$a=10;$b=30;print($a+$b);');
4.create_function()函数
create_function()主要用来创建匿名函数,以下展示了其代码和payload:
$func = create_function(' ',$_POST['code'] );
$func();
code=phpinfo();
code=$a=11;$b=30;print($a+$b);
code=eval('$a=11;$b=30;print($a+$b);');
反序列化漏洞也是属于代码注入范畴
二.命令注入
在PHP中,可以直接执行操作系统的命令,函数包括:system,exec,popen,passthru,shell_exec等
system($_POST['code']);
echo exec($_POST['code']);
echo shell exec($_POST['code']);
passthru($_POST['code']);
三.HTTP头部注入
后台源码使用函数 $server()获取用户http中文信息,记录到数据库里
使用burp修改http头部信息完成更新注入