前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTFweb类型(十九)15位、7位可控字符下的任意命令执行

CTFweb类型(十九)15位、7位可控字符下的任意命令执行

原创
作者头像
牛油果
修改2019-11-04 17:07:00
1.8K0
修改2019-11-04 17:07:00
举报
文章被收录于专栏:人工智能机器学习

​​某些特殊情况下命令执行的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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档