【pwnable.kr】cmd2
这道题是上一个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的更多相关文章
- 【pwnable.kr】 asm
一道写shellcode的题目, #include <stdio.h> #include <string.h> #include <stdlib.h> #inclu ...
- 【pwnable.kr】 [simple login]
Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...
- 【pwnable.kr】 brainfuck
pwnable.kr第二关第一题: ========================================= Download : http://pwnable.kr/bin/bfDownl ...
- 【pwnable.kr】 unlink
pwnable.kr 第一阶段的最后一题! 这道题目就是堆溢出的经典利用题目,不过是把堆块的分配与释放操作用C++重新写了一遍,可参考<C和C++安全编码一书>//不是广告 #includ ...
- 【pwnable.kr】 memcpy
pwnable的新一题,和堆分配相关. http://pwnable.kr/bin/memcpy.c ssh memcpy@pwnable.kr -p2222 (pw:guest) 我觉得主要考察的是 ...
- 【pwnable.kr】 codemap
pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh codemap@pwnable.kr -p2222 (pw:guest) 这道 ...
- 【pwnable.kr】 uaf
目测是比较接近pwnable的一道题.考察了uaf(use after free的内容),我觉得说白了就是指针没有初始化的问题. ssh uaf@pwnable.kr -p2222 (pw:guest ...
- 【pwnable.kr】input
这道题是一道一遍一遍满足程序需求的题. 网上其他的题解都是用了C语言或者python语言的本地调用,我想联系一下pwntools的远程调用就写了下面的脚本, 执行效果可以通过1~4的检测,到最后soc ...
- 【pwnable.kr】cmd1
最近的pwnable都是linux操作系统层面的. ssh cmd1@pwnable.kr -p2222 (pw:guest) 首先还是下载源代码: #include <stdio.h> ...
随机推荐
- git 常用命令记录 -- 快捷&备忘
1.安装 略2.git拉取远程分支 git config user.name git config user.email git config --global user.name xxxx git ...
- redhat 7.6 密码破解(无光盘)
开机,在下面界面按e 找到linux16 在最尾输入 rd.break 按 Ctrl+x 输入 mount -o remount,rw /sysroot 输入chroot /sysroot sh ...
- Python 爬取 北京市政府首都之窗信件列表-[Scrapy框架](2020年寒假小目标04)
日期:2020.01.22 博客期:130 星期三 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作(本期博客) 2.爬取工作 3.数据处理 4.信息展 ...
- pytorch神经网络解决回归问题(非常易懂)
对于pytorch的深度学习框架,在建立人工神经网络时整体的步骤主要有以下四步: 1.载入原始数据 2.构建具体神经网络 3.进行数据的训练 4.数据测试和验证 pytorch神经网络的数据载入,以M ...
- OpenCV数字识别
输入命令: conda install opencv 返回信息:
- 十二、js去掉空格_比较字符长度_中英文判断_页面初始化_简体字与繁字体判断
1.去掉字符串前后所有空格 function trimBlank(str){ return str.replace(/(^\s*)|(\s*$)/g, ""); } 2.字符串长度 ...
- English-Phonics
English-Phonics 1. 音节 1.1 字组 1.2 音节概述及分类 1.3 音节的划分 2. 元音字组的自然发音 2.1 元音字母 2.2 元音字母的长音 2.3 元音字母+r 2.4 ...
- oracle练习-day01
.基础查询 yearly .条件查询小于的员工 ; ;的员工; ,,); .模糊查询.排序.字符函数,) test .数值函数.,),round(.,),round(.) .,.),trunc(., ...
- threading 多线程
# coding:utf- import time from threading import Thread def foo(x):#这里可以带参数def foo(x) print "foo ...
- log4j, common-logging, slf4j 关系
最近因为项目原因,认真学习了一下 log4j 相关内容,主要是从网上找资料,以及追踪原代码. 关于如何使用,网上有很多资料,这里不做具体介绍.下面介绍一下这些工具的关系. log4j 是最强大 ...