公司首页 >> 新闻动态 >>公司新闻 >> GetShell-技术时效性的价值和经验总结
详细内容

GetShell-技术时效性的价值和经验总结

网络攻防:GetShell-->技术时效性的价值&经验总结

发表于河南盛世灵匠信息安全有限公司 

作者:李秉霖

转载请注明出处



0X00 任务背景

拟定题目:某项目独立开发需要占用大量资源,但是市面拥有成功案例,期望在零投资的前提下拿到关键情报!

题目地址:Attack.sslj.net

前提设想:独立研发项目由于缺乏实战经验,因此得出结论“有困难”;

现实条件:没有资金、技术、资源等一系列支撑,得出结论“有困难”;

解决方案:决定渗透某个成型项目,拿到关键资料,实现到手情报的参考和二次开发,达到0投资之目的。


0X01 任务声明

整个任务属于黑盒测试,题目为拟定,我们不提倡也不鼓励任何意图的渗透/网络破坏,在此只是整理整个任务流程的不成形思路,并提醒项目开发者规避一些细节问题。

本文按照从简到难的流程进行总结。

思想不可锁闭,技术没有边界,如果您有更好的解决方案,请联系我,WeChat:PLA017 / RedHackerCHN


0X02 任务开始

我们先来看一张思维导图

理解后任务开始


0X02::$mission(1)


上传PHP木马,发现前端报错


1595342976832837.png




方案:尝试前端绕过--->打开浏览器设置,禁用JavaScript,如图




再次上传,发现上传成功,并获取Shell地址,直接访问即可获取权限




结论:前端js判断无需经由后台即可绕过限制条件,只需禁用浏览器JS。同理,修改本地JS文件,增加上传文件类型亦可达到同样效果!



0X02::$mission(2)


按照任务1的流程,发现上传报错




由错误提示中进行社情分析:上传可能判断Content-Type,于是打开Fiddler抓包




修改Content-Type后面的参数为Image/png,发送篡改后的包,发现上传成功并获取Shell地址,直接访问即可获取权限




结论:此类判断,把截获的包内容“Content-Type”项直接删除,或者修改为参数为:Image/GIF或Image/JPG 亦可达到同样效果!



0X02::$mission(3)


按照任务1&2的流程,发现上传报错




根据提示猜测可能是黑名单限制规则,同样使用Fiddler抓包




修改php后缀为php2或php3或php4或phtml



上传成功并获得Shell地址,另外我们可以发现,上传对文件名做了重命名处理,这条情报可以记录在心,以便挑战更困难的任务!


结论:黑名单永远没有白名单安全!!!!



0X02::$mission(4)


按照任务1&2&3的流程,发现上传报错




由于按照1&2&3的思路无法突破,遂考虑依旧是黑名单限制并过滤了几乎所有有风险的后缀,此时考虑上传.htaccess文件尝试突破(注:此文件无法在win系统下直接创建,除非使用CMD命令或使用Fiddler篡改包数据,下面介绍使用Fiddler实战经验)

首先我们选取任意文件,点击上传,截获包,然后篡改包内容,将文件名修改为.htaccess,删除Type类型,并写入文件内容,参考下图代码:


SetHandler application/x-httpd-php


选取任意文件,修改文件名



删除刚才选择的“任意文件”的文件内容



将超文本入口解析类型加入(此段代码会将任意格式的文件类型解析为PHP)



发送篡改后的包,发现上传成功!



刚才只是前戏,现在将我们的Shell文件后缀改为合法后缀,再次上传





此时修改过后缀的Shell文件上传成功,虽然是PNG格式,但是由于我们先前已经篡改了.htaccess,因此无论何种格式,均会被服务器解析为PHP,于是我们成功GetShell,获取权限



0X02::$mission(5)


以下不再描述“按照任务1&2&3&.......”,直接切入正题

我们发现上传目录有“Readme.php”,即上传目录下存在可执行文件,遂考虑上传.user.ini文件

此处普及一下概念:如果.htaccess的方法可以让你GetShell,那么.user.ini会让GetShell的概率提升N倍!

.user.ini比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi模式运行的php都可以用这个方法。


不如先来看一段官方解释:




以上我们可以看到,模式为PHP_INI_USER的配置项可以在ini_set()函数中、注册表中、.user.ini中设置。

抛开主要php.ini(php默认配置文件)不谈,PHP还会在每个目录下扫描(ini)文件,从被执行的PHP文件所在目录开始,逐级往上寻找web所在目录(即:$_SERVER['DOCUMENT_ROOT'])。

注意:在.user.ini命名格式的ini文件中只有具有PHP_INI_PERDIR和PHP_INI_USER模式的ini设置可被识别。

和php.ini不同的是!!!!.user.ini是一个能被动态加载的ini文件。什么意思呢?也就是一旦.user.ini创建/修改后,不需要重启任何服务器组件,只需要等待user_ini.cache_ttl(默认为300秒)到时,即可被重新加载。

那这里就很清楚了:我们可以很容易地借助.user.ini文件来构造一个GetShell的途径。

回到任务

我们首先上传.user.ini文件(使用前面几个任务已经get到的技能,只叙述简明流程)

文件内容为:


auto_prepend_file=Alex.png


接着我们开始上传名为“Alex.png”的文件,文件内容为最简洁的一句话木马:


<?php @eval($_POST['Alex']);?>


等待五分钟另ini文件生效,然后使用Xise或者AntSword链接Shell,即可获得权限




结论:

  • 服务器脚本语言为PHP
  • 服务器使用CGI/FastCGI模式
  • 上传目录下要有可执行的php文件



0X02::$mission(6)


此时我们发现该任务同样使用的黑名单限制规则,并且加上了.htaccess限制,但是没有将后缀进行大小写统一,因此可以通过大小写绕过






结论:上传条件加入转换小写限制,需要注意的是Linux在没有特殊配置的情况下,此类方法是无效的,只有Win会忽略大小写


$file_ext = strtolower($file_ext);



0X02::$mission(7)


同样加入了几乎所有的限制,但是并没有限制空格




结论:Win下的命名格式:xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点此处会删除末尾的点,但是没有去掉末尾的空格,因此上传一个.php[空格]文件即可绕过限制。



0X02::$mission(8)


同样加入了几乎所有的限制,但是并没有限制点

结论:如同任务7,同样的道理



0X02::$mission(9)

同样加入了几乎所有的限制,但是并没有限制数据流,此类漏洞仅限于Win服务器


由于模拟环境为Linux,因此无法展示入侵过程


结论:NTFS文件系统数据流支持。

然而这条情报并不是广为人知,这个漏洞主要是利用win下Macintosh文件系统中文件的兼容性,备用数据流允许文件包含多个数据流的特性,并且任意文件有且至少拥有一条数据流。

因此在Win中,上传.php::$DATA后缀即可绕过。

Shell上传成功后获取路径,访问时去掉::$DATA即可获取权限!




待续

参考文献:












河南省许昌市芙蓉大道芙蓉商务中心电子商务产业园9号楼9楼
sslj@mail.sslj.net
400-040-7888 
关注微信公众号

国产精品女A片爽爽免费视频