1、背景
最近参加了一次攻防演练,因为准备不够充分导致结果差强人意,事实证明,没有一个清晰的思路在这个拼手速的时代是干不过人家的,事后重新梳理总结一下。
其实也没什么新东西,总体大概就是尽可能全面的搜集资产,然后全方位扫描,最后搭配手工扩大战果。
2、收集资产
根据IP收集url
使用棱洞魔改版:https://github.com/lemonlove7/EHole_magic
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全端口扫描
测绘平台收集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 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
|
github
*.edu.cn password
3、漏洞扫描
awvs
这里我用的是docker,直接运行下边的命令
1
| docker run -it -d -p 13443:3443 xiaomimi8/docker-awvs-14.7.220401065
|
这里还要搭配另一个工具来批量添加任务https://github.com/test502git/awvs14-scan
使用前先在config.ini修把url和apikey修改为自己的
nuclei
工具下载地址https://github.com/projectdiscovery/nuclei
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什么的删了或者注释掉
结束后会自动生成scan_report目录,结果都保存在里面
afrog
下载地址https://github.com/zan8in/afrog
常用方法,只要中危及以上的漏洞
1
| .\afrog.exe -T url.txt -S medium, high, critical
|
api扫描
urlfind
工具下载地址https://github.com/pingc0y/URLFinder
项目中有详细的使用说明,这里写下我比较常用的
1
| .\URLFinder-windows-amd64.exe -s 200 -m 3 -u http://127.0.0.1:8081 -o .
|
Packer-Fuzzer
工具地址https://github.com/rtcatc/Packer-Fuzzer
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:"密码"
|
部分命令执行结果
编写成一键式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中查看运行结果