原文首发在:奇安信攻防社区
https://forum.butian.net/share/3703
开局一个登录框,目标这个样子,记为A,通过常规测试没有突破,从html中提取一些关键字,通过测绘平台搜一下,看能不能打同类型站点获取源码,然后审计出漏洞点。
搜索结果,我一般挑选云厂商的机子打,因为在云上的机器一般有多个站点可以打且防护做的不到位。
突破
又对A同类型站点测试后依然没有突破,挑选其中一个ip信息收集后,发现开放的站点B,如图
注入进入后台,可以直接上传webshell
然后把使用A的源码打包下载,本地审计后,通过 登录绕过+文件上传 组合拳成功拿下A的同类型测试站
曲折
然后去打目标A的时候发现了不对劲,对应的接口没有成功
回头重新看有什么细节不对
目标A登录包:
测试站登陆包:
在手上的源码里没有搜到 getPhoneByLoginName
这个接口,那就是目标A的版本与测试站的版本不同 ,白忙活 :(
重来
再次提取A的特征,重新通过测绘搜索同类型站点,这次就三个资产,再次信息收集,通过云主机ip的其他端口站点进行打点。
成功进来,但是这个byd站点很多,根本找不到哪一个网站是目标源码,而且是低权限+360
先提一下权
然后列一下开启的站点:C:\Windows\System32\inetsrv\appcmd list site
,成功找到
然后打包源码,dnspy启动
审计后发现登录流程分为三步
通过用户名验证手机号是否存在
登录时需要手机验证码
通过 /Login/loginUser 再次验证用户
但是真正赋予登录session的是第三步
其中第三步本质还是通过验证账号密码,根本不需要手机验证码参与验证,也就是说只要知道账号和密码,就能无视验证码,直接构造/Login/loginUser对应的数据包即可。
但是账号密码我怎么知道,回过头看拿下的测试站,互联网上站点数量这么少并且机器上有很多站点,那么很有可能这个站点就是开发商的定制开发测试站,定制开发完交给客户,那么必有一定的测试文件以及数据库文件。
拿下
通过对目录的仔细翻找,成功找到与目标站有关系的信息,包含一个用户名与明文密码
甚至历史数据库
凭借这些信息,成功登录目标站
已经后台了,getshell轻轻松松
顺带一个waf后缀绕过
总结
通过 找源码->审计->未授权RCE 或 同系统站点->渗透测试->RCE->审计->未授权RCE 的迂回打法思路,在攻防演练中会有奇效。引用远海师傅的图: