进入靶机我们可以直接看到题目信息;
要看懂题目我们首先要知道isset的含义
isse()函数用于检测变量是否设置且并非null(这里应该是检测当前用户的IP);
若'host'不为空则返回true,若为空则返回false,'host'返回为true时执行else语句;
接下来要确定escapeshellarg以及escapeshellcmd的作用详细介绍传送门;
escapeshellarg()用于把字符串转码为可以在shell命令里使用的参数,escapeshellcmd()对字符串中可能会欺骗shell命令执行的任意命令执行转义。
//这样看下来我的思路是构造payload,通过两方个函数的转义达成执行命令的目的(下面有个system可用来执行命令,直接进行一波尝试);我们先上传一个正常的参数,返回如下页面
试试常见的传参姿势| & && 都没有成功,那就只有走老路了,试试用arg和cmd两个函数转义直接写入一句话🐎。
发现没有太大的差别,应该是字符过滤的原因(可能是我payload写错了) ;
到这里我就卡住了,查看了一下大佬写的wp传送门在这里,发现要使用到后面system中的nmap中的命令。
其原理在于nmap中一个参数-oG可以实现将命令和结果写到文件(大佬的介绍更详细);
知道了怎么做就好构造payload了(bushi
首次构造的 payload如下
试了几次无果又重新翻看了大佬的文章,发现自己对转义的理解不够透彻,应该在末尾加上空格和'
构造新的payload再进行尝试,成功返回了文件夹名
接下来就是用蚁剑进行连接,也是顺利找到了flag
本题主要考察了escapeshellarg()和escapeshellcmd()二者一起使用时造成的漏洞(大佬的WP太厉害了,我对这两个函数的理解还需要加深)
备注:如有问题请私信或者是在评论区指出,我立马改正(是真的