漏洞银行逆向教程4

Author Avatar
kabeor 2月 01, 2018

逻辑运算指令和控制运算指令

63fd8d918cd8ea5285439cb309e7fe8f.png
a6a4e72be8e55340cdbca815edb6b817.png
5661149513846370d7c53a1ac88a6e82.png
b16f1d304b358fb75d828006a73fad4f.png
c555a83ea5081143a7e1f8d6441a2af8.png
531713680f5fa45ea0c439d032af6184.png
0ad498b4dca6ad757235ca477ce31610.png

算数/逻辑左移相当于乘2,算数右移相当于除以二

61c5dfb5d5204949d76e68e81294612d.png
e6a4d9d97f41032f5832762ec7246bae.png
5f9bb2b505c48b4f0d2051c339ad1760.png

串操作和处理器控制指令

819ec01de9178d77352c581a8d3a6929.png

串传送指令:

b28b8e56429950c4f6f100b51a693681.png
7fcd219e6c8213e0da8e438c5ea63b20.png
cc8784dd8dd753039dfc7f56a21c2f00.png
26ddd3baabf7be9b0a8f42db219608a2.png
2e053187c3b4516ee5d316ea6b031272.png
e44a58fff2ba844719d1232dddcc1d35.png

加密解密与二进制漏洞

栈溢出与shellcode编写

1,栈

7af242ad80ef0eedc4d8cb30390a082f.png

出栈:后进的先出

堆和栈的区别:
  一、堆栈空间分配区别:
  1、栈(操作系统):由操作系统自动分配释放
,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  2、堆(操作系统):
一般由程序员分配释放,
若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
  二、堆栈缓存方式区别:
  1、栈使用的是一级缓存
他们通常都是被调用时处于存储空间中,调用完毕立即释放;
  2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
  三、堆栈数据结构区别:
  堆(数据结构):堆可以被看成是一棵树,如:堆排序;
  栈(数据结构):一种先进后出的数据结构。

4f5bc5f4976719177ea2b3bd0c245eae.png
86868fb31754cae5ab910a3f2fc932a1.png

Shellcode一般作为数据发送给服务端造成溢出,不同数据对数据要求不同,因此,Shellcode也不一定相同。

缓冲区溢出攻击原理

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:

void function(char *str) {

char buffer[16]; strcpy(buffer,str);

}

上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在像strcpy这样的问题的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf()等。

当然,随便往缓冲区中填东西造成它溢出一般只会出现分段错误(Segmentation
fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。

From https://kabeor.github.io/漏洞银行逆向教程4/ bye

This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接:https://kabeor.github.io/漏洞银行逆向教程4/