前言
渗透最重要的我觉得还是信息收集,信息收集的丰富度决定了一次渗透任务完成度的上限。本篇文章也会以此为中心展开总结。
本文会尽量贴出所使用的工具情况,但有些工具是自写自用,不方便分享,希望理解。
Web渗透
可能很多人一听到web渗透,心里会觉得不就是SQL注入、XSS啥的嘛,很简单嘛,但是随便扔一个有漏洞的站点给他可能就是挖不出来。说实话我刚开始入门的时候也有这种感觉,当时我觉得自己拿不到shell不是自己技术的问题,是网站本来就很安全,直到把同样的网站交给大佬后,大佬啪的一下就拿到shell了,很快啊…
信息收集
前面说过渗透最重要的是信息收集能力,比如现在拿到一个域名为abc.com,我们可能要从以下几个方面来进行资产收集。
-
收集子域名,这是老生常谈的问题,收集子域名一方面是为了扩宽资产收集的面,另一方面有时候主域搞不进去,子域反而能搞进去。
我个人一般常用sublist3r
这款工具:
https://github.com/aboul3la/Sublist3r -
判断有无CDN节点,如果有则尝试找到真实IP。一些稍微正规点的网站一般都会开启CDN节点,如果你在CDN节点周围去访问abc.com可能访问的是CDN的IP地址而不是真实的IP地址。判断的方式有很多,下面举几个我经常用到的:
1)nslookup
解析域名查看时有多个IP大概率为CDN。当然如果IP地址在站长之家查询显示CDN厂商的,毫无疑问就是使用的CDN。
(图片仅供参考,美国akamai的CDN供应商)
2)多地ping,使用不同地域的服务器去ping目标域名,如果解析出的IP地址不一样,也有可能为CDN,而且多地ping的方式有一定的概率找到真实的IP地址。
多地ping链接:https://tool.chinaz.com/speedworld/
3) 查看历史域名解析来寻找真实IP地址。顾名思义,不再解释。
历史解析记录查询链接:https://x.threatbook.cn/nodev4/domain/www.baidu.com
4)有些网站主域名使用的CDN节点,但可能子域使用的是真实IP。(注意:方法有很多,这里只举出我常用的,每个人的方法不一样是很正常的。)
-
判断有无IDS/IPS,这决定了之后是否可以使用nmap大扫特扫。我一般会用自写的程序来判断是否有无IDS/IPS,具体原理是先用telnet去尝试连接每个IP的常用1000个端口,再将telnet连接成功的端口交给nmap扫描,如果nmap扫不到说明是IDS/IPS检测到nmap给ban了。如果要继续下去就关闭nmap扫描只开启telnet。
root@CVM12643:~/real# python3 opt.py -h
usage: python3 opt.py -f <文件名> [其他选项]
优化扫描:v0.2.3#
optional arguments:
-h, --help show this help message and exit
-f 输入文件 被扫描的域名或IP
-tn nmap的线程数 默认为5个
-tt telnet的线程数 默认为5个
-ist [启用telnet] (暂不可用)启用telnet进行端口存活嗅探,不能挂代理,默认为True
-isn [启用nmap] 启用nmap进行端口扫描,默认为True
-bp 黑名单ip 默认为25,110 ,多个端口之间用','隔开
-p 要扫描的端口 默认为1000个,多个用','隔开
-t Nmap模板
bypass:绕防火墙模板
normal:默认模板
simplify:简化,含绕墙参数,不带script参数
custom:自定义script和绕防火墙参数,需使用-tcs参数
默认为bypass模板
-tba 绕墙参数 默认为'--data-length 30',不支持normal模板
设为None表示空
-tcs script脚本值 仅支持custom模板,默认为normal的参数值
-de [删除扫描错误的主机结果] 默认为True
--commandline 仅显示nmap命令
root@CVM12643:~/real#
root@CVM12643:~/real# python3 opt.py -tt 20 -f domain.txt -isn False
正在对数据进行分组...
数据分组,完成!
正在检测端口,telnet...
| 39/39
检测端口,完成!
结果保存至: ./result_1609399973.txt
root@CVM12643:~/real#
-tt 20:开启20个socket线程,模拟telnet
-f domain.txt:导入的文件
-isn False:关闭nmap扫描,绕过防火墙
- C段IP收集,在收集到真实IP后(有些压根没用CDN节点),要判断是不是用的云厂商的服务器,因为云厂商的IP地址一般分配比较分散,这种情况下C段收集的IP意义可能不会很大,如果是自建的机房,要尝试收集C段信息。要收集的信息包括但不限于主机是否存活、端口开放情况。
自制程序:
root@kali:~/tools# auto_scan_domain -h
usage: auto_scan_domain [-h] -f Inputfile -o OutFile -m
Matching_type [-r Root_domain_name]
[-w Ping_deadline] [-p] [--match]
Procedure:Match->Check(Ping)->Scan(Nmap)
optional arguments:
-h, --help show this help message and exit
-f Inputfile
A file that include domains or ip
-o OutFile
Output file
-m Matching_type
Set d to choose domian,set i to IP
-r Root_domain_name Such as google.com|org|github.com ect,com|org by
default
-w Ping_deadline 15 by default
-p Just ping,no scan
--match Just match,no check
成为合格的黑客的必要条件之一是成为合格的程序员
-
网站分析。之前提到的3点主要是为了扩宽信息收集的面,现在开始要对网站进行分析,包括但不限于
1)使用的什么CMS、中间件、版本号、是否有CVE、是否有公开的POC。收集方式要根据实际情况而定。经常使用谷歌搜索和exploit-db.com
2)有无WAF。可以故意输入明显的恶意特征(比如SQL注入和XSS),若服务器长时间未响应,则可能是由WAF放弃了此次连接。当然这一步有时候信息收集的时候没发现,在展开渗透的时候发现有WAF,这种情况还是比较正常的。如果确定没有WAF我一般会直接用AWVS
扫。不过要注意AWVS
不是万能的(比如逻辑漏洞、高阶SQL注入、绕过型文件上传等等),不要过分相信工具,这在实战中是个教训,尽量尝试自己手动挖掘。 -
网站信息收集。包括但不限于:
1)邮箱。看似无用有时候也会有惊喜,比如在之前github的私人仓库还收费的时候,有些网站的程序是放在公共仓库的,有的里面有配置文件,如果获取到了邮箱不妨一试。在实战中,有些情况通过谷歌搜索邮箱,可能会搜到之前没有发现的子域名。
2)密码收集。“你隔这做CTF呢?人家会告诉你密码?”这里的密码收集不是真让你找密码,而是收集疑似的密码之后进行精准爆破,我在实战中曾遇到一个站点,他的后台密码就是URL中的一个路径名称,这种密码你用常用字典爆破是爆不出来的。当然也遇到过把网站打包然后在网站根目录解压,忘了删压缩包这种情况的,这样更方便收集。
3)目录结构。收集方式一种为爬虫式搜索,一种为暴力枚举搜索。我一般会先用AWVS
进行爬虫式搜索,如果信息不明朗再用gobuster
进行暴力枚举搜索。其实还有一种比较特殊的方式是通过网站本身漏洞进行搜索,包括但不限于目录遍历漏洞、IIS短文件名枚举漏洞。
4)网站存在哪些漏洞。这里不包括CMS和中间件的POC,这一块是一个庞大的知识体系,Web渗透各种知识点都要会,各种绕WAF小技巧也要掌握。比如绕WAF型SQL注入、绕过型文件上传、远程或本地文件包含+00截断等等。当然其中还有更为细小的细节,比如00截断适用于哪个版本(=<5.3.4,记忆方法:神探狄仁杰中的人物武三思)、assert命令适用于哪些版本(php5可以正常使用、php7默认不能正常使用、php8删除了该命令)、phar反序列化利用前提(要素过多请百度)、一句话的php7版本(常提的一句话在php7可能不适用,需要变种)等等。
这些知识点需要日积月累,不断的在实战中学习。
- 杂项。包括但不限于操作系统、IP地址定位、开发语言。关于为何要收集IP地址定位的问题,我个人觉得是比较重要的,假如目标站点是A国的,你用B国的VPS攻击机去渗透可能会因为网络的问题效果不太理想。
通过ping来查看TTL值并不能说明操作系统是windows还是linux,有可能服务器在内网。
信息收集我用到的暂时这么多,当然还有其他的,再次强调收集方式有很多,每个人有每个人的习惯,只要能抓到耗子就是好猫。如果有大佬手里有更好的收集想法,欢迎私信或评论。
Web攻击阶段
其实你可以发现,攻击阶段反而是最简单的,信息都给你了,干就完事了。比如高阶SQL注入有了、phpmyadmin有了,会想到怎样的套路?如果只有个文件读漏洞会想到怎样的套路?极端点的,只有个登录窗口,账号名不是admin,还有某验证码,又有怎样的套路?(这个当时我一看就直接放弃了,后来给某大佬结果搞出来了)只有个XXE时,如何玩?(XXE漏洞确实比较罕见,我遇到的几次是AWVS
扫出来的)
都是日积月累一个一个实战总结出来的呀。某大佬说:不拿个几千个站点也好意思说自己会渗透?(菜鸡的我瑟瑟发抖)
好啦,漏洞利用也是一个庞杂的知识体系,要写的话不知道得写到啥时候,资料网上都有,就不再说了,不过要插一句,现在的Web框架越来越成熟,很难再犯一些低级的安全问题,逻辑漏洞的地位逐渐提高了,所以要多分析几个经典的逻辑漏洞案例,比如反序列化(我个人倾向于反序列化是逻辑漏洞)。
通过你的各种骚套路后,这时候你应该已经上传了webshell
了,我一般用以下几个webshell
平台:
- 冰蝎,冰蝎功能比较丰富,实际用起来效果还不错。如果WAF杀的比较厉害我会改用下面这个。
- 菜刀,一般我不会用常规的一句话,很容易被杀,通常会根据WAF检测的特征点自己写个绕过型一句话。比如之前遇见有个WAF很喜欢检测eval里有没有
[
和]
符号,这时候就要相应的改改webshell啦。当然也有一些大佬分享的通用型一句话变种,效果也不错。
每个人习惯不一样,我一般用惯了一件东西就不太想换了,除非另一件东西优点更突出。当然不能有后门,这是最重要的(CS说的就是你)。
提权
提权在技术细节上Windows和Linux会有一些不同,但是思路差不太多,也是收集信息。
先拿我相对熟悉的Linux来说,我一般会选择LinEnum
来进行信息收集,它会详细列举出当前系统所安装的软件、运行的进程、当前计划任务、存在SUID的命令、内核信息等等。
拿到信息之后:
首先去找当前系统有无内核漏洞exp,不过说实话我不太喜欢用内核exp,万一把目标搞down了会引起管理员警觉;再次,看看当前系统安装的工具命令有无exp,曾经遇到过当前系统的snap工具存在漏洞的,而且是整个内网都是这个问题。最后,这也是我试过成功率比较高的,有些运维人员喜欢把数据库的root密码和系统的root密码设置成一样或者相似的。还有一些比较杂的东西,比如像是计划任务这种也要看看,万一你有写权限呢。
我个人觉得提权的上限取决于手里有没有像样的0day
,网上已公开的exp,尽职尽责一点的运维人员一般都会更新修复。
在Web渗透阶段,我更喜欢windows操作系统,似乎好多windows的运维人员为了减少麻烦直接把Web运行在管理员甚至system权限下,这是极爽的。而Linux因为严格的权限管理,渗透起来相对就要麻烦很多。Windows正常提权思路也是差不多的,收集信息,找exp,常用meterpreter
的post/multi/recon/local_exploit_suggester
,它可以自动分析系统级别漏洞,适用于windows和linux,曾经用这个扫出过一个ms16-032
的洞。
这一块内容,我觉得还是找exp的过程,至于像一些靶机上的那种留个“后门”让你找,实战中还是十分罕见的。
内网
大佬说:“内网渗透其实很简单,就是各种工具各种用法,多用几次就明白了了”。
其实细想也是很有道理的,因为在实战过程中,确实工具用的比较多。
后渗透的东西目前我接触并不是很多,主要是没有那种大型的内网环境练手,实战中大多也以单点攻击为主,这也是我下一年要补的短板。
通常我一般会用Cobalt Strike,当然前提是要搭建好环境,各种链路配置好,域名该买的还是要买,一定要保证自己的匿名性,注册各种网站尽量使用匿名邮箱,我常用的是protonmail
。若出现手机验证码这种鬼东西,只要不常用一律用接码平台。内网嘛,拿到windows管理员权限后,mimikatz
用起来收集密码,收集的密码尝试登陆其他内网的主机;扫描内网的端口号,445、135、139这一类的端口要重点关照(ms17-010不只有445端口可以用,135、139也可以,只是要设置msf中的参数)。有时候不一定非要弹个shell,内网环境有时候不允许弹回公网,当然你可以弹回内网跳板机,但是我嫌麻烦,一般RCE拿下之后创建管理员用户、开启3389端口,socks5连入跳板机直接登内网远程桌面。还有一些比较琐碎的知识点我自己都没搞太懂。
关于域的问题,虽然实战中也有遇到域,也拿下过域内主机,但是我觉得经验还不足以分享出来,就不班门弄斧了。
后渗透的东西要学的还有很多
杂谈
给自己
- 不错的文章:
https://paper.seebug.org/ - php8新特性(暗示了某种趋势?):
有安全研究者混入了 PHP 8.0 开发组! - 实战中保证自己的安全为首要目标,代理多多的,vps多多的。
- 黑产不可碰。
- 装逼不可取。
- 看不如做,看3天漏洞分析不如自己debug一天。
- Debug漏洞真是件快乐的事情。
- 冬天洗头不吹干真的会脑壳疼。