-
-
[原创]看雪CTF.TSRC 2018 团队赛 第十四题 你眼中的世界
-
发表于:
2018-12-28 11:44
5586
-
[原创]看雪CTF.TSRC 2018 团队赛 第十四题 你眼中的世界
题目源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | __int64 __fastcall main( __int64 a1, char **a2, char **a3)
{
signed int v3;
unsigned int v4;
void *v5;
v3 = 5;
sub_5647BE0B4AB0();
puts ( "echo from your heart" );
do
{
__printf_chk(1LL, "lens of your word: " );
v4 = sub_5647BE0B4AF0(1LL, "lens of your word: " );
if ( v4 > 0x1000 )
{
puts ( "too long" );
exit (1);
}
v5 = malloc (v4);
__printf_chk(1LL, "word: " );
gets (v5);
__printf_chk(1LL, "echo: " );
__printf_chk(1LL, v5);
putchar (10);
--v3;
}
while ( v3 );
return 0LL;
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | __int64 __fastcall main( __int64 a1, char **a2, char **a3)
{
signed int v3;
unsigned int v4;
void *v5;
v3 = 5;
sub_5647BE0B4AB0();
puts ( "echo from your heart" );
do
{
__printf_chk(1LL, "lens of your word: " );
v4 = sub_5647BE0B4AF0(1LL, "lens of your word: " );
if ( v4 > 0x1000 )
{
puts ( "too long" );
exit (1);
}
v5 = malloc (v4);
__printf_chk(1LL, "word: " );
gets (v5);
__printf_chk(1LL, "echo: " );
__printf_chk(1LL, v5);
putchar (10);
--v3;
}
while ( v3 );
return 0LL;
}
|
猜测漏洞在gets,具体怎么利用一无所知。
然后发现函数__printf_chk 没有见过,不知道有没有print不一样的地方。
搜了一下,居然发现了跟此题神似的原题:
hctf2017 babyprintf
并找到wp一篇:
https://bbs.pediy.com/thread-222735.htm
按照此wp操作,得到了libc地址,但是原文中的vtable偏移并不知道怎么来的。
vtable_addr=libc_base+0x3BE4C0
打开libc2.24看了一下
然而再libc2.23 中并无此节__libc_IO_vtables
所以此方法gg.
用google 搜索 hctf2017 pwn unsortedbin attack,找到另外一篇wp:
https://veritas501.space/2017/12/13/IO%20FILE%20%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
其中第五部分
正是此题,wp似乎更为简单。
照此wp操作,唯一的问题是此wp中_IO_str_jumps偏移可以直接搜索符号得到,但是2.23中运行并不可以。
好在又找到一篇wp:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-12-28 11:46
被lacoucou编辑
,原因: 修改错字