美文网首页
格式化字符串pwn200

格式化字符串pwn200

作者: Hexad | 来源:发表于2020-02-27 13:41 被阅读0次

    2017湖湘杯pwn200,还是比较经典的格式化字符串例题

    先查看一下保护机制:

    32位开启了canary和堆栈不可执行到IDA看一下主函数源码

    在sub_80485CD函数可以看到输入的数据直接进入了printf函数中,这个肯定是一个格式化字符串漏洞,进去看一下

    比较经典的利用方式,通过while循环多次利用,仔细看一下循环过程

    形如:char str[100];

                    scarf("%s",str);

                    printf(str)

    查看本机ASLR

    ldd 'which col' 查看,确定本机开启了aslr,sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"关闭ASLR

    利用思路:

    看到printf(&buf)之后

            read(buf)

            atoi(buf)

    》1利用格式化字符串漏洞的任意地址读,先泄露出puts函数的地址puts_addr。

    》2利用格式化字符串漏洞的任意地址写,去将atoi函数在got.plt表中的地址改为system函数的地址,

    》3通过read控制buf,传入”/bin/sh”,构造出system(“bin/sh”),获取shell。

    0X00泄露puts函数地址

    第六个参数,也就是格式化字符串函数的第七个参数

    计算system地址libc.symbols['system'] - libc.symbols['puts'] + u32(puts_addr)

    00X01将atoi函数在got.plt表中的地址改为system函数的地址,

    原理:

    printf("abc%nabc\n", &val);

    printf("val = %d\n", val);

    利用%n  //不输出字符,吧已经输入的字符变量写入对应整形指针参数所至变量。

    已经调试过了"AAAA"就在第7个参数,构造{addr}{适当的写入值}{%7$n}即可。

    pwntools提供了fmtstr_payload函数来自动生成格式化串。

    fmtstr_payload(参数偏移,{xxx_got_addr: system_addr})

    0X02讲bin/sh写入system

    exp exp运行结果

    相关文章

      网友评论

          本文标题:格式化字符串pwn200

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