这道题是上一个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:

最新文章

  1. php实现返回上一页的功能
  2. C#中ToString格式大全
  3. Ubuntu 14.04 编译安装 boost 1.58
  4. [转] How to import a large data set using XPO efficiently within a transaction
  5. 如何把excel数据导入数据库
  6. Winform开发框架重构总结
  7. spring boot学习笔记
  8. bootstrap, boosting, bagging 几种方法的联系
  9. C puzzles详解【13-15题】
  10. Jersey Rest服务类型
  11. think in java 第四版读书笔记 第一章对象导论
  12. html5异步上传图片显示上传文件进度条
  13. bzoj 3527: [Zjoi2014]力 快速傅里叶变换
  14. QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)
  15. 抛砖引玉:探讨网站性能优化之Javascript异步懒加载技术
  16. ViewPager无限轮播与自定义切换动画
  17. Centos7 + Python3.6 + Django + virtualenv + gunicorn + supervisor 环境配置详解
  18. Swift Enum 枚举
  19. Spring4相关jar包介绍(转)
  20. linux虚拟机ping不通主机和外网(包括刚装系统遇到的一些问题)

热门文章

  1. redhat 7.6 find 命令
  2. 「CH6201」走廊泼水节
  3. Java程序生成exe可执行文件
  4. OPCDA通信--工作在透明模式下的CISCO ASA 5506-X防火墙配置
  5. Windows驱动开发-Device结构体
  6. 【转】stm32 IAP升级程序
  7. tomcat安装apr报错解决
  8. Python—处理Excel表格
  9. 084、Java数组之实现数组复制
  10. Java多线程编程之守护线程