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

【pwnable.kr】cmd2的更多相关文章

  1. 【pwnable.kr】 asm

    一道写shellcode的题目, #include <stdio.h> #include <string.h> #include <stdlib.h> #inclu ...

  2. 【pwnable.kr】 [simple login]

    Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...

  3. 【pwnable.kr】 brainfuck

    pwnable.kr第二关第一题: ========================================= Download : http://pwnable.kr/bin/bfDownl ...

  4. 【pwnable.kr】 unlink

    pwnable.kr 第一阶段的最后一题! 这道题目就是堆溢出的经典利用题目,不过是把堆块的分配与释放操作用C++重新写了一遍,可参考<C和C++安全编码一书>//不是广告 #includ ...

  5. 【pwnable.kr】 memcpy

    pwnable的新一题,和堆分配相关. http://pwnable.kr/bin/memcpy.c ssh memcpy@pwnable.kr -p2222 (pw:guest) 我觉得主要考察的是 ...

  6. 【pwnable.kr】 codemap

    pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh codemap@pwnable.kr -p2222 (pw:guest) 这道 ...

  7. 【pwnable.kr】 uaf

    目测是比较接近pwnable的一道题.考察了uaf(use after free的内容),我觉得说白了就是指针没有初始化的问题. ssh uaf@pwnable.kr -p2222 (pw:guest ...

  8. 【pwnable.kr】input

    这道题是一道一遍一遍满足程序需求的题. 网上其他的题解都是用了C语言或者python语言的本地调用,我想联系一下pwntools的远程调用就写了下面的脚本, 执行效果可以通过1~4的检测,到最后soc ...

  9. 【pwnable.kr】cmd1

    最近的pwnable都是linux操作系统层面的. ssh cmd1@pwnable.kr -p2222 (pw:guest) 首先还是下载源代码: #include <stdio.h> ...

随机推荐

  1. git 常用命令记录 -- 快捷&备忘

    1.安装 略2.git拉取远程分支 git config user.name git config user.email git config --global user.name xxxx git ...

  2. redhat 7.6 密码破解(无光盘)

    开机,在下面界面按e 找到linux16  在最尾输入 rd.break 按 Ctrl+x 输入 mount -o remount,rw /sysroot 输入chroot   /sysroot sh ...

  3. Python 爬取 北京市政府首都之窗信件列表-[Scrapy框架](2020年寒假小目标04)

    日期:2020.01.22 博客期:130 星期三 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作(本期博客) 2.爬取工作 3.数据处理 4.信息展 ...

  4. pytorch神经网络解决回归问题(非常易懂)

    对于pytorch的深度学习框架,在建立人工神经网络时整体的步骤主要有以下四步: 1.载入原始数据 2.构建具体神经网络 3.进行数据的训练 4.数据测试和验证 pytorch神经网络的数据载入,以M ...

  5. OpenCV数字识别

    输入命令: conda install opencv 返回信息:

  6. 十二、js去掉空格_比较字符长度_中英文判断_页面初始化_简体字与繁字体判断

    1.去掉字符串前后所有空格 function trimBlank(str){ return str.replace(/(^\s*)|(\s*$)/g, ""); } 2.字符串长度 ...

  7. English-Phonics

    English-Phonics 1. 音节 1.1 字组 1.2 音节概述及分类 1.3 音节的划分 2. 元音字组的自然发音 2.1 元音字母 2.2 元音字母的长音 2.3 元音字母+r 2.4 ...

  8. oracle练习-day01

    .基础查询 yearly .条件查询小于的员工 ; ;的员工;  ,,); .模糊查询.排序.字符函数,) test .数值函数.,),round(.,),round(.) .,.),trunc(., ...

  9. threading 多线程

    # coding:utf- import time from threading import Thread def foo(x):#这里可以带参数def foo(x) print "foo ...

  10. log4j, common-logging, slf4j 关系

    最近因为项目原因,认真学习了一下 log4j 相关内容,主要是从网上找资料,以及追踪原代码.   关于如何使用,网上有很多资料,这里不做具体介绍.下面介绍一下这些工具的关系.   log4j 是最强大 ...