很少做pwn,之前也只懂点rop,现在跟着练练pwn的堆利用吧,pwnable.tw上的一题hacknote,比较纯粹的uaf题目,还好不久前看了点glibc内存管理的东西,可以派上用场了。
逆向很轻松,那为什么不直接给源码呢。。。根据add_note函数很容易了解note的结构体特征
unsigned int add_node()
{
note *v0; // ebx
signed int i; // [esp+Ch] [ebp-1Ch]
int size; // [esp+10h] [ebp-18h]
char buf; // [esp+14h] [ebp-14h]
unsigned int v5; // [esp+1Ch] [ebp-Ch]
v5 = __readgsdword(0x14u);
if ( dword_804A04C <= 5 )
{
for ( i = 0; i <= 4; ++i )
{
if ( !note_list[i] )
{
note_list[i] = (note *)malloc(8u);
if ( !note_list[i] )
{
puts("Alloca Error");
exit(-1);
}
note_list[i]->put_content = (int)note_puts;
printf("Note size :");
read(0, &buf, 8u);
size &#