殽杂IDA F5的一个小技能-x86 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

殽杂IDA F5的一个小技能-x86

申博_新闻事件 申博 79次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

平级函数的修正

源码、编译

测试顺序源码以下:

vuln只是定名习惯了…并非指破绽函数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int func(int a) {
    int num = a; 
    printf("%d",a);
    getchar();
    getchar();
    return 1;
}

int func_wrapper(int b) {
    func(b+1); 
    int num = b;
    printf("%d",num);
    getchar();
    getchar();
    getchar();
    return 2;
}


int vuln(int num){
    printf("%d",num);
    return 0xff;
}

int main(int argc, char** argv) {
    func_wrapper(1);
    vuln(2);
    return 0;
}

顺序没有甚么迥殊的,注重getchar()因为没有参数,就是用来nop掉然后最先演出的,也不会影响客栈均衡

编译:gcc -m32 main.c -o test

编译事后IDA翻开,基本是如许

殽杂IDA F5的一个小技能-x86

因为没有开优化,以是esp的加加减减没有被兼并

patch

因为x64fastcall,前几个参数用寄存器传参;而x86则满是用栈传参

本来vuln函数显现是如许的(这两个就是”平级函数”)

殽杂IDA F5的一个小技能-x86

目的是让它显现成vuln(v3)这类情势,以到达一些滋扰的结果

我们存眷这段汇编

殽杂IDA F5的一个小技能-x86

func_wrapper的参数是1,被push到栈中

vuln函数挪用之前先收回了本来参数1的栈,又压入了本身的参数2

我们能够把vuln的参数改成1,好比如许

去掉了一个push 2,对应的,多sub esp,4

殽杂IDA F5的一个小技能-x86

生存patch版本,从新翻开

显现已变成了如许

殽杂IDA F5的一个小技能-x86

gdb-peda中调试一下,本来能够显现出Guessed arguments

殽杂IDA F5的一个小技能-x86

如今虽然栈上的参数被我们改成了1,但也只是改了一个数值,而Guessed arguments已显现错误了

Vivotek远程栈溢出漏洞分析与复现

0x01 前言 2017年11月披露的vivotek的一个栈溢出漏洞,漏洞发生在其固件中的httpd服务,其未对用户post的数据长度做校验,导致攻击者可以发送特定的数据使摄像头进程崩溃,甚至任意代码执行。这边看到后觉得挺有意思的,打算复现下。 贴一下漏洞作者放出的poc 再贴一下影响版本 : CC8160 CC8370-HV CC8371-HV CD8371-HNTV CD8371-HNVF2 FD8166A
FD8166A-N FD8167A FD8167A-S FD8169A FD8169A-S FD816BA-HF2
FD816BA-HT FD816CA-HF2 FD8177-H FD8179-H FD8182-F1 FD8182-F2
FD8182-T FD8366-V FD8367A-V FD8369A-V FD836BA-EHTV FD836BA-EHVF2
FD836BA-HTV FD836BA-HVF2 FD8377-HV FD8379-HV FD8382-ETV FD8382-EVF2
FD8382-TV FD8382-VF2 FD9171-HT FD9181-HT FD9371-EHTV FD9371-HTV
FD9381-EHTV FD9381-HTV FE8182 FE9181-H FE9182-H FE9191
FE9381-EHV FE9382-EHV FE9391-EV IB8360 IB8360-W IB8367A
IB8369A IB836BA-EHF3 IB836BA-EHT IB836BA-HF3 IB836BA-HT IB8377-H
IB8379-H IB8382-EF3 IB8382-ET IB8382-F3 IB8382-T IB9371-EHT
IB9371-HT IB9381-EHT IB9381-HT IP8160 IP8160-W IP8166
IP9171-HP IP9181-H IZ9361-EH MD8563-EHF2 MD8563-EHF4 MD8563-HF2
MD8563-HF

殽杂IDA F5的一个小技能-x86

子函数改父函数

很明显方才的技能在动态调试时会原形毕露,IDA F5虽然没有胜利辨认参数,然则也给出了顺序的大抵逻辑,此次我们用一些更庞杂的方法来殽杂滋扰

源码、编译

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int func() {
    getchar();
    getchar();
    getchar();
    return 1;
}

int func_wrapper(int num) {
    printf("%d",num);
    func();
    printf("%d",num);
    return 2;
}

int main(int argc, char** argv) {
    func_wrapper(1);
    return 0;
}

编译:gcc -m32 main.c -o test

我们的目的是让func_wrapper中的两次printf("%d",num);输出分歧的值

patch1

症结的patchfunc()里,预留的3个getchar()就是nop后留下空间演出的

殽杂IDA F5的一个小技能-x86

patch2

我们调试一下,看看nop时的esp的值,再依据func_wrapper的参数在栈上的地点,算出偏移

断在printf("%d",num);参数入栈前,发明0xffffcfd0处为参数

殽杂IDA F5的一个小技能-x86

跟进,进入func()的一堆nop

此时esp的值0xffffcfb0

殽杂IDA F5的一个小技能-x86

算出esp间隔父函数的参数偏移为0x20

patch3

我们在func中修正以下

殽杂IDA F5的一个小技能-x86

中心改掉的三行就是把父函数printf的参数改掉了

本来运行会输出两个1,然则因为我们把第二次输出的参数改成了2,输出以下

殽杂IDA F5的一个小技能-x86

半途调的时刻有很多小问题…

此时,IDA翻开,func函数已没法F5

func_wrapper中也看不出我们在func里做了甚么四肢

殽杂IDA F5的一个小技能-x86

总结

道理不难理解,现实上手作为花指令单靠patch明显效力太低也轻易被发明

上次x64的技能,我夜影老大给了一个C言语内联汇编在庞杂函数中悄咪咪内联传参的发起,以后会试一下

别的,斟酌递归函数,若是也在内层把外层的参数改了,可能会让人疯掉…没有敢去实验

好比用一个随机数函数,加上内联汇编,相符某前提就改外层参数,栈回溯时会非常庞杂


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明殽杂IDA F5的一个小技能-x86
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址