太阳集团2138备用网址

  • “12326”民航服务质量监督电话正式开通 2019-04-23
  • 中铁佰和佰樂金婚盛典2017重阳节完美绽放 2019-04-23
  • 保护长江生态环境今年主抓8方面工作——生态环境部部长李干杰回应生态环境保护热点问题 2019-04-23
  • 新疆台办开展走访慰问台商台企活动 2019-04-23
  • 标致301优惠1.5万起 时尚代步经济全面 2019-04-23
  • 欢迎进入红色轨迹党史网站 2019-04-23
  • 【华商侃车NO.28】重磅!为什么315这么多车主维权? 2019-04-23
  • “上会神器”造型各异! 2019-04-23
  • 曾经赫赫有名如今艰难生存:华硕的解药到底在哪儿? 2019-04-23
  • 全国政协常委吴晶倡议:唱响《国歌》 激发爱国情怀【图文】 2019-04-23
  • 首届青运会开幕式文体表演简约而不简单 2019-04-23
  • 中国法学会第八次全国会员代表大会在京开幕 2019-04-23
  • 我是谁?我是海关关员 2019-04-23
  • “立委”南北辅选? 韩國瑜:要看时间 2019-04-22
  • 中国—东盟时装周上演马来西亚设计师婚纱礼服秀 2019-04-22
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    Linux PWN从入门到熟练

    来源:本站整理 作者:佚名 时间:2018-11-19 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 最近在复习pwn的一些知识。主要涉及到当堆栈开启了保护的时候,我们不能够直接将shellcode覆盖到堆栈中执行,而需要利用程序其他部分的可执行的小片段来连接成最终的shellcode。此小片段就是gadgets。本文主要通过练习题的方式讲述如何寻找gadgets,如何利用现有的工具来加速自己的pwn的效率。Gadgets的类型和难度也逐步变化。下面带来手把手教你linux pwn。让你的pwn技术从入门到熟练。练习题的难度逐步加大。
    第一关
    第一关的gadgets较为简单,包含了一个直接可以利用的,可返回shell的函数。我们只要计算好覆盖的偏移,将可返回shell函数的地址覆盖到相应的位置即可以。程序下载:Pwn1
    我们首先来查看一下该程序的保护情况,发现开启了堆栈保护。即NX enabled。且是32bit的程序。因此需要在32位的linux环境下测试。

    这里涉及到一个工具,chechsec。该工具专门用来检测程序中受保护的情况,我们可以根据程序受保护的情况来选择对应的pwn策略。
    下载以后,直接在命令行中建立符号链接就可以在terminal中直接使用了
    sudo ln –sf checksec /usr/bin/checksec
    接下来我们利用IDA查看一下程序的源代码:


    可以发现漏洞出现在gets里面,gets函数存在缓冲区溢出漏洞,我们可以通过超长的字符串来覆盖缓冲区,从而修改ROP。为了达到这个目的,我们需要首先计算,输入的&s的堆栈地址位置距离堆栈的底部ebp的位置。Ebp的下一个地址,就是记录了返回地址的位置。在32位的程序中,就是ebp+4。其中,Esp是栈顶指针,ebp是栈底指针。Esp -> ebp, 地址从小到大。小地址栈顶,大地址栈底。
    我们有两种方法可以得到s距离返回地址的偏移:徒手计算和利用patternoffset产生字符串。
    首先第一种方法,徒手计算。我们利用gdb的辅助工具gef来辅助查看esp地址。
    注意,这里需要按照这个辅助工具,gef,该工具会提供更加丰富的调试信息。包括堆栈信息,寄存器信息等。按照完毕之后,使用gdb –q *.elf执行就可以。
    启动的程序之后,我们在上述get函数的位置下断点,即0x080486AE


    可以看到 esp 为 0xbfffeed0,ebp为0xbfffef58,同时 s 相对于 esp 的索引为[esp+80h-64h]= [esp+0x1c]。所以s的地址为 0xbfffeeec,所以 s 相对于 ebp 的偏移为 0x6C(108),所以相对于返回地址的偏移为 0x6c+4(112)。
    另外一种方法是利用patternoffset执行来计算。借助到这个工具patternoffset。下载下来直接作为python脚本使用。利用下面的命令产生字符串到test的文件中:
    python patternLocOffset.py -c -l 700 -f test
    接着远程IDA挂载调试,在程序的返回位置下断点,即retn的位置。

    它会在远程的服务器端等待我的输入
    ~/ $ ./linux_server
    IDA Linux 32-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017
    Listening on 0.0.0.0:23946...
    =========================================================
    [1] Accepting connection from 192.168.110.1...
    There is something amazing here, do you know anything?
    在这个位置,我就把产生的pattern计算字符串复制进去。(注意,如果这里始终没有让程序停下来让你输入对应的字符串进去的话,就断开ubuntu的server,然后重新连接一下,就会停下来等待我们的字符串输入)
    接着,查看程序覆盖的寄存器ebp的内容为0x41366441

    再利用offset的脚本计算一下输入的缓冲区地址距离ESP相差多少的字节,相差的是108个字节。ESP之后,存储的就是返回的地址,所以要加上108+4=112字节的偏移。

    得到的结果和上面是一致的。
    接下来,我们需要找到可以利用的系统调用函数。在IDA中搜索(alt+T)可以利用来的系统sh调用函数:

    最后,将需要覆盖的地址0x0804863A填入指定的位置覆盖,在利用pwntools来验证攻击。这里利用到了一个pwntools工具。推荐使用基于源代码的安装方式,可以更为方便。
    安装方式为:
    cd ~
    git clone https://github.com/aquynh/capstone
    cd capstone
    make
    make install
    cd ~
    git clone https://github.com/Gallopsled/pwntools
    cd pwntools
    python setup.py install

    [1] [2] [3]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。
    • 最新更新
      • 相关阅读
        • 本类热门
          • 最近下载