Game Zone
了解如何使用 SQLMap,破解密码,然后使用反向 SSH 隧道显示服务,最后提升权限
通过 SQLi 获取访问权限
首先是使用 nmap 对于端口进行扫描,然后发现他这里就开放了 80 端口和 22 端口
所以我们先访问机器的 80 端口进行查看信息
SQL 是一种用于在数据库中存储、编辑和检索数据的标准语言。查询可能如下所示:
SELECT * FROM users WHERE username = :username AND password := password
在我们的 GameZone 机器中,当您尝试登录时,它将从您的用户名和密码中获取您输入的值,然后将它们直接插入到上面的查询中。如果查询找到数据,您将被允许登录,否则它将显示一条错误消息。
我们就可以尝试 sql 注入中的万能密码 ' or 1=1 #
来尝试登录,在密码部分输入没有啥效果,但是在用户处输入,直接就登录进去了,被重定向到了新的页面
portal.php
使用 SQLMap
SQLMap 是一种流行的开源工具,是一种通用的 SQL 注入和数据库接管工具。它预装在所有版本的 Kali Linux 上,也可以在此处手动下载和安装。
有许多不同类型的 SQL 注入(基于布尔值/基于时间等),SQLMap 尝试不同的技术自动执行整个过程。
到了之前的重定向的 portal.php
页面之后,我们可以看到一个游戏评论的搜索页面
我们直接使用 burpsuite 把评论的搜索的请求包给拦截下来之后,把所有内容复制到一个文件中
然后就可以使用 sqlmap 进行攻击了,sqlmap -r request.txt --dbms=mysql --dump
- -r 参数指定拦截请求的文件
- –dbms 指定数据库类型,比如 mysql,postgreSQL,Oracle
- –dump 是把数据库保存下来
后面会出现各种的提示,比如提示是否选择其他工具进行攻击之类的,可以选择 yes,最后的 1,2,3 就是选择保存的路径
然后我们就可以看到它输出了两张表,users 和 post,保存之后,下面也会提示保存的路径,路径下有结果的 csv 文件
所以这里的三个问题也就都迎刃而解了
使用 JohnTheRipper 破解密码
我这里先使用 hash-identifier 来先识别哈希类型,是 SHA-256
然后使用 john 对于哈希值进行破解,一下子就拿到了用户 agent47
的密码了
然后使用 ssh agent47@IP 地址
就可以连接到机器了,然后在目录下就有一个 txt 文件就是用户标志
使用反向 SSH 隧道公开服务
反向 SSH 端口转发指定将远程服务器主机上的给定端口转发到本地端的给定主机和端口。
-L 是本地隧道(YOU <-- CLIENT)。如果站点被阻止,您可以将流量转发到您拥有的服务器并查看它。例如,如果 imgur 在工作中被阻止,您可以执行 ssh -L 9000:imgur.com:80 user@example.com
。 转到您计算机上的 localhost:9000,将使用您的其他服务器加载 imgur 流量。
-R 是远程隧道(YOU --> CLIENT)。 您将流量转发到其他服务器供其他人查看。与上面的示例类似,但相反。
我们将使用一个名为 ss 的工具来调查主机上运行的套接字。
套接字(Socket) 是计算机网络中用于通信的基本接口,它是一种抽象的概念,可以看作是一个端点,用于在网络中进行数据传输。套接字实际上是操作系统提供的一种机制,它允许应用程序通过 TCP 或 UDP 等协议在网络中进行通信。
参数 | 描述 |
---|---|
-t | 显示 TCP 套接字 |
-u | 显示 UDP 套接字 |
-l | 仅显示侦听套接字 |
-P | 显示使用套接字的进程 |
-n | 不解析服务名称 |
然后我们可以看到正在运行的有 7 个套接字,这里主要看第五列的端口,发现 10000 端口开放,但是当时 namp 扫描的时候没有扫到,就说明端口被防火墙拦截了
所以这时候我们可以使用 SSH 隧道把端口公开到本地
ssh -L 10000:localhost:10000 agent47@10.10.19.168
然后访问本地的 10000 端口就可以看到 10000 端口的服务了
通过看页面的标题栏,看到 webmin 的字样就可以知道使用的 cms 的名称是 Webmin
,然后使用之前破解的密码和账户登录进去,在首页就可以看到 system infomation 里面就有 CMS 的版本
使用 Metasploit 进行权限提升
直接在 metasploit 中搜索 webmin
查看相关的 exp
使用 info 模块名称
来查看模块的具体利用信息,这里查看了 webapp/webmin_show_cgi_exec
的信息,发现它这里的要求版本和目标版本正好差不多
这里看到是 unix 系统和 arch:cmd,就使用类似于 cmd/unix/reverse_bash
的基于命令的 payload,如果是 Windows
系统,就使用 windows/meterpreter/reverse_tcp
的 payload
然后使用 show options
查看要填写的值
set RHOSTS localhost
set SSL false
#因为这里用不到SSL,所以设置为关闭
set PASSWORD
set PAYLOAD
set LHOST
差不多设置好这些之后,就可以 run
最后发现拿到两个 session,使用 sessions -i 1
进行连接,就拿到了 root 权限,然后可以到 \root
目录下拿到 Flag