ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【pwn】学pwn日记(持续更新)

2021-08-04 22:34:58  阅读:288  来源: 互联网

标签:plt system 更新 链接 地址 pwn got foo 日记


【pwn】学pwn日记(持续更新)

前言

从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用。

文章中的部分图片来自于教学视频

学习视频链接:XMCVE 2020 CTF Pwn入门课程【星盟安全】PWN系列教程(持续更新)

学习文章链接: CTF Wiki

elf文件

image-20210802203222493

image-20210802203615095

image-20210802203654628

image-20210802204332461

image-20210802204644270

image-20210802210146450

未初始化的全局变量glb,编译出来在内存中bss中

初始化的全局变量str(没有被修改过),编译出来在内存中data

而hello world在text段中

main和sum函数都在text段中,以机器码形式存放

局部变量t和prt放入栈中

malloc出来的空间放在heap中

image-20210802211718784

32位栈结构

image-20210802230103550

image-20210802231702749

ASLR:栈地址随机化(必定打开)

NX:栈保护

Canary:防止缓冲区溢出

PIE:地址无关代码,随即bss、data、text

ret2shellcode

因为现在绝大部分的pwn都开启了alsr(地址随机化),所以我们往往无法向栈中写入shellcode

现在有两种方法解决问题

  1. 如果缓冲区设置在.bss区域中,也就是可以更改全局变量,且NX关闭,bss具有写的能力,我们将shellcode写入这个全局变量中,shellcode就可以执行

  2. 使用nop滑梯,即使aslr随机更改地址,我们设置一个指向中间的返回地址,也有一定概率执行shellcode

    image-20210804212048742

ret2syscall

rop的构造

image-20210803200951692

ret2libc

动态链接和静态链接的区别

image-20210804120415129

动态链接生成的elf文件很小,和源代码大小差不多

静态链接生成的elf文件很大,是源代码的几倍,涉及到的函数越多,就越大

动态链接需要.so装载器,其中装载了libc-2.xx.so等文件

动态链接相关结构

link_map:保存进程载入的动态链接库的链表(因为可能不仅仅载入一个libc.so文件)

.dynamic节:提供动态链接的相关信息

.got:全局偏移量表

plt:解析函数的真实地址

.got.plt:保存函数地址

image-20210804125900534

动态链接过程

第一次调用,foo去got.plt中询问foo真实地址,但是got.plt也不知道,让foo回去自己找这个地址,于是foo开始解析,解析后调用,将foo真实地址给got.plt,通过got.plt到foo真实地址

image-20210804194742941

第二次调用,plt到got.plt,got.plt直接随着地址到了真实的foo函数地址

image-20210804194859350

image-20210804164513003

image-20210804220859581

所以虽然我们不知道text段的system,但是我们只需要将system的plt地址知道,就可以到system的真实地址,调用真正功能

然后看ret2libc1,从这两张图知道,为什么填充完了局部变量缓冲区和ebp,再填充system函数之后需要加上4个字节的exit函数(这里的exit函数相当于一个返回地址),因为system函数地址+8字节才是system函数的参数,可以参考32位程序的堆栈图

所以这段栈溢出造成的攻击就是执行了两行代码:

  • system("/bin/sh")
  • exit(0)

image-20210804213138570

image-20210804214738360

32位程序的堆栈图

image-20210804220146779

标签:plt,system,更新,链接,地址,pwn,got,foo,日记
来源: https://www.cnblogs.com/woodwhale/p/15101103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有