1.pwn理论基础

小菜:

什么是溢出

概念:在计算机中,当要表示的数据超出计算机使用的数据表示范围时,产生数据的溢出
原因:使用非类型安全的语言入C/C++等
           以不可靠的方式存取或者复制内存缓冲区
           编译器设置内存缓冲区太靠近关键数据结构

什么是pwn

“pwn"是一个黑客俚语词,指攻破设备或者系统。发音类似"砰”。就是向目标发送特定的数据,使其执行我们发送的错误代码。

(1)汇编语言的基础(请点击)

(2)vi编辑器的基础操作(请点击))

(3)chmod命令的解析

(请点击) 用于提权

(4)gcc编译

请点击
用于对编写的程序进行编译得到可执行文件

(5)gdb反汇编的基础命令

disass main反汇编出来main函数的汇编代码

设置断点

设置断点可以通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、文件名+行号以及偏移量、地址等进行设置。

break 函数名

break 行号

break 文件名:函数名

break 文件名:行号

break +偏移量

break -偏移量

break *地址
运行

r是运行(run)

n是单步执行,next遇到函数不会进入函数内部

si是步入,step会执行到函数内部

c是继续运行,调试时,使用continue命令继续执行程序。程序遇到断点后再次暂停执行;如果没有断点,就会一直执行到结束。

删除断点

删除断点通过命令包括:

delete <断点id>:删除指定断点

delete:删除所有断点

clear

clear 函数名

clear 行号

clear 文件名:行号

clear 文件名:函数名

查看断点

info br

简写:i b
图片概述:

(5)整体练习:栈帧的形成与释放

栈帧其实就是一个函数执行的环境,就是一个函数执行的时候,他的函数参数、函数的局部变量,函数执行完返回的地址。

2.保护和溢出

小菜

2.1***常见的保护***

2.1.1 Stack Protector(栈保护)

具体效果:当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary,所以这种保护方式也被称为CANNAPY

2.1.2 NX(DEP)

NX即No-eXecute(不可执行)的意思。
基本原理:将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
注:NX等同于Windows下的DEP。

2.1.3 PIE(ASLR)

基本原理:标准的可执行程序需要固定的地址,并且只有被装载到这个地址才能正确执行,PIE能使程序像共享库一样在主存任何位置装载,这需要将程序编译成位置无关,并链接为ELF共享对象。
注:一般情况下NX和地址空间分布随机化ASLR会同时工作。内存地址随机化机制(address space layout randomization),有以下三种情况
0 - 表示关闭进程地址空间随机化。
1 - 表示将mmap的基址,stack和vdso页面随机化。
2 - 表示在1的基础上增加栈(heap)的随机化。
可以防范基于Ret2libc方式的针对DEP的攻击。ASLR和DEP配合使用,能有效阻止攻击者在堆栈上运行恶意代码。

2.2 检查保护情况

checksec+文件名

注:要在root权限下操作

2.3 保护的关闭与开启(gcc指令)

博客详细记录

2.3.1 栈保护的开启与关闭

注:默认不开启
gcc -fstack-protector -o hello hello.c //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码

gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码

gcc -fno-stack-protector -o test test.c //禁用栈保护

2.3.2 NX(DEP)的开启与关闭

gcc编译器默认开启了NX选项,如果需要关闭NX选项,可以给gcc编译器添加-z execstack参数。
例如:
gcc -z execstack -o hello hello.c
如果关闭后要开启NX,输入指令:
gcc -z noexecstack -o test test.c // 开启NX保护

2.3.3 PIE(ASLR)的开启与关闭

注:默认不开启
gcc -fpie -pie -o test test.c // 开启PIE,此时强度为1
gcc -fPIE -pie -o test test.c // 开启PIE,此时为最高强度2

2.4 查看调用的函数

objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。(linux命令大全)
objdump -t -j .text hello//查看hello程序的.text段有哪些函数
各个表示:
-j name
–section=name 仅仅显示指定名称为name的section的信息

-t
–syms 显示文件的符号表入口。类似于nm -s提供的信息

4.一个简单exp的编写


什么是exp?payload是什么?怎么使用python获取?
渗透中 PoC、Exp、Payload 与 Shellcode 的区别
exp解析及pwntools相关使用

3.什么是canary保护

简单来说,canary保护就是在返回地址之前插入一个随机数据,在返回前先校验此数据是否被更改,如果被更改则je跳转到不可执行。
复习一下:栈保护的开启与关闭(上方)
实战演示:
可以发现:程序运行后,先将一个数据入栈到栈底(最后出去)。

在函数结束前,会使用xor指令进行校验,不一致则je跳转,无法返回。

4.print漏洞概述及其调试

