BUUCTF web部分WP
目录
[极客大挑战 2019]EasySQL
根据题目名字判断和这个登录界面,直接用SQL注入的万能密码操作
在用户名未知的情况下
用户名直接 1'or'1'or'1
密码随便输
然后就成功了
否则就不成功
[极客大挑战 2019]Havefun
F12审查元素,或者ctrl + shift + c 审查元素,发现一段关于php的注释,内容为GET传参,如果cat等于dog的话,就echo打印什么东西
那我们直接在URL中进行GET传参
?cat=dog
即可获得flag
[HCTF 2018]WarmUp
打开发现一张图片,按照常理直接Ctrl + U 查看源代码
发现有一个 source.php,访问一下看看
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
具体代码审计可以看看另外大佬的博客 (25条消息) 【CTF】buuctf web 详解(持续更新)_吃_早餐的博客-CSDN博客
代码含义,可以查看php手册
is_string():检测变量是否是字符串
isset():检测变量是否已设置并且非 NULL
in_array(要搜索的值,要搜索的数组):搜索数组中是否存在指定的值
mb_substr($page,n,m):返回page中从第n位开始,到n+m位字符串的值
mb_strpos():查找字符串在另一个字符串中首次出现的位置
urldecode():将url编码后的字符串还原成未编码的样子
发现php代码,还有一个提示 hint.php,也访问看看
它说flag在 ffffllllaaaagggg里面
我们根据Linux的特性,用 ../../../../../很多个../去到根目录,然后打开ffffllllaaaagggg,就可以获得flag
http://cbb3166b-0711-4666-be45-53545d786b7b.node4.buuoj.cn:81/?file=hint.php?../../../../../../../../ffffllllaaaagggg
BUU SQL COURSE 1
关键是找到注入点,然后爆库,表,列,字段即可
[MRCTF2020]Ez_bypass
绕过
打开题目看见代码
I put something in F12 for you include 'flag.php'; $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}'; if(isset($_GET['gg'])&&isset($_GET['id'])) { $id=$_GET['id']; $gg=$_GET['gg']; if (md5($id) === md5($gg) && $id !== $gg) { echo 'You got the first step'; if(isset($_POST['passwd'])) { $passwd=$_POST['passwd']; if (!is_numeric($passwd)) { if($passwd==1234567) { echo 'Good Job!'; highlight_file('flag.php'); die('By Retr_0'); } else { echo "can you think twice??"; } } else{ echo 'You can not get it !'; } } else{ die('only one way to get the flag'); } } else { echo "You are not a real hacker!"; } } else{ die('Please input first'); } }Please input first
-
代码开头包含了一行注释,提到在 F12 中放置了一些内容,其中包括
include 'flag.php';
,这似乎是一个提示,flag.php 文件包含了 flag 的内容。 -
代码首先检查是否传递了
gg
和id
两个 GET 参数。你需要传递这两个参数才能进入后续的条件判断。 -
接下来,代码比较了
md5($id)
和md5($gg)
是否相等,并且确保它们不相等 ($id !== $gg
)。这意味着id
和gg
的值必须不同,但它们的 MD5 哈希值必须相同。这是一种常见的绕过方法,通常会利用哈希碰撞。 -
如果第三步的条件满足,即
md5($id)
和md5($gg)
相等但它们的值不同,那么会输出 "You got the first step"。 -
接下来,代码检查是否设置了 POST 参数
passwd
。如果设置了passwd
,则会继续执行下一步。 -
在第五步中,代码检查
passwd
是否是一个数字。如果passwd
不是数字,它会进一步检查是否等于 1234567。如果passwd
不是数字且等于 1234567,那么会输出 "Good Job!",并且使用highlight_file('flag.php');
显示 flag.php 的内容,然后结束程序。 -
如果
passwd
不是数字或不等于 1234567,那么会输出 "can you think twice??"。 -
如果
passwd
是数字,那么会输出 "You can not get it !"。 -
如果在第四步中没有设置
passwd
,则会输出 "only one way to get the flag"。 -
如果在第三步中的条件没有满足,即
md5($id)
和md5($gg)
不相等或它们的值相等,那么会输出 "You are not a real hacker!"。 -
如果在第二步中没有传递
gg
和id
,则会输出 "Please input first"。
为了获取 flag,你需要绕过这些条件,主要关注第三步和第五步的条件。首先,你需要找到两个不同的字符串,它们的 MD5 哈希值相同,这可以通过哈希碰撞来实现。一旦你有了这两个字符串,你可以将其中一个作为 id
,将另一个作为 gg
传递给脚本。接下来,在第五步中,你需要确保 passwd
不是数字,并且等于 1234567,这样才能触发显示 flag 的条件。
总结:这道题的解法包括了哈希碰撞和条件绕过,以获取 flag。
首先id和gg传入一个数组
数组的md5都是Null,所以它们满足MD5相等的条件。然后id的数组是1,gg的数组是2,满足值不相等的条件
/?id[]=1&gg[]=2
然后POST传参1234567a
因为它不是数字所以绕过第一个条件,而php遇到这种会把后面的a去掉来执行,所以passwd
不是数字且等于 1234567
passwd=1234567a
成功拿到flag