Background

五一哈工大的新生赛,不要脸的蹭一波比赛看一看

F12

藏在http头里面

easy sql

admin' #
admin' --

easy sql again

简单看了一眼 没有判断username password为不为空 当username为不存在 不设密码的时候 NULL值的时候 传进去NULL===NULL 可以绕过

where is flag

考察linux基础知识 flag被删掉了
可以考虑proc文件提示符
/proc/self/fd/3
表示当前使用的进程
可以成功读取到

ez bypass

自己做过那么多这种题目了
== md5 数组绕过
==20200501 不能是数字 字符串
第三个要求用json password 写入固定的值
注意json格式"123":"123a"这种
test·.png
前后有双引号,构造payload

pw=20200501a","password":"shuhukunkun

什么蒙混了我的双眼

这题重点说一下,自己没做过 听师傅说是去年DDCTF的原题
12.png
一开始本能思路解这个base64 但是并8太行 很多不可见字符 看不到flag,师傅说看看url
将这个url进行三层base64解密 发现是flag.jpg 有这个思路之后将index.php三层加密尝试读取
12.png
这时解密这个base64

<?php
/*
 * https://www.cnblogs.com/embedded-linux/p/12638906.html
 * Date: 2016-12-20 23:26
 */
error_reporting(E_ALL || ~E_NOTICE);


header('content-type:text/html;charset=utf-8');
if(!isset($_GET['jpg'])){
    header('Refresh:0;url=./index.php?jpg=V20xNGFGcDVOWEZqUjJNOQ==');
}
$file = base64_decode(base64_decode(base64_decode($_GET['jpg'])));
echo '<title>'.$_GET['jpg'].'</title>';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
echo $file.'</br>';
$file = str_replace("config","!", $file);
echo $file.'</br>';
$txt = base64_encode(file_get_contents($file));

echo "<img src='data:image/gif;base64,".$txt."'></img>";
/*
 * Can you find the flag file?
 *
 */

?>

发现是个简单的正则匹配 将config替换成! 只要求输入大小写字母和数字
然后注释里还有个文章
打开之后师傅说是和时间不对 找到正确的时间发现是个vim swp临时文件的文章
所以尝试读取.inde.php.swp
21.png
再尝试解密base64
12.png
得到提示要读这个文件 !用config替换
解密base64

<?php
include('config.php');
$k = 'flag!flag!';
extract($_GET);
if(isset($t))
{
    $content=trim(file_get_contents($k));
    if($t==$content)
    {
        echo $flag;
    }
    else
    {
        echo'flag!flag!';
    }
}
?>

extract具有变量覆盖漏洞 当get传入同名变量时他会覆盖掉
我们传入k不存时候为false false=="" 所以直接getflag
12.png
当然也不只一种解法
12.png
get 覆盖t=1 k=php://input
在POST情况下我们可以手工提交1让他们相等