攻防世界hello _pwn总结

checksec
转自:checksec工具使用-pwn – 简书 (jianshu.com)
基本用法:checksec –file=hello_pwn
在这里插入图片描述

Arch:

系统架构信息,判断是64位还是32位,选择相应的IDA和写相应的exp。

amd64-64-little说明为64位,选用64位的IDA,写64位的exp。

RELRO:

Relocation Read-Only (RELRO),此项技术针对GOT/GIFTO(区块链)改写的攻击方式。分为两种,Partial RELRO 和 Full RELRO。

Partial RElRO易受攻击,例如攻击者可以atoi.got为system.lit,进而输入/bin/sh\x00获得shell

Full RELRO 使整个GOT只读,从而无法被覆盖,但这样会大大增加程序的启动时间,因为程序在启动之前需要解析所有的符号。

Partial RELRO 易受攻击,可以攻击
在这里插入图片描述

Stack-canary

栈溢出保护,一种缓冲区溢出攻击缓解手段。

canary 转自:canary介绍与绕过技巧

当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。

当启用栈保护后,函数开始执行的时候会先往栈里插入类似cookie的信息,当函数真正返回时,

会验证cookie信息是否合法,如果不合法就停止程序运行。

攻击者在覆盖返回地址时往往也会将cookie信息覆盖掉,导致栈保护检查失败而阻止shellcode的执行。

Linux中将cookie信息称为canary。

canary是Linux 下保护机制的标配。

No canary found 栈溢出保护未开启

gcc -fno-stack-protector -o hello test.c   //禁用栈保护
gcc -fstack-protector -o hello test.c    //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码
gcc -fstack-protector-all -o hello test.c  //启用堆栈保护,为所有函数插入保护代码
下面展示一些 `内联代码片`。

NX

NX enable如果这个保护开启就意味着栈中数据没有执行权限,如此,当攻击者在堆栈上部署自己的shellcode并触发时,指挥直接造成程序的崩溃,但是可以利用rop这种方法绕过

No enable 未开启

gcc -o  hello test.c // 默认情况下,开启NX保护
gcc -z execstack -o  hello test.c // 禁用NX保护
gcc -z noexecstack -o  hello test.c // 开启NX保护

PIE

PIE(Position-Independent Executable,位置无关可执行文件),技术与ASLR技术类似ASLR将程序运行时的堆栈以及共享库的加载地址随机化,而PIE技术是在编译时将程序编译为位置无关,即程序运行时各个段(如代码段等)加载的虚拟地址也在是装载时才确定。这就意味着,在PIE和ASLR同时开启的情况下,攻击者将对程序的内存布局与一无所知。

ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。大部分主流的操作系统已经实现了ASLR。

gcc -o hello test.c  // 默认情况下,不开启PIE
gcc -fpie -pie -o hello test.c  // 开启PIE,此时强度为1
gcc -fPIE -pie -o hello test.c  // 开启PIE,此时为最高强度2
//(还与运行时系统ALSR设置有关)

新版checksec多了几个选择项

RPATH/RUNPATH

程序运行时的环境变量,运行时所需的共享文件有心啊从该目录寻找,可以fake lib造成攻击

FORTIFY

一个由GCC实现的源码级别的保护机制,其功能是在编译的时候检查源码以避免潜在的缓冲区溢出等错误。

简单的说,加了扯个保护后,一些敏感函数如read,fgets,memcpy,printf等。

导致漏洞出现的函数都会被替换成__read_chk,__fgets_chk,__memcpy_chk,__printf_chk等。

这些带了chk的函数会检查读取/复制的字节长度是否超过缓冲区长度,

通过检查诸如%n之类的字符串位置是否位于可能被用户修改的可写地址,避免了格式化字符串跳过某些参数(如直接%7$x)等方式来避免漏洞出现。

开启了FORTIFY保护的程序会被checksec检出,此外,在反汇编时直接查看got表也会发现chk函数的存在,

这种检查默认不开启,可通过以下

