某大型多人运动结束两个多星期了,下班回到宿舍把一些材料整理整理,顺便把自己参与打的点复盘一下
某金融单位
一阶段中后期打的,实在走投无路了,扫了一波目录,扫出来一个readme,然后根据readme的关键词发现这个站是用了github开源的一个插件
这个插件会注册一个默认用户,顺利进后台~~ (😋)
进了后台找了一个上传接口,可惜做了后缀名白名单,shell传不上去,后来发现这套CMS大多都会用找个插件,
资产测绘平台找了用了同样CMS的站,旁站是没有白名单的,看起来是目标单位对代码修复过,同样的手法打了旁站,拖了代码开审。
最后审了个没修复的接口拿下的

没修复的原因也很简单,因为前端页面调用的是已经修复的接口,想当然了,可惜攻击者有源码啊
某航空公司1
队友有主防单位一个ASP站的源码,一个超叼的注入进后台 + 传shell进去打了一次,被防守反应过来修复了上传接口,没拿到什么分数
过了几天之后审出来第二个可以getshell的洞,二次进入,仍然是15分钟被踢出对局。。。好防守👍
sql注入点
根据前端页面找到对应的dll

dnspy 反编译dll ,定位到登录函数

一路追踪下去


最后是在GetEntity 这个位置找到注入点,显然把用户名直接拼接到了sql语句里,其实到这里也仅仅是个简单的sql注入而已,为什么说这是个很吊的注入呢😂
因为两个地方
第一点就是后续对sql语句查询出的内容进行了校验,不仅仅是 1=1–+ 这么简单就能进后台
解决办法是用联合注入从表里查出数据进行的绕过
第二点是 前端对输入的东西进行类加密, 自带绕WAF属性哈哈 ,这也就是为什么第一次防守方没修注入洞的原因,根本不知道怎么进的后台(😁)
进了后台两个上传点
一个是随便点点就能找到的
另一个是在插件的位置,传压缩包,会解压到一个可以访问的目录,一开始传上去报错,后来看代码发现必须要带一个配置xml
由于是压缩包,也是自带绕WAF的属性,按道理说是全程无感进去的,但是不知道为啥就是很快出局了,后面讨论的时候怀疑了两点,一个是aps的马子没免杀,也有可能fscan动静太大,可惜
某航空公司2
这里打的是协防单位,目标站用的是半开源代码,CSDN上能找到老版本,和目标站用的版本不一样,闲鱼上卖1888
实在买不起,最后还是靠老版本代码审出来了
(给我y哥竖大拇指)
注入点

这个sql语句里的articleid 和 typeid 都是可控的,所以导致了注入,这两个参数的位置要格外注意,等下要考
好不容易审出来,测试站也通过了,兴致勃勃上目标站一尝试,傻眼了,有WAF

绕过方法 其实有点东西, 还记得上面那两个参数的位置吗
1 | SELECT * FROM `sline_comment` WHERE articleid='$articleid' AND typeid='$typeid' |
如果直接利用一个参数打注入,会被检测到,那如果我这样传参呢?
1 | ?destid=1'+/*!Uni0n*/+seLeCt/*&typeid=*/%0a1,2,3--+ |
那sql语句就变成了
1 | SELECT * FROM `sline_comment` WHERE articleid='1'+/*!Uni0n*/+seLeCt/*' AND typeid='*/%0a1,2,3--+' |
仔细观察就会发现 ,利用两个参数,闭合了中间的AND typeid=
但是对两个参数拆开来看,每个又都不满足拦截条件
🤙🤙🤙
shell了之后发现打歪了,某航司的域名挂在了旅行社下,不过总归是向着靶标前进,更巧的是这旅行社内网机器挺多,也是狠狠的刷了一波路径分。
某政务单位
其实提前知道二阶段的目标单位类型了,为避免一阶段无点可打的痛苦,笔者决定提前准备,多准备几个0day,到时候猛猛打内网就完事了
但理想和现实总是有区别的,苦于目标单位性质的特殊性,加上笔者会审计的代码语言实在有限
想找个通用系统 简直难的一比
但是皇天不负有心人,最后还是找到了哈
前台getshell
一眼顶针。没啥技术含量

感觉这特殊性质单位的难度好像也还行?
就在笔者洋洋得意,放出目标单位准备传shell时,开始转折
接口被修复了。。。。
无妨,继续看
sql注入 + 文件上传
不拿出点狠货,是征服不了了
漏洞点
先解密token,然后参数直接拼接sql语句,查出数据来才能进入文件上传逻辑
重点看一下解密
嗯~~~,AES对称加密,密钥就是header头里的时间戳
也就是相当于密钥可控,参数可控
继续推 == sql注入 === 进入文件上传逻辑 === getshell
搓了个解密代码 ,成功sql注入

还以为到这里就结束了
but but but ,这个接口也被加固了,文件能传,shell传不了
很奇怪,按理说这么隐蔽的地方,不太可能被注意到
后来shell了之后,看了源码才知道,目标站的修复方式很特别,从底层改写了move_upload_file
调用move_upload_file 和 file_put_contents的时候都会对文件后缀名进行白名单校验
这个接口没打通的时候 人已经有点麻了
到手的鸭子飞了,难过加不甘心
经过48小时仔细翻找,最后和y哥审出来个超级0day
利用方式是 sql注入 + 变量覆盖 + url编码绕过 + 文件备份getshell 具体细节在这里就不放出了 说不定明年还能用上哈哈哈哈
有意思的是,打着打着发现有个队也上来了,还传了个提权脚本,成功上车

但是这 g0v 内网真是相当难打啊,刚经历过一个弱口令冲到靶标的easy级别内网,瞬间切换到难以接受的高强度政务网
fscan一扫就被踢出局,不扫又不知道自己在哪,挠头挠头😓
总结
记录和分享了一下人生第一次国护的实战案例,这里放出的都是拿到代码审出来的情况
还有一些太菜了,有代码审不出来的情况。
一些黑盒拿下的,虽然也很精彩,但是当时没截图,也没有记录的必要,不放了
复盘来看,打点主要就是两种方式 nday +0day,有时候运气好能碰见弱口令
nday就是看扫描器快不快 全不全
0day的打法就是找代码 审
所以针对这两种情况,自己也在不断改进打法
针对nday,二开了一个分布式扫描器,由于个人维护poc相当费力,应该最终能达到多节点资产收集 + 指纹识别 + 简单的过poc的效果就行
针对0day,写了一个小脚本,用于打旁站获取代码,个人觉得挺好用,之后打算集成到扫描器里。
后面就是会投入精力主要搞一下java的代码审计 和 AI agent的融入,高防的单位从web打进去有点难,所以还想搞搞免杀和钓鱼
想做的太多,能做的太少。