CTFshow-pwn入门-前置基础pwn26-pwn28

13 篇文章 10 订阅

什么是ASLR

大多数的攻击都基于这样一个前提,即攻击者知道程序的内存布局,需要提前知道shellcode或者其他一些数据的位置。因此,引入内存布局的随机化能够有效增加漏洞利用的难度,其中一种技术就是ASLR(Address Space Layout Randomization)。ASLR提供的只是概率上的安全性,根据用于随机化的熵,攻击者有可能幸运地猜到正确的地址,有时攻击者还可以爆破。

在Linux上,ASLR的全局配置/proc/sts/kernel/randomize_va_space有三种情况:0表示关闭ASLR;1表示部分开启(将mmap的基址,stack和vdso页面随机化);2表示完全开启(在部分开启的基础上增加heap的随机化)。如下:
在这里插入图片描述
我们可以修改/proc/sts/kernel/randomize_va_space文件的值来配置ASLR。

pwn26

在这里插入图片描述
我们还是先下载pwn文件托到虚拟机加可执行权限使用checksec命令查看文件信息。
在这里插入图片描述
pwn文件是64位的,直接拖进ida64反编译看源码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  void *ptr; // [rsp+0h] [rbp-10h]
  void *v5; // [rsp+8h] [rbp-8h]

  ptr = malloc(4uLL);
  v5 = dlopen("/lib/x86_64-linux-gnu/libc.so.6", 258);
  puts(s);
  puts(asc_4008F0);
  puts(asc_400970);
  puts(asc_400A00);
  puts(asc_400A90);
  puts(asc_400B18);
  puts(asc_400BB0);
  puts("    * *************************************                           ");
  puts(aClassifyCtfsho);
  puts("    * Type  : Linux_Security_Mechanisms                               ");
  puts("    * Site  : https://ctf.show/                                       ");
  puts("    * Hint  : Please confirm your ASLR level first !                  ");
  puts("    * *************************************                           ");
  puts("Here is your ASLR level:");
  system("cat /proc/sys/kernel/randomize_va_space");
  puts("If the result is 0, then you get the correct flag!");
  puts("If not,you will get a fake flag!");
  printf("flag is :ctfshow{%p", main);
  printf("_%p", system);
  printf("_%p", ptr);
  printf("_%p", v5);
  puts("}");
  free(ptr);
  return 0;
}

在这里插入图片描述
我们从这几条语句可以得出,大概逻辑就是先读取我们系统中/proc/sys/kernel/randomize_va_space文件的内容,若里面的内容是0,那接下来输出的flag就是正确的,如果文件的内容不是0,那么输出的flag就是错的。

那好,我们先看我们系统中的/proc/sys/kernel/randomize_va_space文件的内容是否为0。

cat /proc/sys/kernel/randomize_va_space

在这里插入图片描述
看到我们的内容不是0,而是2。那么我们就得把它改为0。

注意,我们要更改/proc/sys/kernel/randomize_va_space,就必须将用户切换到root,不然是改不了的。

su root
echo 0 > /proc/sys/kernel/randomize_va_space
./pwn

在这里插入图片描述
这样我们就得到了正确的flag。

pwn27

在这里插入图片描述
我们还是先下载pwn文件托到虚拟机加可执行权限使用checksec命令查看文件信息。
在这里插入图片描述
还是64位的,我们还是拖进ida64反编译一下。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  void *ptr; // [rsp+0h] [rbp-10h]

  ptr = malloc(4uLL);
  dlopen("./libc-2.27.so", 258);
  puts(s);
  puts(asc_4008D0);
  puts(asc_400950);
  puts(asc_4009E0);
  puts(asc_400A70);
  puts(asc_400AF8);
  puts(asc_400B90);
  puts("    * *************************************                           ");
  puts(aClassifyCtfsho);
  puts("    * Type  : Linux_Security_Mechanisms                               ");
  puts("    * Site  : https://ctf.show/                                       ");
  puts("    * Hint  : Please confirm your ASLR level first !                  ");
  puts("    * *************************************                           ");
  puts("Here is your ASLR level:");
  system("cat /proc/sys/kernel/randomize_va_space");
  puts("If the result is 0 or 1, then you get the correct flag!");
  puts("If not,you will get a fake flag!");
  printf("flag is :ctfshow{%p", main);
  printf("_%p", system);
  printf("_%p", ptr);
  puts("}");
  free(ptr);
  return 0;
}

在这里插入图片描述
这道题目相较于上道题目,是/proc/sys/kernel/randomize_va_space这个文件的内容为0或者1都可以得到正确的flag。由于我们在上到题目中已经把/proc/sys/kernel/randomize_va_space这个文件中的内容改为了0,所以我们直接运行pwn文件就能拿到flag了。
在这里插入图片描述

pwn28

在这里插入图片描述
我们还是先下载pwn文件托到虚拟机加可执行权限使用checksec命令查看文件信息。
在这里插入图片描述
还是64位的,我们还是拖进ida64反编译一下。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  void *ptr; // [rsp+0h] [rbp-10h]

  ptr = malloc(4uLL);
  dlopen("./libc-2.27.so", 258);
  puts(s);
  puts(asc_4008A0);
  puts(asc_400920);
  puts(asc_4009B0);
  puts(asc_400A40);
  puts(asc_400AC8);
  puts(asc_400B60);
  puts("    * *************************************                           ");
  puts(aClassifyCtfsho);
  puts("    * Type  : Linux_Security_Mechanisms                               ");
  puts("    * Site  : https://ctf.show/                                       ");
  puts("    * Hint  : Please confirm your ASLR level first !                  ");
  puts("    * *************************************                           ");
  puts("Here is your ASLR level:");
  system("cat /proc/sys/kernel/randomize_va_space");
  printf("flag is :ctfshow{%p", main);
  printf("_%p", system);
  puts("}");
  free(ptr);
  return 0;
}

在这里插入图片描述
这道题目比前两道题好像还简单,什么限制都没有,直接运行就能拿flag,天大的好事呀!!!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们de4月天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值