xctf_攻防世界 level2 | wp

monkey

  • 本题是一个 c 语言框架的 js执行
  • 查看wp的得到提示
    • 这个 框架内置函数有 os.system(); 所以直接执行shell即可
  • 注意点:
    • 看到不熟悉的复杂代码,要查看是否有官方文档

pwn1

  • x64 elf | full Relro , stack canary , nx
  • 功能分析:
    • store | 输入函数 ,有栈溢出 ,只可以覆盖到ret地址 ,且无结尾符,可配合leak
    • get | 输出函数 ,可以输出栈上字符串
  • 利用流程:
      1. leak canary | 绕过 stack canary
      1. 覆盖到ebp , leak main函数的返回地址 , 得到 __libc_start_main + 240 的地址
      1. 覆盖ret | 因为只能覆盖ret地址,所以需要使用 one gadget (用 __libc_start_main 计算相对偏移得出)

exp


babyfengshui

  • x86 elf | stack canary , nx
  • 功能分析:
    • 菜单
    • add
      • 分配两个chunk , 指定大小的 desc chunk和 存储desc地址及name字符串的 user chunk
      • 读入 name | 0xfc
      • 使用 edit 读入desc
    • delete
      • free *heaparray[desc] | desc
      • free heaparray[desc] | user
      • heaparray[desc] = null
    • show
      • 输出指定 index 的 name 和 desc
    • edit
      • 输入长度 size | 判断 desc + size < name
        • 即 desc 输入可到达的地址要在对应的 user chunk 之前 | 目的 防止堆溢出
      • 进行size长度的输入
  • 利用过程:
    • 通过控制堆块布局,使我们可以溢出来控制其他堆块的内容


      image.png
    • 覆盖 desc地址为 free@got 从而leak libc
    • 覆盖 free 为 system , 执行delete getshell.

exp


stack2

  • x86 elf | stack canary , nx
  • 功能分析
    • 计算器
    • 数字的增删改查
  • 漏洞点
    - 最开始初始化时 未将 总数字量限定在 100内 , 配合 scanf 的 “+”输入 , 可以leak栈地址
    - 修改 数字时 输入的index未检查,可以越界 ,造成栈溢出
  • 利用过程
    - 坑点 : hackhere 函数远程不成功 , 无/bin/bash
    - 思路1 : 利用 栈溢出配合scanf ,向可写地址(如 bss 段)输入 /bin/sh\x00 或者 $0\x00 , 然后执行system("/bin/sh\x00")
    - 思路2 : 初始化时设置较大的总数字量 , leak栈地址 , 然后通过编辑函数在栈上输入 shell命令 ,然后通过栈溢出 执行system(command)

exp


time_formatter

  • x64 elf | stack canary , nx , fortify
  • 功能分析 :
    • 菜单(设置参数后命令执行)
    • 设置参数 格式化字符串
    • 设置参数 指定时间戳
    • 设置参数 时区
      - 未对已有 时区参数的情况做处理
    • 输出 命令执行结果
    • 退出 (可选择是否 退出)
      • 漏洞点 uaf
  • 利用过程:
    • 利用uaf 和 未对已有时区做处理的机制 ,在无限制的设置时区中来设置格式化字符串
      • 设置 格式化字符串 (malloc(n))
      • 设置时区 (malloc(n))
      • 退出 (选择否 , 目的是 free上面的两个块)
      • 设置时区(消耗时区 free的块)
      • 设置时区 (使用格式化字符串free的块)
    • tip:
        1. strdup 内部使用了 malloc
        1. 各个阶段设置的字符串最好长度一样且能满足getshell的需求

exp


forgot

  • x86 elf | nx
  • 功能 :
    - 1. 输入姓名
    - 2. 输入一个字符串 (可溢出 , 因为用scanf输入,只可构造一个地址)
    - 3. 进行 n 层检测 ,不通过即调用 第 n 个 输出函数 (输出函数地址存储在栈上)
  • 漏洞利用 :
    - 栈溢出覆盖一个 检测函数地址为后门地址
    - 触发指定的函数 , 从而获得flag

