LOADING

加载过慢请开启缓存 浏览器默认开启

CtfNewStar Week1 Writeup

# reverse [(・∀・)つ原题](https://pan.baidu.com/s/1B9yk8TUxxE-I7zb4FUD8Cw?pwd=d0rs) ## base64

Die 发现是 PE64,直接丢入 ide64,函数名混乱,直接 shift+f12,查找用”Enter the flag: “ 进入主函数,发现输入的值 str 为 26 位然后被 sub_7FF706EE14E0(Str, 26, Str1)加密输出为 str1,再与 g84Gg6m2ATtVeYqUZ9xRnaBpBvOVZYtj+Tc=比较相等即 str 是 flag 值.
进入sub_7FF706EE14E0()函数,再由题目提示的 base64 丁帧为 base64 加密函数,并找到了一个字符串 WHydo3sThiS7ABLElO0k5trange+CZfVIGRvup81NKQbjmPzU4MDc9Y6q2XwFxJ/ ,一眼就是密钥 .

直接用密钥 base64 解密得 flag


ezAndroidStudy

apk 先安装看一看,全是提示就跟着提示来
activity 有个 work.pangbai.ezandroidstudy.Homo 的页面,直接搜索进入拿下 flag 第一段 flag{Y0u
发现flag字符转被定义在一个名为flag1的变量里,于是推测有flag2,直接搜索 flag2,拿下flag2的值为 _@r4。
同样搜索 flag3,直接拿下 flag3 的值为_900d。
flag4 在提示的目录下为_andr01d.
第五步提示要逆向 so 文件(c 语言),于是找到在 lib/arm64-v8a 下的so 文件,提取出来直接丢入 ida64,shift+f12 在libezandroidstudy.so 文件中找到最后flag,_r4V4rs4r}


Simple_encryption

查壳拖进 ida64,简单的算法,脚本如下

#include<stdio.h>
int main() {
unsigned char buffer[32] = {
0x47, 0x95, 0x34, 0x48, 0xA4, 0x1C, 0x35, 0x88, 0x64, 0x16, 0x88, 0x07, 0x14, 0x6A, 0x39,
0x12,
0xA2, 0x0A, 0x37, 0x5C, 0x07, 0x5A, 0x56, 0x60, 0x12, 0x76, 0x25, 0x12, 0x8E, 0x28, 0x00,
0x00
};
for (int i = 0; i < 32; i++) {
if (i % 3 == 0) {
buffer[i] += 31;
continue;
}
if (i % 3 == 1) {
buffer[i] -= 41;
continue;
}
if (i % 3 == 2) {
buffer[i] ^= 0x55u;
}
}
printf("%s", buffer);
}

输出 flag{IT_15_R3Al1y_V3Ry-51Mp1e}


ez_debug

用 ida 看了一下代码,发现最后有个输出是解密 flag 的,但是并没有发现加密的 flag 值,
于是就用 ida 动态调试看值,但是 ida 中的编译代码很乱,难以看懂,比较的两个值也
不是 flag 加密的值,所以尝试跳过比较去直接输出 Decrypted flag,然而并没有东西。
再 看 题 目 发 现 提 示 用 xdbg , 于 是 用 xdbg 调 试 , 在 0000000000401CB3 的 je
0x0000000000401CD9 处断点修改 ZF 的值为 0,使其执行 right 部分的代码,再在输出
Decrypted flag 的后面断点,发现 flag 已经在右侧显示出来了
flag{y0u_ar3_g0od_@_Debu9}


begin

全程提示
Main 函数中 F5 后点击&flag_part1,按 a 转换字符串
Shift+f12,看到第二部分
定位字符串的函数,然后按 x 再定位到调用的函数,函数名就是 flag 的第三部分
flag{Mak3_aN_3Ff0rt_tO_5eArcH_F0r_th3_f14g_C0Rpse}


Web

PangBai 过家家(1)

跟随提示
Leve1 在请求头的 localtion 中找到868f4249-8170-4ece-909b-36ad36e6037f,
直接输入跳转地址
Get 传参 ?Ask=miao
Post say=hello
Post say=flag
提示 Agent 为 Papa,修改请求头 User-Agent 为 Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Papa/129.0.0.0 Safari/537.36
Post say=玛卡巴卡阿卡哇卡米卡玛卡呣
提示上传文件,在本地电脑上创建一个任意名字的 zip 压缩包,并将 cookie 复制到
postman,再用 postman 以 PACTH 方式上传压缩包,提示“玛卡巴卡阿卡哇卡米卡玛卡
呣”必不可少,于是再上传一个 key 为 say 的 text 句子,value 为玛卡巴卡阿卡哇卡米
卡玛卡呣。
提示 jwt,密钥为 0ZmeYwg8aIgb2jVC,了解到可以 jwt 伪造,先对当前 cookie 解密发现
有一个 level:6 的内容,但是不知道伪造的值是多少,先尝试修改为 7,输入后不通过,
后看剧情猜测可能是 0,于是修改为 0,直接通过。
提示要成为 Pangbai 的家人,Localhost,使用 hackbar 直接添加 X-Forwarded-For 的值为
Localhost
点击页面上的按钮获取 flag


