eveplw

导航

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头部信息完成更新注入

 

posted on 2022-08-02 22:08  eveplw  阅读(200)  评论(0编辑  收藏  举报