欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创][分享]Pwn从入门到放弃(一)

[原创][分享]Pwn从入门到放弃(一)

0x00 背景

最近打算系统的学习Pwn这块内容,刚好前段趁双11购买了不少网课,于是在某春秋上看了Atum的《CTF PWN选手的养成》课程,课程里面布置了不少作业,因此打算开个系列帖子,将自己在做作业时的一些心得体会分享出来,也算是自己的学习笔记吧。

0x01 栈溢出利用

0x02 基本的ROP利用

0x03 题目一:

这是一道Defcon 2015 Qualifier上的PWN题目,名叫r0baby

  • 第一步:首先拿到题目,先checksec看一下:

程序为64位小端,并且开启了NX(堆栈不可执行)、PIE(地址随机化ASLR)和Fortify保护(一种增强保护机制,防止缓冲区溢出攻击,会替换诸如memcpy、memset、strcpy等危险函数)。

  • 第二步:运行看看:


    发现有4个选项:
    1、获得libc地址
    2、获得libc中某个函数的地址
    3、向栈中输入小于1024长度的任意数据
    4、退出程序
    先选择1看看:

    再选择2,输入system看看:

    再选择3,随便输入点东西看看:

    发现输入了若干字符,居然报错了(熟悉的Segmentation fault)

  • 第三步:用gdb看看究竟在哪里崩了:

    可以看到崩溃在了0x555555554eb3:ret的地方
    通过pattern_offset计算,可以得知溢出点在8个字节处:

  • 第四步:将程序丢到IDA中,发现函数并不多,一眼便可以看到main入口函数,F5伪代码可以看到,程序会调用系统默认的libc.so.6这个库

通过运行libc.so.6,可以获得当前系统运行的libc版本:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功