pwnable.tw wp

start

分析: ret2shellcode

流程:传入shellcode 并且执行

要点:

  • 1.得到溢出,劫持控制流,需要的偏移和可以利用得长度
    根据ida的反编译结果中 输入函数的代码可得, 实际最大输入字符数0x3c(60) ,程序预计最大输入长度0x14(20),所以需要的偏移是0x14 ,可以利用的长度是 0x3c - 0x14 (40)

  • 2.选择可以使用的shellcode
    shellcraft.sh() 生成的shellcode长度位41 超过了可以利用的长度,所以选择了另一个长度位21的shellcode

  • 3.获取shellcode的地址
    因为gdb调试的结果中栈地址不断变化,所以不能采用蒸米教程中的内存溢出,并用gdb分析结果文件的办法获取shellcode地址。并且因为该题中有 push esp 将栈地址保存入栈中 和 sys_write(1 , esp , 0x14) 输出栈顶值得函数调用,因而选择在程序中泄露栈地址 , 然后推算shellcode地址
    tip: 获得的esp地址 是 push esp 之前的 栈顶地址 , 所以 当前栈顶地址为获取的esp地址 - 4 , 所以 addr_shellcode地址 = (addr_esp - 4 ) + 0x14 + 4 = addr_esp + 0x14

exp


orw

  • file :32位 程序
  • checksec : statck canary
  • 题目提示 : Read the flag from /home/orw/flag. Only open read write syscall are allowed to use.(即 在只允许使用open read write 的条件下 获取 flag )
  • 分析过程 :运行可以看到 give me your shellcode ,结合 ida 反汇编的结果确认, 该程序会直接执行输入的shellcode
  • 考点 : 手动编写shellcode的能力
  • 额外知识 :
    1. 限制可以使用的syscall 的方式 , seccomp 是一种__ linux kernel __从 2.6.23 版本开始所支持的一种安全机制。主要功能是限制系统调用。
    1. syscall 的传参方式 , 32 位下 eax 为系统调用号 , ebx , ecx , edx 依次为参数 1 , 2 , 3 (c 中 从左向右) , 64位 rax 为 系统调用号 , 其余传参 顺序从左向右 , rdi rsi rdx rcx r8 r9 . | 03 read , 04 write , 05 open
    1. 输入字符串一定要加 \x00 来标识字符串结尾
      exp

calc

  • 文件信息:
    - 静态链接
    - nx | canary
    - elf文件中 无 system函数 和 "/bin/sh\x00"
  • 功能 :计算器 计算输入的表达式
  • 详细流程 :
      1. 过滤输入 | 只允许 + - * / % 和 数字进入
      1. 初始化数字栈
      1. 处理表达式
        • 3.1 检测到非数字(操作符)后 将 操作符前的字符串 (input_str[ last_pos : now]) 转化为数字存储进数字栈
        • 3.2 检测该数字是否为0 (防止 divison by 0)
        • 3.3 检测操作符 下一个字符是否是数字 (防止连续使用多个操作符)
        • 3.4 检测操作符栈是否有值
          - 3.4.1 无 | 将当前操作符压入栈
          - 3.4.2 有 | 判断操作符优先级
          - 3.4.2.1 当前操作符优先级高于栈顶操作符 | 将 当前操作符压入栈
          - 3.4.2.2 当前操作符优先级 <= | 执行栈顶操作符 并将当前操作符压入栈
          - 3.4.2.3 default | 执行栈顶操作符
    • 漏洞点 :

      • 执行操作符时未检测数字栈中是否有数字 , 如果第一个数字不填入,就可以手动改写数字栈的索引值 , 从而造成栈上相对地址的任意读写

      漏洞代码 ida 伪代码 如下图:

      image.png
  • 漏洞利用思路:
    • 因为 题目文件 是 静态链接 且 没有 system函数 和 "/bin/sh\x00" , 所以考虑 使用syscall | ret2syscall
    • 调用read 输入 /bin/sh\x00 ,并执行 execve("/bin/sh\x00" , null , null) 从而 getshell

exp


dubblesort

  • 这道题目基本都是参考大佬们的wp做出来的,学习到了不少
    • 参考wp
      1. scanf("%u") 输入不合规 时 可以不修改目标地址的值 ,处理输出不当会造成泄露
      • 不合规输入 "+" "-" 会不修改并泄露 | 本题使用了 fflush 处理了输出,所以没有泄露
      • 不合规输入 如 "ab " 会占用输入缓冲区(会阻碍其他scanf的执行),直到 正确处理了这个输入
      1. 栈中 libc相对地址 与 libc_base 的偏移和 libc的版本有关 | readelf -S 查看段偏移
      1. one_gadget可能全都不适用
      1. 如果本地运行的栈相关值和远程运行的不同,记得在所有需要的地方做出调整 | 本地 一个溢出的填充 和远程不同 让我多看了一个小时。。。
  • 功能 :
    • 输入指定数量个数字 , 排序并输入 (小 -> 大)
  • 漏洞点
    • 输入的数字数量不限制造成栈溢出
    • name的输入未加结尾符导致 leak
    • scanf(“%u”) 通过 "+" 的输入可以不修改目标地址的值造成 绕过canary
  • 利用过程
      1. 利用 name leak处 libc的相关地址,从而获取 system 和 "/bin/sh\x00" 的地址
      1. 利用 scanf("%u") 的点 绕过 canary
      1. 利用 输入的数字 覆盖 ret地址 之后的值 来执行 system("/bin/sh\x00") getshell

exp

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

推荐阅读更多精彩内容

  • 0. 引言 如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理-...
    pandolia阅读 14,052评论 13 27
  • 业余花了几周时间,终于把代码inject到linux runtime process,做为10几年工作经验的JAV...
    clive0x阅读 847评论 0 0
  • [xman] level0 file : 64位 程序 静态链接加载函数 checksec : NX 开启(堆栈不...
    fantasy_learner阅读 465评论 0 0
  • 年芳二十,谈过两任男朋友,可笑的是两任都是一个月结束,理由无非就一个男友太粘人,以前一直觉得是他们的错,粘的...
    吃可爱多长大的小可人阅读 252评论 0 0
  • 利用看板对孩子进行时间记录和管理 看板:视觉化的行为管理系统。直观,色彩化,可视化,是用孩子,甚至整个家庭。 针对...
    cai123阅读 198评论 0 0