首页 > 其他分享 >格式化字符串漏洞

格式化字符串漏洞

时间:2024-07-22 20:29:53浏览次数:13  
标签:输出 格式化 字节 p32 n% 漏洞 参数 字符串

printf常见格式化字符串

%d 整型输出(signed int)
%o 八进制整型输出
%x 十六进制整型输出
%u 十进制整型输出(unsigned int)
%c 输出一个字符
%p 打印参数地址
%s 打印参数地址指向的字符串

长度控制

%d 4字节
%hd 2字节
%hhd 1字节
%ld 大于4字节

另:%n

%n 将当前已经打印字符的个数写入参数地址处(一次性写入4字节)
%hn 2字节
%hhn 1字节
%lln 8字节

$符号:指定占位符

%<整数n>$i : 指定输出第n个参数(如果该参数是整数,则i=d,以此类推)

如:%3$c 以字符型输出第三个参数

漏洞原理

最明显的直接printf(buf),此时如果输入%p等格式化字符串,很可能造成地址泄露
此时printf(buf)和printf("%p")等效

一些理解要点(照搬mr1bw师傅的博客)

addr1=0x804C044
addr2=addr1+1
addr3=addr2+1
addr4=addr3+1

payload=p32(addr1)+p32(addr2)+p32(addr3)+p32(addr4)+ '%10$n%11$n%12$n%13$n'

前面已经看出是第10个参数,p32打包完是4字节(p64一般是8字节),4个就是16字节,16进制为0x10。也就是说当前打印字符的个数为0x10,故'%10$n%11$n%12$n%13$n'就是分别向第10、11、12、13个位置的参数地址处写入0x10
所以最后的passwd直接就是0x10101010四个连在一块
第二次提交数据,记得要转化成字符串形式

r.sendline(str(0x10101010))

标签:输出,格式化,字节,p32,n%,漏洞,参数,字符串
From: https://www.cnblogs.com/V1V0/p/18316831

相关文章

  • 片集 - 字符串 - 1
    欢迎来看“片”(的简介)由于-\(看片\)-生涯转瞬即逝,于是我选择对“\(片\)”进行一定的总结:相信你一定看懂了由于开始的时间有一点晚,就姑且认为我以后会慢慢补充吧......字典树Trie\(P8306\)\(【模板】\)\(字典树\)解:字典树要不是因为颓废,我早就把这个过了非常简单,就是......
  • 数据库中字符串连接符的使用
    在数据库操作中,字符串处理是日常工作中不可或缺的一部分。无论是构建动态查询,还是处理数据输出,字符串连接符的使用都是至关重要的。那么,如何正确地使用字符串连接符,才能高效地进行字符串操作呢? 在数据库中,字符串连接符的具体使用方法是什么?我们应该如何利用这些连接符来简化......
  • 字符串 & 哈希
    由于笔者不常使用哈希,且整理不够全面,本文只做启发。哈希寻找一个映射函数\(f\)把一个集合映射到一个有限集合,使得不同元素映射的值不同,相同元素的值相同。我们希望这个函数能让我们快速判断两个字符串是否相同。构造字符串的哈希一般构造如下:template<unsignedbas=131,u......
  • c#格式化浮点数double/float保留小数位数方式(转)
    下面的示例显示如何格式化C#中的浮点数。使用静态方法String.Format或实例方法double.ToString和float.ToString。小数点后位数[C#]//justtwodecimalplacesString.Format("{0:0.00}",123.4567);//"123.46"String.Format("{0:0.00}",123.4);......
  • 保存 Cisco 设备配置的 2 个字符串之间的区别
    我有2个变量,config1和config2保存Cisco设备在2个不同时间点的运行配置。运行配置示例:version12.3noservicepadservicetimestampsdebugdatetimemsecservicetimestampslogdatetimemsecnoservicepassword-encryption!hostnameretail!boot-star......
  • c++中字符串之string和char
    c++string初始化的几种方式相对于C#来说,c++中string的初始化方式真的非常多,比如以下都可以用来初始化string:usingnamespacestd;intmain(){ stringstr1="test01";//直接赋值 stringstr2(5,'c');//结果:str2='ccccc',以length为长度的ch的拷贝(即length个ch) ......
  • Java中的代码格式化管理
    大家好,我是城南。在Java开发中,代码格式化是一项至关重要的技能,不仅能提升代码的可读性,还能在团队协作中保持代码的一致性。今天,我们就来深入探讨Java中的代码格式化管理,让你的代码更加优雅、整洁。什么是代码格式化?代码格式化就是按照一定的规则对代码进行排版和整理,使其......
  • Nexpose v6.6.261 for Linux & Windows - 漏洞扫描
    Nexposev6.6.261forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,releaseJul17,2024请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • 系统内核溢出漏洞提权
    介绍溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候在缓冲区执行的错误代码,所以叫缓冲区溢出漏洞。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。成功地利用缓冲区......
  • Redis底层数据结构-简单动态字符串SDS
    简单动态字符串(simpledynamicstring,SDS)。Redis没有直接使用C语言传统的字符串,而是自己构建了一种简单动态字符串(SDS)的抽象类型。C字符串只会作为字符串字面量(stringliteral)用在一些无须对字符串值进行修改的地方。实现sds.h/sdshdrstruct__attribute__((__packed__)......