[NTUSTISC pwn LAB 0]新手就能掌握的pwntools接口入门实验
Posted 漫小牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NTUSTISC pwn LAB 0]新手就能掌握的pwntools接口入门实验相关的知识,希望对你有一定的参考价值。
一、资源和环境
1、资源
b栈中给出的链接:https://pan.baidu.com/s/1AR3mI1oTWMz4mTbwkgXBzA
提取码:2gec
下载后,参考lab0
2、环境
下载CTF pwn专用虚拟机环境:https://www.cnblogs.com/cnsec/p/13286478.html
本实验环境为python2,以及基于python2的pwntools支持环境。
二、demo文件
在例子中,除提供二进制程序外,还提供了.c的源文件和makefile文件,.c文件和部分注释见如下的代码:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>
#include <unistd.h>
void handler(int signum){
puts("Timeout");
_exit(1);
}
int main()
{
setvbuf(stdout, 0, 2, 0); //buffer设为0,确保io不会卡住
setvbuf(stdin, 0, 2, 0); //buffer设为0,确保io不会卡住
signal(SIGALRM, handler);
alarm(90); // 限制时间90s
unsigned seed = (unsigned)time(NULL);
srand(seed);
unsigned int magic;
printf("Give me the magic number :)\\n");
read(0, &magic, 4);
if (magic != 3735928559) { //二进制0xdeadbeef
printf("Bye~\\n");
exit(0);
}
printf("Complete 1000 math questions in 90 seconds!!!\\n");
for (int i = 0; i < 1000; ++i) {
int a = random() % 65535;
int b = random() % 65535;
int c = random() % 3; //操作符
int ans;
switch(c) {
case 0: //两数相加
printf("%d + %d = ?", a, b);
scanf("%d", &ans);
if (ans != a + b) {
printf("Bye Bye~\\n");
exit(0);
}
break;
case 1: //两数相减
printf("%d - %d = ?", a, b);
scanf("%d", &ans);
if (ans != a - b) {
printf("Bye Bye~\\n");
exit(0);
}
break;
case 2: //两数相乘
printf("%d * %d = ?", a, b);
scanf("%d", &ans);
if (ans != a * b) {
printf("Bye Bye~\\n");
exit(0);
}
break;
}
}
printf("Good job!\\n");
system("sh"); //得到shell
return 0;
}
三、exp代码
ubuntu 16.04(即第一节中下载的pwn专用机)中编写的python2 exp代码如下:
from pwn import *
r=#999AAA >
r = process('./pwntools')
r.recvuntil('number :)\\n')
p = p32(0xdeadbeef)
r.send(p)
r.recvline()
for i in range(1000):
q = r.recvuntil(' = ?').replace(' = ?', '')
print q
ans = eval(q)
r.sendline(str(ans))
r.interactive()
运行该代码后的结果见下图:
取得shell的情况为:
以上是关于[NTUSTISC pwn LAB 0]新手就能掌握的pwntools接口入门实验的主要内容,如果未能解决你的问题,请参考以下文章
[NTUSTISC pwn LAB 1]栈溢出:gdb动态调试bof
[NTUSTISC pwn LAB 6]rop&Return to plt实验
[NTUSTISC pwn LAB 2]栈溢出:gdb动态调试bof2