exp


4-ReeHY-main-100

  • x64 elf | nx
  • 功能:
    • 菜单
    • 对于 exp 的 增删改 , 没有直接给出有实际意义的show
  • 漏洞点:
    • 增删改过程中 , index 使用的时 Int类型 , 可使用负数index,来对size数组做操作,从而拓展成堆溢出,并进行深层次利用。
  • 利用过程
    • 覆盖size数组,来为堆溢出做准备
    • add 5 个 exp , 最后一个内容为 /bin/sh\x00 ( 作为 system的参数)
    • 配合堆溢出 使用unlink 来控制 exp数组内容
    • 将 free@got 的值 覆盖为 puts@plt+6 , 从而可以泄露
      • unlink_addr - 0x10 ( n => free@got => puts@got
      • unlink_addr - 0x10 ( n => unilnk_addr -0x18 => free@got ))
    • 泄露 puts 地址 , 并且根据此计算出 system地址
    • 覆盖 free@got 为 system
    • free(4) (system("/bin/sh\x00")) getshelll
  • 防御
    - 将 index 的类型设置为 unsigned int
  • 收获
    - 了解到了一种新的思路 ( 覆盖 got表 为 plt + 6)
    - 作用 : 执行对应函数,目前最大的理解为多出leak的手段

exp


Escape_From_Jail-50

  • 本题为 python 沙箱逃逸
    ,- 关键过滤 : '.' , import , flag 和 "eval" , "excute" 等命令执行 , 看题目源码中还过滤了 chr 等字符转换方法
  • 利用到的知识点:
    • getattr 可以获得 目标对象的指定方法对象 , 从而绕过 ’.‘号的过滤
      • 举例 : os.system("ls") (error) | getattr(os , "system")("ls") (success)
    • 通过通配符 绕过对flag字符串的过滤 | 此处 多种方法
  • 获取flag payload : getattr(os , "system")("cat /home/ctf/????")

pwn2

  • 有点瓜皮了,一开始莫名其妙钻进了死胡同,以为是 house of orange , 就折腾了几个小时。。。
  • 话说 有大佬用 house of orange 的思路做出来的话 , 想学习一波。。。。
  • 这道题目主要的利用点
      1. edit 函数的堆溢出
      1. Print 函数根据 size数组中对应的值 输出对应长度的字符串
      1. New 时读入 时读入size长度的内容,不以任何字符为截断符 (可以虽输入不可见字符,或者 \x00 \n , 但是要注意被覆盖的内容的作用)
  • 利用过程
      1. 利用堆溢出 实现 chunk over extend , 从而可以 print 出 下一个 chunk的内容
      1. 通过1 的点 配合一个 unsorted bin , 实现 unsorted bin leak , 从而得到 libc 信息
      1. 通过 1 的点, 修改 freed的 fastbin , 实现 fastbin attack , 从而覆盖 malloc_hook 为 one_gadget , (不覆盖 got 表 , 因为 Full Relro , 并且开启了 pie , 没有获取到 codebase)
      1. 调用 new 触发 one_gadget 从而 getshell

exp


AUL

  • 这道题目是一个 lua 的pwn , 考察 对lua的熟悉程度和理解。。。
  • 连上远程之后 , help 输出 一段字节码 ,是 server.luac 的 字节码 | 缺少头部一个字节
    • tip :
        1. luac 文件头 1b 4c 75 61
        1. luac 对于文件字节要求严格, 一个字节都不能少。。。
  • 漏洞点:
    • 虽然禁止了一部分关键词,但是仍然可以调用内部模块,函数 , 官方wp 的方法不够彻底,adworld 的 wp 中使用 os.execute 可以执行系统命令(包括 /bin/sh)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容