1、格式化字符串漏洞
题目:实时数据监测
链接:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=1&id=4913&page=1
用IDA打开二进制文件,找到main()函数->locker()函数->imagemagic(&s)函数。
我们可以发现该函数中存在格式化字符串漏洞,只要key的值为35795746就会触发漏洞。
格式化字符串%n,它的功能是将%n之前打印出来的字符个数,赋值给一个变量。
编写脚本:
1 | from pwn import * |
2、栈溢出漏洞
题目:forgot
链接:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=1&id=4703&page=1
这道题有两个关键点,main()函数中,(*(&v3 + –v14))()以及地址0x080486cc,只要(&v3 + –v14)的值为0x080486cc,就能输出flag。
编写脚本:
1 | from pwn import * |
3、释放重引用(UAF)漏洞
题目:time_formatter
链接:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=1&id=4832&page=1
在case4的情况下,可以看到当ptr=“;/bin/sh;”时,才能获得shell。
但是在case1中的sub_400CB5()函数,会对ptr的输入格式进行严重,只允许输入”%aAbBcCdDeFgGhHIjklmNnNpPrRsStTuUVwWxXyYzZ:-_/0^# “之中的字符。
ptr和timezero指向同一块堆,所以可以先分配内存给ptr,再释放,再分配内存给timezero,输入“;/bin/sh;”。
编写脚本:
1 | from pwn import * |