Pwnable.kr WP
近期,开始将以前做的CTF的题目,全部整理一遍,写个WP,也是为了督促自己,还需要学的东西还有很多。
Pwnable.kr fd
我们首先看到这道题的C源码:
需要得到flag,则需要执行
system("/bin/cat flag");
则 必须 buf = "LETMEWIN"。
read(fd, buf, 32)函数中的三个参数中:
fd == 0时:则表示标准输入;
fd == 1时:则表示 标准输出;
fd == 2时,则表示标准输出错误。
buf 表示读入的缓冲区;
32表示读入32字节;
所以我们 只需要 使 fd == 0 ,则我们就能自己输入 LETMEWIN 到 buf中。这样最终得到flag。
那么我们就要令
argv[1] = 0x1234
即 argv[1] = 4660
Pwnable.kr Collision
这道题主要是 我们输入的 20个 字符串 转换为 int 型之后,相加之后 要等于 0x21DD09EC。
我们先来了解一下 char 型 强制转换为 int 型 的方法:
如果我们输入的字符串是: 12345678, 则转换为 ASCLL码之后。每4位转为一个 int 型。 之所以 顺序改变是 因为 小端序的原因。
所以 我们 输入的 20个 字符串, 最终会 转换为 5个 int 型 数组, 刚好够加5次。
我们只需要 输入 5组 数,使其相加 为 0x21DD09EC 即可。
那么 我们 前4组数 使其 都为 0x02020202, 最后一组数 为 0xE401D519(此处因为小端序的原因会改变存储的顺序).
Pwnable.kr mistake
根据题目和提示,我们可以发现这道题的漏洞在与 运算符的优先性问题。我们可以看到如下代码:
if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0)
这段代码中,由于 比较运算符 优先级中 < 的优先级 高于 = 的优先级。也就是上述代码的执行顺序变为如下:
if( fd= (open("/home/mistake/password",O_RDONLY,0400) < 0 ))
而我们知道 open() 函数 打开一个文件成功之后,就会返回一个非零数值,那么 永远比 0大,所以比较之后,将会返回 false 也就是 0。 所以 最终 fd = 0; 而当 fd = 0 之后,我们以下的代码:
len=read(fd,pw_buf,PW_LEN)
此代码将会变为 stdin, 也即是读取用户输入,我们可以输入任意的数值。 所以我们可以如下输入:
pw_buf = 1111111111
pw_buf2 = 0000000000;
因为 pw_buf2 ^ 1111111111 = 1111111111;
Pwnable.kr shellshock
这道题,可以先对 shellshock有一定的了解:
https://blog.csdn.net/pygain/article/details/53969081
然后按照漏洞去执行 bash -c cat flag的命令即可
Pwnable.kr uaf
此题需要用到虚函数和堆的知识,博主对堆不太了解,只对虚函数有一定的了解,看了别人的WP,也只是了解一点,等以后有更深的知识了,再来补吧,下面放两篇我觉得写的挺详细的WP,供参考:
https://bbs.pediy.com/thread-224651.htm
https://blog.csdn.net/qq_20307987/article/details/51511230
Pwnable.kr cmd2
我们可以看到 这道题对我们输入的 grgv[1] 的进行了过滤,过滤掉了 / 、 ‘ 、 flag 等,那么我们要输入的参数原本为:
/bin/cat flag 就要进行绕过。
那么 flag 可以用适配符代替, 但是 / 怎么办呢?
pwd 命令是输出当前目录名的, 如果我们当前目录在根目录下,那么我输出的不就是 / 吗?
所以我们可以先进入到根目录,随后如下操作:
./home/cmd2/cmd2 '""$(pwd)bin$(pwd)cat $(pwd)home$(pwd)cmd2$(pwd)fl*""'
上一篇: CSS实现导航条Tab切换的三种方法
下一篇: 数据加密