pwnable.tw hacknote】的更多相关文章

产生漏洞的原因是free后chunk未置零 unsigned int sub_80487D4() { int index; // [esp+4h] [ebp-14h] char buf; // [esp+8h] [ebp-10h] unsigned int v3; // [esp+Ch] [ebp-Ch] v3 = __readgsdword(0x14u); printf("Index :"); read(, &buf, 4u); index = atoi(&buf);…
存储结构 0x804B070链表头 struct _mycart_binlist { int *name; //ebp-0x20 int price; //ebp-0x1c struct _mycart_binlist *next; //ebp-0x18 struct _mycart_binlist *pre; //ebp-0x14 } insert int __cdecl insert(int a1) { int result; // eax _DWORD *i; // [esp+Ch] [e…
产生漏洞的原因 int __cdecl power_up(char *dest) { char s; // [esp+0h] [ebp-34h] size_t new_len; // [esp+30h] [ebp-4h] new_len = ; memset(&s, , 0x30u); if ( !*dest ) return puts("You need create the bullet first !"); ) > 47u ) // len>47 return…
(留坑,远程没打成功) int __cdecl main(int argc, const char **argv, const char **envp) { int t_num_count; // eax int *num_stack; // edi unsigned int input_count; // esi unsigned int output_ptr; // esi int v7; // ST08_4 int result; // eax unsigned int num_count…
题目代码量比较大(对于菜鸡我来说orz),找了很久才发现一个能利用的漏洞 运行之发现是一个计算器的程序,简单测试下发现当输入的操作数超过10位时会有一个整型溢出 这里调试了一下发现是printf("%d",num[num-1])时要输出的结果超过了2^31,2147483648即0x80000000,所以这应该算是一个bug并不是一个可利用的漏洞(32位程序最大输出2^31的原因是int类型最高位是符号标志位) 下面我们逆向一下整个程序找到真正可利用的漏洞 其中get_expr函数在读…
emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个linux 0x80系统调用的参考网址,就决定是他了 参考之可以发现al=0x3执行sys_read时长度是0x3c*size_sz,栈的长度是0x14,明显的栈溢出.由于没有开启NX,所以直接在栈上布置shellcode即可. 需要注意的是: 虽然程序没有开启PIE,但是利用的话是需要绕过ASLR的:…
此题的代码量很大,看了一整天的逻辑代码,没发现什么问题... 整个函数的逻辑主要是红框中两个指针的循环赋值和调用,其中第一个指针是主功能函数,第二个数组是子功能函数. 函数的漏洞主要在main函数中,main函数中使用了strtol函数将用户输入转换为字符串,并根据此转换结果,对子函数进行访问. 当用户输入过大或过小时,会导致越界访问的问题,其中,strtol函数的返回值可能为负数. bss段中,用户输入的名称最开始是随机生成的,但用户可以更改.而此字段在函数指针数组上面,也就是说,用户可以通过…
Let's start the CTF:和stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚: 调试了就很容易看出来在堆栈上是同一块地址.发生栈溢出是因为:read和write的缓存区地址相同,sys_write函数地址只有20,但是sys_read函数地址有60,当你输出大于20的时候就会覆盖掉ret. payload一般形式:padding + addr of shellcode + padding + shellcode,所以我们要找一个addr…
orw 首先,检查一下程序的保护机制 开启了canary保护,还是个32位的程序,应该是个简单的题…
这题是和pwnable.kr差不多的一道题,主要区别在于没有给syscall.所以需要自己去找. 只有read和sleep两个函数. 思路一是首先劫持堆栈到bss段,然后调用read函数将sleep的got表中地址改成syscall(直接找到\x0f\x05),将/bin/sh放入bss中,然后设置rax为59调用syscall可以调用execve了,结果这个方法本地打通了远程打不通,不知道是什么原因.应该是地址不一样,所以决定先用write泄露一下地址然后再定位syscall. 未完待续 没有…