https://bbs.ichunqiu.com/thread-42943-1-1.html?from=bkyl
+https://bbs.pediy.com/thread-250858.htm

看雪pwn入门--基础篇相关推荐

  1. Python入门基础篇 No.8 —— 时间的表示_unix时间点_毫秒_time模块

    Python入门基础篇 No.8 -- 时间的表示_unix时间点_毫秒_time模块 文章目录 Python入门基础篇 No.8 -- 时间的表示_unix时间点_毫秒_time模块 前言 一.时间 ...

  2. 盗雪html5入门基础视频教程全集下载

    盗雪html5入门基础视频教程适合从没接触过html的童鞋使用,不管是html4还是xhtml 1.0,又或者是最新的html5都可以先看看这个视频,从最基础的开始讲起.看完整套视频后你就可以写出自己 ...

  3. 【目录】Python 入门基础篇 <(^-^)>

    Python 入门基础篇 一.关于Python的介绍与准备工作 Python基础介绍 Jupyter notebook基础介绍 Jupyter notebook打开问题 Jupyter noteboo ...

  4. typescript箭头函数参数_Typescript 入门基础篇(一)

    Typescript 基础 Typescript是Javascript的一个超集.以下typescript简称为ts, 此文章主要是对ts官网文档的一个简化,缩短学习基础时间. 类型基础 ts 的类型 ...

  5. 小程序开发入门基础篇-张代浩-专题视频课程

    小程序开发入门基础篇-1995人已学习 课程介绍         采用小程序wepy框架,初级讲解如何搭建小程序的开发环境,创建工程,语法介绍.开发调试等,课程采用实战代码案例作为教材,通俗易懂,简单 ...

  6. python视频教程推荐it教程网_Python视频教程之入门基础篇_IT教程网

    资源名称:Python视频教程之入门基础篇 资源目录: [IT教程网]320b96cae58124db5fb6e7c5df99aefc [IT教程网]699434136852f34ec720f2a34 ...

  7. vue实战入门基础篇五:从零开始仿门户网站实例-关于我们实现

    上一篇:vue实战入门基础篇四:从零开始仿门户网站实例-网站首页实现https://blog.csdn.net/m0_37631110/article/details/123045334 一.目录 第 ...

  8. vue实战入门基础篇二:从零开始仿门户网站实例-开发框架搭建

    上一篇:vue实战入门基础篇一:从零开始仿门户网站实例-前期准备工作 vue实战入门基础篇二:从零开始仿门户网-2022-2-23 21:00:27 一.目录 第一篇:前期准备工作 第二篇:开发框架搭 ...

  9. RAID技术详细解答之一:入门基础篇

    本文所要讲解的RAID技术起初主要应用于服务器高端市场,但是随着个人用户市场的成熟和发展,正不断向低端市场靠拢,从而为用户提供了一种既可以提升硬盘速度,又能够确保数据安全性的良好的解决方案.IDE 磁 ...

最新文章

  1. laravel创建新model数据的两种方法
  2. OpenCV反向项目功能用法的实例(附完整代码)
  3. 服务器开发设计之算法宝典
  4. matplotlib简介-高质量图形输出
  5. 菜鸟的Hadoop快速入门
  6. 填坑---override、overload、overwrite
  7. ESXi 6 升级到ESXi 6.5VIB冲突问题
  8. 淡水鱼生鱼片含有大量肝吸虫 可寄生于肝脏内30年
  9. 判断两个圆相切或相交
  10. win xp安装详细教程
  11. 常见编程代码命名风格
  12. 什么是IDaaS?IDaaS有什么应用意义?
  13. rk3288 添加系统广播
  14. 高效运维的本质:可视化的服务交付和可视化的服务度量
  15. vue项目中 axios 请求成功 却进入catch中
  16. 2009年的法定假日放假安排
  17. 3.HTML输出的特殊字符(转义符)
  18. 计算机二级题库,计算机二级题库office
  19. 录屏软件录制内部声音,图文教程,快速解决
  20. ×××工业和信息化部令 第11号

热门文章

  1. 大饼震荡不变,新平台搭建?
  2. Android系统自定义关机充电图标
  3. 2022/12/26总结
  4. 看了下李航的《统计学习方法》
  5. 疯狂小鸟游戏 html,飞翔的小鸟游戏一 ( html和导图)
  6. 将windows下文件编码格式转换成UTF-8 文件编码格式
  7. TextRank算法实践
  8. 银监会计算机专业考试,)(2015国家公务员考试银监会计算机专业考试分析
  9. HTC Vive与Oculus Rift全面对比
  10. 恭喜 SphereEx 联合创始人潘娟成为亚马逊云科技新晋 Data Hero