首页 > 其他分享 >Pwn-guess[攻防世界]

Pwn-guess[攻防世界]

时间:2023-08-22 23:44:41浏览次数:32  
标签:__ 攻防 guess sub buf v3 Pwn rsp

0x01 基础分析
题目中共有两个附件guess和libc-2.27.so
先运行guess:

captain@ubuntu:~/Desktop$ ./guess
1. Login to guess
2. Exit
Choice: 

和密码账户相关,应该是硬编码写入了程序中,下面通过IDA分析尝试获取密码账户

0x02 IDA逆向分析
一、main函数

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  alarm(0x60u);
  setvbuf(stdin, 0LL, 2, 0LL);
  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stderr, 0LL, 2, 0LL);
  while ( 1 )
  {
    sub_9C0();                                  // 选择功能1、2
    if ( sub_9F0() != 1 )                       // 判断用户输入
      break;
    sub_A43();
  }
  return 0LL;
}

二、继续分析关键函数sub_A43():

unsigned __int64 sub_A43()
{
  int i; // [rsp+4h] [rbp-22Ch]
  char buf[256]; // [rsp+10h] [rbp-220h]
  char v3[16]; // [rsp+110h] [rbp-120h]
  FILE *v4; // [rsp+120h] [rbp-110h]
  unsigned __int64 v5; // [rsp+218h] [rbp-18h]

  v5 = __readfsqword(0x28u);
  v4 = stderr;
  printf("Account: ");
  read(0, buf, 0x100uLL);
  printf("Password: ", buf);
  read(0, v3, 0x100uLL);                        // Account=buf;Password=v3
  for ( i = 0; i < strlen(buf); ++i )
  {
    if ( buf[i] != v3[i] )                      // Account=Password即可登录
    {
      puts("Login fail");
      return __readfsqword(0x28u) ^ v5;
    }
  }
  sub_91A(buf, v3);
  return __readfsqword(0x28u) ^ v5;
}

尝试登录:

test@ubuntu:~/Desktop$ ./guess
1. Login to guess
2. Exit
Choice: 1
Account: hello
Password: hello
Welcome, Boss. Leave your valuable comments: Alarm clock

三、登录验证成功之后指向sub_91A(buf, v3)函数,跟进分析,其反汇编代码如下

unsigned __int64 sub_91A()
{
  char v1[64]; // [rsp+10h] [rbp-50h]
  int i; // [rsp+50h] [rbp-10h]
  unsigned __int64 v3; // [rsp+58h] [rbp-8h]

  v3 = __readfsqword(0x28u);
  printf("Welcome, Boss. Leave your valuable comments: ");
  for ( i = 0; i != 65; ++i )
  {
    read(0, &v1[i], 1uLL);
    if ( v1[i] == 10 )
      break;
  }
  return __readfsqword(0x28u) ^ v3;
}

一眼就看出read()函数不是人,因为函数中只定义了64bytes大小的空间存储用户存储用户的comments,读取comments的时候是通过for循环一个字符接一个字符的读入,以换行符作为comments的结束,但是for的判断条件为i!=65,因此那么第0~64能够读入,66往后也会被读入,最终会超过v1的栈空间,出现栈溢出漏洞。

0x03 触发奔溃

Tips:
1、反汇编伪代码中多次出现的readfsqword函数

标签:__,攻防,guess,sub,buf,v3,Pwn,rsp
From: https://www.cnblogs.com/J0ck3r/p/17649923.html

相关文章

  • 北大ACM poj3589 Number-guessing Game
    Number-guessingGameTimeLimit:1000MS MemoryLimit:65536KTotalSubmissions:5805 Accepted:4204DescriptionLarrylikesplayingthenumber-guessinggame.Twoplayersareneededinagame.SupposetheyareXandY,andXpresentsanumberforYtogu......
  • B. 攻防演练 (倍增)
    攻防演练来源2021年中国大学生程序设计竞赛女生专场https://codeforces.com/gym/103389/problem/B题解注意倍增的递推顺序还有\(0,n+1\)的情况!!!#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5,K=20,M=30;intm,n,q,l,r;strings;int......
  • 【黑产攻防道02】如何对抗黑产的图像识别模型
    全文8799字,预计阅读时间约25分钟,建议收藏后阅读验证码本质上自带一层答案的语义,这是天然的区分人和自动程序的地方。无论使用哪一种方式破解验证码,都必须识别出答案。在多年与黑产破解者的博弈对抗的过程中,我们发现,从限制黑产获取验证码图片答案这个方向来进行防御,不仅可以减少运营......
  • Druid连接池更换Guess数据源
    目录1.遇到的问题2.更换数据源操作步骤1.添加pom依赖2.更改jdbc.properties3.初始化Druid连接池1.遇到的问题工作中有个db国产化的需求,需要在一个老项目中把DB从mysql更换为openGuess,将对应的驱动和Druid数据源改造后启动程序报错如下:java.lang.IllegalStateException:dbTy......
  • 【愚公系列】2023年08月 攻防世界-Web(ics-02)
    (文章目录)前言SSRF(服务器端请求伪造)是一种攻击技术,攻击者通过构造恶意请求,欺骗服务器发起外部请求,获取服务器本应该不被直接访问的信息或服务。攻击者可利用SSRF进行一系列攻击,包括对内部资源进行扫描、窃取敏感信息、攻击内部系统等。SQL注入是一种常见的Web攻击技术,攻......
  • Web攻防--xxe实体注入
    web攻防--xxe实体注入漏洞简介XML外部实体注入(也称为XXE)是一种Web安全漏洞,允许攻击者干扰应用程序对XML数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。在某些情况下,攻击者可以利用XXE漏洞联......
  • CTFer成长记录——CTF之Web专题·攻防世界—lottery
    一、题目链接https://adworld.xctf.org.cn/challenges/list?rwNmOdr=1691651594927二、解法步骤  打开网页,这是一个买彩票换flag的网站。题目附件提供了源码:  在网站上探索一番,发现买flag需要9990000R,获得资金的方式就通过buy功能买彩票。  那么我们随便输入一个数字,......
  • CTFer成长记录——CTF之Web专题·攻防世界-Web_php_include
    一、题目链接https://adworld.xctf.org.cn/challenges/list?rwNmOdr=1691398818171二、解法步骤  本题依旧是文件包含,但是这题不同,while(strstr($page,"php://")){$page=str_replace("php://","",$page);}  这条语句过滤掉了以往的php://filter/read=convert.......
  • CTFer成长记录——CTF之Web专题·攻防世界-php_rce
    一、题目链接https://adworld.xctf.org.cn/challenges/list?rwNmOdr=1691398818171二、解法步骤  RCE意思是(RemoteCodeExecution),远程代码执行漏洞。这里题目涉及到thinkphp5的框架,那么就可能有对应的漏洞。  ThinkPHP5漏洞Payload:  Thinkphp5.0.221、http://192.1......
  • CTFer成长记录——CTF之Web专题·攻防世界-Web_php_unserialize
    一、题目链接https://adworld.xctf.org.cn/challenges/list二、解法步骤  本题考察的是反序列化,反序列化的题都需要审计php代码,步骤也比较固定。<?phpif(isset($_GET['var'])){$var=base64_decode($_GET['var']);if(preg_match('/[oc]:\d+:/i',$var))......