首页 > 其他分享 >Stack Smashing

Stack Smashing

时间:2022-09-27 01:33:19浏览次数:54  
标签:__ puts libc Smashing 地址 argv flag Stack

Stack Smashing

当canary被覆盖后,会call到__stack_chk_fail打印argv[0]这个指针指向的字符串,默认是程序的名字,如果我们把它覆盖为其他的地址时,它就会把其他内存地址的信息给打印出来

Example:wdb2018_guess

Analyze

Arch:     amd64-64-little
RELRO:    Partial RELRO
Stack:    Canary found
NX:       NX enabled
PIE:      No PIE (0x400000)
This is GUESS FLAG CHALLENGE!
Please type your guessing flag
123
You should take more effort to get six sence, and one more challenge!!
Please type your guessing flag

以上是程序开启的一些保护和大概的流程

main
__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  __WAIT_STATUS stat_loc; // [rsp+14h] [rbp-8Ch] BYREF
  __int64 v6; // [rsp+20h] [rbp-80h]
  __int64 v7; // [rsp+28h] [rbp-78h]
  char buf[48]; // [rsp+30h] [rbp-70h] BYREF
  char s2[56]; // [rsp+60h] [rbp-40h] BYREF
  unsigned __int64 v10; // [rsp+98h] [rbp-8h]

  v10 = __readfsqword(0x28u);
  v7 = 3LL;
  LODWORD(stat_loc.__uptr) = 0;
  v6 = 0LL;
  sub_4009A6(a1, a2, a3);
  HIDWORD(stat_loc.__iptr) = open("./flag.txt", 0);
  if ( HIDWORD(stat_loc.__iptr) == -1 )
  {
    perror("./flag.txt");
    _exit(-1);
  }
  read(SHIDWORD(stat_loc.__iptr), buf, 0x30uLL);
  close(SHIDWORD(stat_loc.__iptr));
  puts("This is GUESS FLAG CHALLENGE!");
  while ( 1 )
  {
    if ( v6 >= v7 )
    {
      puts("you have no sense... bye :-) ");
      return 0LL;
    }
    if ( !(unsigned int)sub_400A11() )
      break;
    ++v6;
    wait((__WAIT_STATUS)&stat_loc);
  }
  puts("Please type your guessing flag");
  gets(s2);
  if ( !strcmp(buf, s2) )
    puts("You must have great six sense!!!! :-o ");
  else
    puts("You should take more effort to get six sence, and one more challenge!!");
  return 0LL;
}

可以看到通过gets来接收变量s2,也就是用户输入,然后与buf(即flag)进行compare,如果相同则输出""You must have great six sense!!!!

标签:__,puts,libc,Smashing,地址,argv,flag,Stack
From: https://www.cnblogs.com/m1nus/p/16733131.html

相关文章

  • Openstack+Ceph 宿主机意外重启导致虚拟机无法启动的情况
    由于宿主机意外重启,导致此台宿主机上的所有虚拟机都无法启动   控制台显示如上如果是windows主机的话,会显示蓝屏,也是无法进入系统摸索半天,发现应该是ceph权限问题......
  • OpenStack企业云平台架构与实践 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1k4ydRqSDaZvBeBRfu2ULrw点击这里获取提取码 ......
  • openstack题
    1、修改主机名控制节点:hostnamectlset-hostnamecontrollerhostnamectl 进行查看计算节点:hostnamectlset-hostnamecomputehostnamectl 进行查看2、修改hosts......
  • C++ std : : stack
    和其他序列容器相比,stack是一类存储机制简单、所提供操作较少的容器。下面是stack容器可以提供的一套完整操作:top():返回一个栈顶元素的引用,类型为T&。如果栈为空,返回......
  • Elastic Stack (一)
    目录ElasticStack简介ElasticStack简介ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn。ELK包含但不限于Elasticsearch(简称es)、Logstas......
  • VulnStack复现
    靶场下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/01.靶场环境攻击机:kali(192.168.232.130)靶机:windows7(外网:192.168.232.155,内网:192.168.52.143)   ......
  • 内存管理下的栈 stack
    在内存管理的语境下,指的是函数调用过程中产生的本地变量和调用数据的区域。这个栈和数据结构理的栈高度相似,都满足后进先出LIFO看一段代码:voidfoo(intn){…}vo......
  • openstack-rabbitmq
    消息队列:是一种应用程序对应用程序的通信方法,应用程序通过读取和写入队列的消息来通信。消息传递指的是程序之间通过消息中发送的数据进行通信,而不是通过直接的调用彼此来......
  • openstack笔记下
    用ssh登录其他节点:sship地址,退出用logoutopestackserverresize调整云主机类型openstacknetworkcreate网络名--mtu1350 echo"anon_root=/opt" /etc/vsftpd......
  • 使用V2V功能将VMware平台虚拟机迁移至OpenStack平台
     1、进入虚拟机备份系统  2、选择【虚拟机保护】——【恢复】,新建恢复任务,选择需要进行跨平台恢复与迁移的源虚拟化平台【VMwarevSphere】,勾选需要恢复的备份点,点......