0x00 前言
大家好,最近产出有点少真是不好意思毕竟我太菜了,以后得加倍学习努力成为赛博卷王!
其实我是一个根本不懂技术的人,二进制我也是随便鼓捣的,大概能理解一些这样子。最近一直在试着挖皮卡丘,因为皮卡丘核心的东西都在二进制里,所以也不得不搞起了逆向。搞了段时间有点心得了想分享一下我的一些想法。简单的说,我目前认为,抛开复杂的pwn不讲,大部分时候逆向一个没有过度反调试和混淆的二进制文件整体思路和操作上是和代码审计一样的。所以我觉得对于大部分人来说简单学一学,也能挖到不少rce。由于我比较菜,所以有些东西可能讲错了或者是讲的皮毛,别太深究。这篇文章主要是给不太懂但是又想挖一挖的人看的。
0x01 前期准备
-
准备IDA 其实也没有太多要整的,直接搞一个ida就行。之前市面上有流传着ida7.5sp3的破解版本,那个拿来用就好了。如果没有的话老一点也可以,反正我们一般人用不到太多高端功能的。 -
虚拟机 搞几个虚拟机,比如ubuntu18、win10之类的。 -
选目标 选定一个要挖的目标,客户端或者服务端都可以。
0x02 静态分析
静态分析的时候我们只需要把二进制文件用ida打开就行了,这个有手就行就不多说了。
比如这样的界面,打开就行了。先简单介绍一下几个主要用到的东西。
1 F5伪C代码
通常我们不会直接去看冗长的汇编代码,为了方便快速的大致了解程序逻辑可以使用F5快捷键在汇编界面的时候按一下F5就会额外打开一个新的伪代码页面,如下图:
这些代码并不是真正的C代码,只是IDA根据汇编分析出来辅助阅读的,里面经常会有很多细节错误看起来十分怪异,所以在看起来脑抽的时候可以切回到汇编界面重新定位到看不懂的地方再看汇编。这个伪代码在一般情况下可以支持如函数跳转、变量的跳转,通常只要双击你要进入的函数名就行,想退回来可以点左上角的返回箭头。这一点上的操作和一般的IDE里看代码是差不多的就不细说了。另外我们还经常会想知道某个函数在哪里被哪些函数调用,这个在ida里叫做交叉引用。通过单击想要查找的函数然后按下快捷键X,就会弹出其交叉引用列表,然后你去选择要看哪个就行。这种方式同样适用于变量,如图:
2 string窗口
3 函数窗口
函数窗口一般就在左边
4 常用函数
我们还可以去搜一些常见的危险函数,比如执行命令的system()函数,通常在这里很容易出现命令注入。
0x03 动态调试
因为伪代码有时候实在是抽象,而且很多数据的访问都是采用指针+偏移的方式,有时候很难根据上下文来判断到底是什么,比如:
-
ida来启动进程进行调试 -
attache到已经启动的进程上去,这种通常不太稳定
根据远近又分为:
-
local调试即本地调试 -
remote即远程调试
其实没啥子的,简单演示一下好了
效果:
0x04 简单审计
静态和动态大致操作都讲过了,当我们掌握上面所讲的一些基本操作技巧后基本能满足绝大部分场景。那么作为web选手必然是会一定的web代码审计的,在ida这顿操作后接下来就是暗示自己现在用的是IDEA看的是JAVA代码就行了,我们可以审计比如:
-
权限校验 -
加解密算法,重要token加密构成 -
危险函数使用导致执行系统命令 -
sql注入 -
数据流的过滤处理 -
任意读写文件
大致上也就看这些吧,如果有RCE肯定看RCE,没有RCE看越权看注入看读写文件。一般的服务端二进制多为CGI程序,而这种CGI程序多半是出现在XXX设备比如防火墙,因为这些设备需要和系统底层的功能进行交互所以用C来写也很常见,又由于和系统底层交互所以会经常性使用system之类的函数来拼接系统命令。这就给了我们很多个命令注入的可能性。说到这里懂的都懂懂懂了吧?web选手从这个角度来切入二进制的话,还是可以卷很多东西的。
本文始发于微信公众号(赛博回忆录):web选手如何快速卷入二进制世界
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论