美文网首页
格式化字符串漏洞学习

格式化字符串漏洞学习

作者: 小白King | 来源:发表于2019-02-09 15:20 被阅读0次

一些小技巧和知识:


image.png
image.png
image.png

计算偏移量:
找漏洞函数printf家族,在printf(s)中下断点,然后输入AAAA,在gdb中计算偏移量:
p/d (0xbbbb-0xaaaa)/4
新姿势之替换got表的真实地址:
payload = fmtstr_payload(offset ,{xxx_got:system_addr})
新姿势之任意写:payload = p32(magic_bss) + '%214c' + %7n,'%214c'的作用是输出214个字符,加上前面的地址4位,刚好是218。 新姿势之泄露内存内容:payload = p32(system_got) + "% offset x"(泄露真实地址)
%A$n,是把栈地址的内容进行修改,如果内容是地址,就改这个内容地址里面的东西

image.png
练习题:LAB7:
按照惯例分析一波,checksec,拖进ida分析:
image.png
image.png
开启栈溢出保护,但是有格式化字符串漏洞可以用。
分析逻辑大概可以知道是输入名字和密码,正确的密码是文件中的随机数,先从文件中读取出来放到password里面,自己输入的密码则放在栈的ntpr中,然后进行比较,很明显是printf的格式化字符串漏洞,介绍两种方法:第一种找到password的地址直接修改password的值为1,第二种直接泄露出password的随机值:
即可构造payload:
image.png
image.png
因为我们泄露的随机数可能 大于4位,而我们泄露的只到4位,所以有时成功不了~但是方法一是绝对可以的。
练习题LAB8:
还是按照套路和逻辑来,栈溢出保护,格式化字符串漏洞~
image.png
image.png
接下来分析逻辑:
image.png
很清晰的逻辑,要么修改magic的值,要么直接调用system函数。
在printf那里下断点,计算出偏移量为7,直接上payload:
image.png
image.png

练习题LAB9:
逻辑一样,checksec,再拖进去ida分析:

image.png
image.png
发现是在bss段
由于第一次遇见在bss段中,所以无法直接利用格式化字符串漏洞向栈中写入数据,只能利用间接地写入,在printf那里下一个断点,找到ebp的地址,作为每一次返回的使用:
image.png
来进行构造:
这里有用的就是这四条,分别是设置为ebp1、fmt7、ebp2、fmt11,而他们相对于格式化字符串的偏移分别是6、7、10、11(直接数),思路如下:
1.通过ebp_1使ebp_2指向fmt_7
2.通过ebp_2将fmt_7处的内容覆盖成printf_got
3.通过ebp_1使ebp_2指向fmt_11
4.通过ebp_2将fmt_11处的内容修改成printf_got+2
5.通过fmt_7将printf_got地址泄露出来
6.计算出system函数的地址 ,将system函数地址写入printf在got表的地址
具体做法是将 system函数地址的前两个字节写入fmt_7,后两个字节写入 fmt_11
7.执行printf函数相当于执行system函数
8.输入"/bin/sh"字符串,让system函数从栈中取参数getshell
我们一步一步地分析思路,首先%数字 image.png
image.png
image.png
image.png

在这里解释下那个str(printf_got&0xffff)操作,是获得低位的两个字节,(高位是不变的情况下),例如原操作数是printf_got=0x12345678,那么printf_got&0xffff=0x5678,

image.png
这里是因为%A n是按照累加去计数的,所以要减去之前的,才是正确的计算。还有那个while True循环,是为了确认字符全部写入,因为一次只能接受0x1000个字符,所以相当于设置了一个标志位,确保能输入完成,然后因为是%N hn,双字节写入,所以printf_got要加2,其实是类似的,把printf_got表地址写入到两个地方,第一次借助fmt7写入低位的2个字节,第二次是借助fmt11写入高位的2个字节,从而写入。

相关文章

  • 格式化字符串漏洞实验(转载)

    格式化字符串漏洞实验一、 实验描述格式化字符串漏洞是由像 printf(user_input) 这样的代码引起的,...

  • lab9

    格式化字符串漏洞,不过是有点蛇皮的格式化字符串,学到了不少新姿势 很明显的格式化字符串,但同时也可以发现,我们的输...

  • hxb2017 pwne easy format vuln

    pwntools 对格式化字符串漏洞payload的支持 这题本身没啥好记的,就是一个简单的格式化漏洞,但是有个p...

  • buuctf pwn part1

    时隔已久的学习 ciscn_2019_n_1 格式化字符串漏洞 gets是漏洞点,可以利用v1去覆盖v2的值然后获...

  • isitdtuctf_pwn_wp

    babyformat x32 elf | FULL RELRP , NX , PIE 漏洞点 : 格式化字符串 限...

  • 攻防世界 string wp

    参考:CTF-wiki格式化字符串漏洞利用 0x01寻找漏洞 -checksec -在IDA中对文件进行分析。 查...

  • 格式化字符串漏洞学习

    一些小技巧和知识: 计算偏移量:找漏洞函数printf家族,在printf(s)中下断点,然后输入AAAA,在gd...

  • Mary_Morton

    分析: 1.该题存在着格式化字符串漏洞和栈溢出漏洞,并且通过checksec可以知道开启了cannary保护和nx...

  • 今日事今日毕

    python学习: 格式化字符串:占位符%(%s表示字符串,%d表示整数等等);‘{}’.format格式化。...

  • echo3

    保护很常规,是32位的程序,还是格式化字符串漏洞,但是是存储在bss上的格式化 主程序的alloca函数用来抬栈,...

网友评论

      本文标题:格式化字符串漏洞学习

      本文链接:https://www.haomeiwen.com/subject/gsabjqtx.html