• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • CTF – RootMe解题报告 [App-System : ELF x86 – Stack buffer overflow basic 1]

    渗透测试 EXP 871阅读 0评论

     
     挑战入口:Root-Me(https://www.root-me.org/en/Challenges/App-System/ELF32-Stack-buffer-overflow-basic-1)
     分类目录:Link to …(http://exp-blog.com/2019/01/02/pid-2597/3/)

    水题。

    登录靶机后,在当前目录发现 3 个文件:

    • .passwd : 明显是目标文件,但是还没有权限打开
    • ch13 : 由 ch13.c 编译而成的脚本文件,且其 owner 具备 S 位权限
    • ch13.c : ch13 脚本的源文件,只是让我们看一下源码,知道其作用是当变量 check==0xdeadbeef 时,就帮当前用户进行提权

    那么这题的切入点就在于如何令变量 check 的值变成 0xdeadbeef 实现当前用户提权,再读取 .passwd 文件。

    首先来分析一下源码(分析要点我用注释进行标记了):

    为了可以准确地通过 内存溢出 覆写变量 check ,首先需要知道 fgets 的特性,这是 API 说明:

    回到这题,数组 buf 的长度是 40,而 fgets 读取的字符长度是 45,则可以构造如下的 payloads 先测试一下:

    0000000000000000000000000000000000000000abcd

    其中前 40 个字符 0 是用于填充数组 buf 的,后 4 个字符 abcd 才是利用内存溢出覆写到变量 check 的真正的攻击载荷。

    执行命令 ./ch13 运行脚本,再输入这个 payloads ,最后按下回车输入 \n ,发现变量 check 的值被覆写了。

    进一步分析变量 check 的值,是 0x64636261,转换成 ASCII 码就是 dcba, 而所输入的 payloads 是 abcd ,顺序刚好相反。至此就有足够条件可以构造真正的 payloads 了。

    ch13.c 的源码可以知道,变量 check 的目标值是 0xdeadbeef ,转换成 ASCII 就是 Þ­¾ï 。从测试 payloads 知道,顺序要逆转,因此真正的 payloads 就是:

    0000000000000000000000000000000000000000ï¾­Þ

    执行命令 ./ch13 运行脚本,然后输入这个 payloads ,最后按下回车输入 \n ,发现变量 check 的值被成功覆写成 0xdeadbeef , 同时也提权成功。

    此时执行命令 cat .passwd 成功得到密码,完成挑战。


    转载请注明:EXP 技术分享博客 » CTF – RootMe解题报告 [App-System : ELF x86 – Stack buffer overflow basic 1]

    喜欢 (1) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址