gcc -D_FORTIFY_SOURCE=2 -O1
//开启fortity检查,开启后会替换strcpy等危险函数。

IDA Pro IDA基本使用 IDA简介
IDA Pro全称是International disassemble professional,交互式反编译专业版,简称IDA。

采用递归向下反编译器,目的是尽可能呈现接近原代码的代码,是目前最棒的一个静态反编译软件。

它支持数十种CPU指令集其中包括Intel x86、x64、MIPS、PowerPC、ARM、Z80、68000、c8051等等。

(对于这个IDA,还需要学习,先写(抄)一下基本用法 )

用法:

IDA可以解析的文件包括.exe,.so,.o等格式

打开:

前两个弹出框点OK,在IDA:Quick start窗口:

NEW是新建打开一个标准文件

GO是运行打开一个空白工作,需要将要分析的文件拖入窗口

Previous是选择最近一次使用的文件

一般选择NEW,然后选择文件,点击OK,会提示以什么格式打开
在这里插入图片描述

装载PE文件: PE简介

在Load a new file 窗口中选择装载PE文件,选择默认选择,点击ok

包括text(代码块)、date(数据库)、rsrc(资源块)和edate(输出表)等,

也可以装载二进制文件
在这里插入图片描述

IDA反汇编包括两个阶段,首先将程序的代码和数据分开,分别标记函数并分析参数调用、跳转、指令关系等;接着如果IDA能识别文件的编译类型,就装载对应的编译器特征文件,给各类函数赋名。

同时,IDA会创建一个数据库,其组件分别保存在.id0,.id1,.nam和.til的文件中。
在这里插入图片描述

.id0:二叉树形式的数据库

.id1:程序字节标识

.nam:Named窗口的索引信息

.til:给定数据库的本地类型定义的相关信息

界面:

左窗口为函数列表,一个文件被反汇编后所有的函数列表都可以在此窗格中显示

右窗口为汇编代码区,双击函数可以看到函数对应的汇编代码片段

下窗口为输出窗口,文件反汇编过程中的信息都可以在此窗口中看到
在这里插入图片描述

空格可以切换汇编代码为流程图模式

在这里插入图片描述

在流程图模式下,绿线代表判定条件成立,红线代表判定条件不成立

分析代码

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  alarm(0x3Cu);
  setbuf(stdout, 0LL);
  puts("~~ welcome to ctf ~~     ");
  puts("lets get helloworld for bof");
  read(0, &unk_601068, 0x10uLL);
  if ( dword_60106C == 1853186401 )
    sub_400686(0LL, &unk_601068);
  return 0LL;
}

read(0, &unk_601068, 0x10uLL); 读取数据
if ( dword_60106C == 1853186401 ) 判断值是否相等

双击“sub_400686();”查看sub_400686函数内容

__int64 sub_400686()
{
  system("cat flag.txt");
  return 0LL;
}

可以分析得到:当unk_601068 = dword_60106C时,得到flag

EXP
一些基本概念:

exploit :(一整套攻击方案)用于攻击的脚本与方案

payload:攻击荷载,是目标进程被劫持控制流的数据(精心构造的一段恶意数据,用于触发特定漏洞)

shellcode:包含在payload中的一段机器码,调用攻击目标的shell的代码,(广义上指能够获取shell的一段代码(脚本代码或机器码))

shell:用户和操作系统内核之间的一层“代理”,linux下称为shell

ebp: extended base pointer 扩展基址指针寄存器,其内存放一个指针,该指针指向系统栈最上面一个栈帧的底布。

可执行文件:

广义:文件中数据是可以执行代码的文件,.out,.exe,.sh,.py;

狭义:文件中的数据是机器码的文件,.out,.exe,.dll,.so;

分类:

Windows:PE(Portable Executable)

可执行程序:.exe;动态链接库:.dl;静态链接库.:lib;

Linux:ELF(Executable and Linkable Format)

可执行程序:.out;动态链接库:.so;静态链接库:.a;

待续……

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RICKC131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值