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

ISG2015

  一天的成果。

Re300 是男人就下一百层

  一个64位的程序,放到IDA里的话,IDA就会分析不动,这样就把人给下着了。objdump –d re300 > output,这样拿到汇编代码,大概在120M左右,代码量很大。

  拿到vim里分析,发现代码很简单,读入数据后,一直在判断判断输入数据的正确性,如果读入的数据不正确,就结束。如果一直正确的话,在程序的结尾,

  

  jmp *%rsp 也就跳到了我们输入数据的地方,也就是说我们输入的数据被当作指令又被执行了,在调试时,我直接设置rip到栈顶,发现如果输入正确的话,输入的内容确实可以当作代码执行,代码的风格和第一次objdump出来的代码非常类似。然后,突然我明白了题目的奥秘,输入的数据被当作代码执行,被执行的代码又要求输入数据,数据又被当作代码执行,一直循环下去,就像个洋葱一样一层一层的。

  我拿到了objdump出来的汇编代码,写了一个脚本然后处理下就得到了应输入的数据。

  

 

  第一轮过后,生成的数据3M多,当我尝试调试的时候,发现read系统调用一次读不了那么多数据。所以我干脆不调了,直接又写了下一个脚本来分析。

  

  这样当第8轮还是第9轮时,输出只剩不倒1K了,我这时候直接将数据发送到栈顶,并调整rip到那个栈顶,这样,稍微调试了下,我就知道看到flag了。最后我又用python生成了下flag。

Lol

  这道题目主要是android native 层的调试。Java的代码很简单。

 

  Java_com_example_crackme2_MainActivity_getflag函数很复杂,但是经过阅读,发现这些代码就是在扰乱分析者。

  

  输入的字符串,在到达en函数前,看似很复杂的处理,其实是在扰乱分析。调试时,发现en的参数inputs就是用户输入的参数,第二个参数addr就是用来传判断结果的(通过分析en函数知道的)。

     所以重点就放到了en函数里。en函数也是很复杂,但是,我注意到了几点东西。

  我看到了两个对输入处理的地方,就是前两个图。看到了对输入处理后判断的两处地方。因此,明白了大概的意思,也就是输入的每一位都经过两个处理方法的某一种(但是我不知道哪一种)进行了处理。我索性写了个脚本,把这两个运算的都跑了下。脚本如下:

  跑出的效果呢?

  

  

  仔细一看,就知道了,隔一个字符使用其中一个处理方法,所以将两个输出交叉读取,就拿到flag了。

Forest

  只有java代码,代码量也不大,稍微读了下,就知道意思了。程序将输入使用三个简单的加密运算加密后,拼接在一起,然后做判断。

  

  密文的长度为18,起初我以为输入的长度为6,这样三个加密算法的加密后拼接刚好18个字符。但是我发现加密算法3应该是base64,但是base64里不会出现’{‘字符。晕了半天,最后看到最终bh函数check的时候,只取了至多前18个字符,突然想到,输入的长度必须大于6。第二个算法是一个置换算法,也不会产生’{‘字符,因此确定了输入的长度就是18,也就是说密文是由第一个算法产生的。后两个算法都是干扰分析的。

  随后分析了下第一个算法,发现第一个算法和rot13是相似的。即E(E(a))=a。所以直接抠出代码,编译执行,得到flag。

  

Echo

  这个是赛后看的,题目思路很清晰,一看就是个格式化字符串洞。但是有一点就是程序是pie的,每次加载的地址不固定。调试时为了方便调试我首先把alsr给关了。通过该漏洞可以泄漏出__libc_start_main函数的地址,也就直接泄漏了libc.so里想要的/bin/sh字符串和system的地址。

 

  这样的话,我就可以任意地址写将返回地址改为system的地址,把参数改为/bin/sh的地址,函数一退出就拿到shell了。

  

  Poc

 

转载于:https://www.cnblogs.com/wangaohui/p/4898863.html

相关文章:

  • Oracle常见SQL语句
  • Python模块Scrapy导入出错:ImportError: cannot import name xmlrpc_client
  • php的lareval框架配置出错
  • 九度OJ 1160:放苹果 (DFS)
  • 58同城技术委员会执行主席沈剑:好的架构是进化来的,不是设计来的
  • php 下载doc文档
  • Sterling B2B Integrator与SAP交互 - 01 简介
  • 若烟火云朵只给你一人
  • Daily Scrumming* 2015.10.29(Day 10)
  • 一个bug
  • java IO存在问题
  • eclipse 弹出智能提示、代码自动换行
  • 从一个Fragment跳转到另一个Fragment
  • Hdu 5100 Chessboard
  • [国嵌攻略][051][NandFlash原理解析]
  • 【刷算法】从上往下打印二叉树
  • Apache的基本使用
  • Git同步原始仓库到Fork仓库中
  • JavaScript 奇技淫巧
  • Java-详解HashMap
  • jdbc就是这么简单
  • MaxCompute访问TableStore(OTS) 数据
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • php面试题 汇集2
  • Python进阶细节
  • 给github项目添加CI badge
  • 工作手记之html2canvas使用概述
  • 突破自己的技术思维
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 写给高年级小学生看的《Bash 指南》
  • 新手搭建网站的主要流程
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $L^p$ 调和函数恒为零
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET Core 2.1路线图
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net core控制台应用程序初识
  • .net 获取url的方法
  • .NET命名规范和开发约定
  • .NET微信公众号开发-2.0创建自定义菜单
  • :not(:first-child)和:not(:last-child)的用法
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [android] 看博客学习hashCode()和equals()
  • [Asp.net mvc]国际化
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C++基础]-初识模板
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [IE9] GPU硬件加速到底是实用创新还是噱头
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [JS]Math.random()随机数的二三事