给她
打开题目以为是sql注入搞了半天也没有发现注入点,根据大佬提示<给她>及git--是git泄漏
用dirsearch扫了一下也发现了.git
githack下载地址:GitHub - lijiejie/GitHack: A `.git` folder disclosure exploit
下载得到hint.php
发现spring漏洞:
如果我们输入"%\"或者"%1$\",他会把反斜杠当做格式化字符的类型,然而找不到匹配的项那么"%\","%1$\"就因为没有经过任何处理而被替换为空。如果%1$ + 非arg格式类型,程序会无法识别占位符类型,变为空。因此sprintf注入的原理就是用一个15种类型之外的"\" 来代替格式字符类型让函数替换为空,则“%1$\'”后面的单引号就能闭合前面的单引号。
addslashes函数就是在预定义的字符前面加上反斜杠
这些预定义字符包括:
- 单引号(')
- 双引号(")
- 反斜杠(\)
- NULL
因此构造payload :?name=1&pass=%1&' or 1=1 --+
进入报错页面查看源码发现了flag,怀疑是文件包含但是读取不了,在cookie里面发现了一串16进制解码得到 /flag 但是访问也没有,那就换个思路修改cookie的值进行文件读取
这里要注意 先把/flag进行16进制的编码在进行传值。
flag=ctfshow{82b3bf0d-3f03-49cc-aff7-9897baf06e41}
签到题
提示flag在url里面 直接扫一下目录
访问/flag及得到flag
flag= ctfshow{4df00dae-1a38-4b51-8ab6-053f4a208011}
假生赛
?php
session_start();
include('config.php');
if(empty($_SESSION['name'])){
show_source("index.php");
}else{
$name=$_SESSION['name'];
$sql='select pass from user where name="'.$name.'"';
echo $sql."<br />";
system('4rfvbgt56yhn.sh');
$query=mysqli_query($conn,$sql);
$result=mysqli_fetch_assoc($query);
if($name==='admin'){
echo "admin!!!!!"."<br />";
if(isset($_GET['c'])){
preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1);
echo $flag;
}else{
echo "you not admin";
}
}
}
?>
审计代码得知,name=admin 然后在传入一个以get方法的c
根据题目提示register.php是注册页面 用户名admin 密码没有做要求随便写一个 login.php是登录面
接下来就要对接下来就要满足正则绕过这里过滤了\w和\W。其中\w过滤了a-z.0-9,包括下划线的任何单词字符\W过滤了任何非单词字符但没有对空格做过滤
所以我们直接?c= 就可以得到了flag
flag=ctfshow{89814a3c-95ba-4fbf-931f-811d29ecd1b8}
总结:
1.addslashes函数+sping的漏洞
2.cookie的盗用
3.代码审计+正则过滤