Headach3

提示 header,F12 看请求头,一眼 flag,flag{You_Ar3_R3Ally_A_9ooD_d0ctor}


会赢吗

F12 查看源码,发现 flag 第一部分 ZmxhZ3tXQTB3 和/4cqu1siti0n
,转入/4cqu1siti0n,提示 js 的用法,于是查看 js 脚本源码,发现了 async function
revealFlag(className)这个函数请求一个 classname 的参数,并看到了控制台的提示课程
名为 4cqu1siti0n。但是发现原页面并没调用这个段 js 脚本,于是在控制台手动调用,
输入 revealFlag(“4cqu1siti0n”);,成功拿到第二段 flag 为 IV95NF9yM2Fs,并提示前往/s34l。
查看源码,发现有获取 flag 的 js 脚本,分析只要 stateElement.textContent === ‘解封’,就可以运行 js,于是在 if 判断处断点,在控制台输入 stateElement.textContent=”解封”,把值修改为正确的值,运行后得 flag 为 MXlfR3I0c1B,提示下一关在/Ap3x,
转到/Ap3x,发现有 js 脚本阻止我们提交按钮,直接在浏览器设置中禁用 js,再点击按钮获得 flag


智械危机

根据题目提示的 robot,访问 robots.txt,提示/backd0or.php
转到/backd0or.php,进入后发现是 php 代码,分析代码发现要 POST 两个参数 cmd 和 key。
并且有个execute_cmd()函数中有 system()函数,于是想办法把 linux 指令传入
system 中执行。
再细致分析 If 判断就会执行 execute_cmd(),于是先看decrypt_request()函数,这个函数的返回值是 cmd 的 base64 解码的值,所以
我们要先把我们要执行的命令(cmd)进行 base64 编码,再函数内部会把我们的 cmd
值进行反转并取 md5 值,并和被 base64 解码的 key 值比较,相等就会 return。
所以我们的操作就是:选取 linux 命令的值–>把值进行 base64 编码–>post 传入 cmd 中–>反转 cmd(反转的脚本如下)–>把反转的 cmd 进行 md5–>进行 base64 编码–>POST 传入key 中.
找 flag 的 位 置 (ls /),harkbar POST 传 入

cmd=bHMgLw==&key=ZTk0ZDNmOWQyNzBmNTczNGMwZTYwNDY3ZDQ0ZTdkNDY=

发现名为 flag 的 文 件 , 直 接 用 cat /flag 打 开 , 所 以 要 传 入

cmd=Y2F0IC9mbGFn&key=ODc5YTU5MWM2Nzg1YTRlMTM5OGI5NmE5YTFiYzY3ZWI=

flag{b302ad78-b283-431a-8ad5-2a24702d218c}

def reverse(s):
return s[::-1]
print(reverse(""))

谢谢皮蛋

查看源码,发现提示/hint.php
转到/hint.php,发现提示联合注入,并给出了
$sql=”SELECT uname,position FROM hexo WHERE id=$id LIMIT 0,1”;知道了传入的参数格式和 union 左侧列的数量(uname,position)为两个后,就可以进行联合注入了。
直接在框内输入,查询表

-1 UNION SELECT 1,GROUP_CONCAT(table_name) FROM information_schema.tables WHERE TABLE_SCHEMA=database();#

里面发现有一个Fl4g 的表,但是不知道里面的列名,所以继续查找列名,输入

-1 union select 1,group_concat(column_name) from information_schema.columns;#

查找列名有点多,可以搜索关键词 flag,发现里面有 FLAG 的列和一些其他的列名,输入

-1 union SELECT 1,FLAG FROM Fl4g;#

获取 flag 值显示没有这个列表,说明 FLAG 不是
存放 flag 的地方。注意到刚刚查出来的列里面 FLAG 旁边有一个叫 value 的列,猜测可能是,所以输入

-1 union SELECT 1,value FROM Fl4g;# 

flag{89437dd4-53f9-4bb9-8702-ad94e1580be1}