当前位置: 首页 > news >正文

[BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)

查看保护

查看ida

大致意思就是输入一个数绕过if

完整exp:

from pwn import*
context(log_level='debug')
#p=process('./numbergame')
p=remote('node5.buuoj.cn',29174)p.sendline(b'-2147483648')
p.interactive()

这里输入-2147483648

因为32位int的大小范围为最小-2,147,483,648,十六进制为0x80000000

最大为2,147,483,647,十六进制为0x7FFFFFFF

最好看汇编,能清楚一点

这里让我们输入一个数,然后对它进行自身的test指令(二进制每一位都进行and操作,and操作:两个数的二进制,当一个数与另一个数进行and操作时,如果另一个数对应位是1,那这一个数的对应位保留原本的数,如果另一个数对应位为0,则这个数的对应位为0。test并不会改变寄存器的值,但会影响标志位),下面的js指令的全称是jmp if sign,如果sign位为1就会跳转,如果test的结果中符号位,也就是二进制的最高位为1就会跳转(正数与0的最高位为0,负数为1)

简单地来说就是判断它是否为负数,是就会跳转,接着进行

跳转后,会对数进行neg操作,就是补码。然后再进行test,js。判断是不是负数,是就可以getshell了。

大多数负数进行补码后都会为正数

但是在32位中,最小值-2,147,483,648(十六进制为0x80000000),补码后依旧为0x80000000,也就是它本身,所以可以绕过。具体为什么这样可以自己用二进制表示看看。

补码,正数和0的补码为本身,负数的补码为其二进制按位取反再加1。

相关文章:

  • python使用unittest进行单元测试
  • 学习Android的第十七天
  • 【二叉搜索树】【前后指针】Leetcode 501. 二叉搜索树中的众数
  • UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh
  • uniapp的h5端保存文件
  • Java中的Collection
  • 扩频通信信号的产生与接收
  • MySQL 常用优化方式
  • 学习:吴恩达:什么是神经元?神经网络如何工作?
  • idea生成WebServices接口
  • HTML超链接去下划线
  • vue3 + vite 项目可以使用纯Js开发吗?
  • Image Fusion via Vision-Language Model【文献阅读】
  • React Switch用法及手写Switch实现
  • 初学者如何学习python
  • [NodeJS] 关于Buffer
  • 【css3】浏览器内核及其兼容性
  • 10个最佳ES6特性 ES7与ES8的特性
  • CSS 专业技巧
  • Debian下无root权限使用Python访问Oracle
  • express + mock 让前后台并行开发
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java多线程(4):使用线程池执行定时任务
  • LeetCode18.四数之和 JavaScript
  • Logstash 参考指南(目录)
  • Redis学习笔记 - pipline(流水线、管道)
  • RxJS: 简单入门
  • Sequelize 中文文档 v4 - Getting started - 入门
  • springMvc学习笔记(2)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue组件定义
  • win10下安装mysql5.7
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 将 Measurements 和 Units 应用到物理学
  • 设计模式 开闭原则
  • 数据结构java版之冒泡排序及优化
  • ​TypeScript都不会用,也敢说会前端?
  • ​渐进式Web应用PWA的未来
  • ​人工智能书单(数学基础篇)
  • #、%和$符号在OGNL表达式中经常出现
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十)T检验-第一部分
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)基于IDEA的JAVA基础1
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