实战渗透年底小结

前言

渗透最重要的我觉得还是信息收集,信息收集的丰富度决定了一次渗透任务完成度的上限。本篇文章也会以此为中心展开总结。
本文会尽量贴出所使用的工具情况,但有些工具是自写自用,不方便分享,希望理解。

Web渗透

可能很多人一听到web渗透,心里会觉得不就是SQL注入、XSS啥的嘛,很简单嘛,但是随便扔一个有漏洞的站点给他可能就是挖不出来。说实话我刚开始入门的时候也有这种感觉,当时我觉得自己拿不到shell不是自己技术的问题,是网站本来就很安全,直到把同样的网站交给大佬后,大佬啪的一下就拿到shell了,很快啊…

信息收集

前面说过渗透最重要的是信息收集能力,比如现在拿到一个域名为abc.com,我们可能要从以下几个方面来进行资产收集。

  1. 收集子域名,这是老生常谈的问题,收集子域名一方面是为了扩宽资产收集的面,另一方面有时候主域搞不进去,子域反而能搞进去。
    我个人一般常用sublist3r这款工具:
    https://github.com/aboul3la/Sublist3r

  2. 判断有无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。

    (注意:方法有很多,这里只举出我常用的,每个人的方法不一样是很正常的。)

  3. 判断有无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扫描,绕过防火墙

  1. 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

成为合格的黑客的必要条件之一是成为合格的程序员

  1. 网站分析。之前提到的3点主要是为了扩宽信息收集的面,现在开始要对网站进行分析,包括但不限于
    1)使用的什么CMS、中间件、版本号、是否有CVE、是否有公开的POC。收集方式要根据实际情况而定。经常使用谷歌搜索和exploit-db.com
    2)有无WAF。可以故意输入明显的恶意特征(比如SQL注入和XSS),若服务器长时间未响应,则可能是由WAF放弃了此次连接。当然这一步有时候信息收集的时候没发现,在展开渗透的时候发现有WAF,这种情况还是比较正常的。如果确定没有WAF我一般会直接用AWVS扫。不过要注意AWVS不是万能的(比如逻辑漏洞、高阶SQL注入、绕过型文件上传等等),不要过分相信工具,这在实战中是个教训,尽量尝试自己手动挖掘。

  2. 网站信息收集。包括但不限于:
    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可能不适用,需要变种)等等。

这些知识点需要日积月累,不断的在实战中学习。

  1. 杂项。包括但不限于操作系统、IP地址定位、开发语言。关于为何要收集IP地址定位的问题,我个人觉得是比较重要的,假如目标站点是A国的,你用B国的VPS攻击机去渗透可能会因为网络的问题效果不太理想。

通过ping来查看TTL值并不能说明操作系统是windows还是linux,有可能服务器在内网。

信息收集我用到的暂时这么多,当然还有其他的,再次强调收集方式有很多,每个人有每个人的习惯,只要能抓到耗子就是好猫。如果有大佬手里有更好的收集想法,欢迎私信或评论。

Web攻击阶段

其实你可以发现,攻击阶段反而是最简单的,信息都给你了,干就完事了。比如高阶SQL注入有了、phpmyadmin有了,会想到怎样的套路?如果只有个文件读漏洞会想到怎样的套路?极端点的,只有个登录窗口,账号名不是admin,还有某验证码,又有怎样的套路?(这个当时我一看就直接放弃了,后来给某大佬结果搞出来了)只有个XXE时,如何玩?(XXE漏洞确实比较罕见,我遇到的几次是AWVS扫出来的)

都是日积月累一个一个实战总结出来的呀。某大佬说:不拿个几千个站点也好意思说自己会渗透?(菜鸡的我瑟瑟发抖)

好啦,漏洞利用也是一个庞杂的知识体系,要写的话不知道得写到啥时候,资料网上都有,就不再说了,不过要插一句,现在的Web框架越来越成熟,很难再犯一些低级的安全问题,逻辑漏洞的地位逐渐提高了,所以要多分析几个经典的逻辑漏洞案例,比如反序列化(我个人倾向于反序列化是逻辑漏洞)。
通过你的各种骚套路后,这时候你应该已经上传了webshell了,我一般用以下几个webshell平台:

  1. 冰蝎,冰蝎功能比较丰富,实际用起来效果还不错。如果WAF杀的比较厉害我会改用下面这个。
  2. 菜刀,一般我不会用常规的一句话,很容易被杀,通常会根据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,常用meterpreterpost/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连入跳板机直接登内网远程桌面。还有一些比较琐碎的知识点我自己都没搞太懂。
关于域的问题,虽然实战中也有遇到域,也拿下过域内主机,但是我觉得经验还不足以分享出来,就不班门弄斧了。

后渗透的东西要学的还有很多

杂谈

给自己

  1. 不错的文章:
    https://paper.seebug.org/
  2. php8新特性(暗示了某种趋势?):
    有安全研究者混入了 PHP 8.0 开发组!
  3. 实战中保证自己的安全为首要目标,代理多多的,vps多多的。
  4. 黑产不可碰。
  5. 装逼不可取。
  6. 看不如做,看3天漏洞分析不如自己debug一天。
  7. Debug漏洞真是件快乐的事情。
  8. 冬天洗头不吹干真的会脑壳疼。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值