某些特殊情况下命令执行的Getshell中对应某个函数的内容可控,可控字符长度分为长可控和短可控。我们先来看15个字符可控。
条件:get方式传值,能够传的最大字符串数是14个,传shell_exec
思路:如果要getshell,相当于我们在里面写进去一个文件。这个文件是来自于我们服务器发给目标服务器,或者说是除我们之外的其它服务器在带给目标服务器的。
如果是从其他服务器送到服务器里面去的,就是让其他服务器向目标受害服务器发起一个下载请求,那么外部文件就会下载进去了。那么怎么去下载?我们这里是14个字符串可控,可用wget,比如说存在一个URL/1.php,相当这个1.php写进去了,但这里已经14个字符串了
如果不能控制这么短的域名,可以稍微长一点,比如1.php就是个1,那么就相当于在里面能够去写入一个1,就会多一个文件1,就知道我们已经写入一个文件了。我们只要把它再次变成我们想要的文件就可以了。比如说mv 1重命名为1.php。
演示:
文件名是A,wget一下,输入localhost,就会有a出来,但这个长度已经超过了。然后mv a a.php,这时候这个文件就已经变成可控的,可以进行getshell了。
如果直接写入生成,echo能够直接把内容输出到一个文件里面去,如果跟1.php,它自己占用十一个字符,只能再输四个字母,即使开头不是<?,输进去是有点困难的。
所有符号都有特殊意义,?没有目录,就要对?做转义, 如果只写1的话,就等于你能构成最短的一个shell的结构,最短的shell的结构是php,然后eval(),$_ GET比POST短,然后数组形式,里面加个1,这样子,这个就是比较短的一种形式。
换行分割一下, a等于\<?php >1。这里就是十四位,刚好可以执行。
接下来想写入的时候,其实是不希望写出的内容把原来我们已经写的内容给它覆盖掉,想做的是追加,如果数据内容能够直接写到后面最好,否则我们就换行写,那么如果用追加的形式,比如说echo,用两个尖括号,结果如图:
如果是字符串的形式,如图
我们发现如果是字符串的话,用数字的时候一定要加空格分割,不是数字的时候,就不用空格分割,在重命名之后,它能够正常运行。
我们中间能控制的字符就是六位字符。$因为是关键字,肯定不能分割
注意,写$_GET的$的时候肯定要加反斜线。这里其实要加两个反斜杠才能生效。我们来整理一下写了哪些内容。
15个字符的方法就是这样,而且技巧性也不是非常高,基本思路就是这些,接下来的所有思路都是基于这种方式的一个扩展。
接下来看就是15个可控字符的一个基本的思路。
七个字符
执行的结果作为内容输出类似文件名,如果存在,会直接覆盖原有文件,如果不存在,会生成这个文件,并把前面的内容输出到文件里面。
例如:如果要ls输出一个a,你会发现a里面的内容是1.php、2.php a,包括它生成的新的a,如果没有也是会生成的。如果ls是命令,l并不是命令,理论上执行不了,但是还是会去执行后面输出的这个环节。虽然命令不存在,但也会去生成a文件。
ls输出到a时,a里面有两个内容,比如a index.php。我们去控制ls的结果,去输到a里面,ls的结果我们可控。
思路:ls输出一个a,就是文件名。如果能控制文件名就能控制a,这中间欠缺的就是顺序,sh后面跟一个文件名称的话,而且里面是可执行的内容,就能够去执行。如果所有内容都写入a,内容可控,再用sh写入a,构成了一句shell。
欠缺点在哪里?第一个,就是文件名顺序不可控。
第二个,文件名写得非常短。
文件顺序怎么控制?ls展示命令的默认情况下,应该是根据文件名的大小写来控制的,其实排序的方式非常多,那么基于时间排序,比如说ls -t、比如说l>bbbb那么abb index.php,ls -t的时候,我们看到bbbb排到最前面去了,就会把最新的文件排在最前面。
思路:
生成文件名,然后ls一下写入,但是如果只用ls的话,它是不可控整个顺序的。所以说解决的方法就是ls -t生成文件之后,就用-t来代替了,然后执行写入的a,就能换行分割。
示例
ECHO 1下写一个很长一串shell,可以用base64转一下符号,会发现任何特殊的符号都会不存在,然后用base64 -D去做一个解码就可以了。你就能够拿到一个文件名,最后再把它追加到比如说1.php里面。
它能够写入一个phpinfo的文件,接下来只对它做一个分割就可以了,最终会实现一个demo。用脚本来构造一下结构。
思路:
生成文件名,ls -t去控制它的顺序,然后SH执行生成文件的内容,才能去执行任何命令,只不过就在于去如何去构造命令,然后用这个来做分割。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。