目录
[[HCTF 2018]Warmup](#[HCTF 2018]Warmup)
[[HGAME 2023 week1]Classic Childhood Game](#[HGAME 2023 week1]Classic Childhood Game)
[HCTF 2018]Warmup
1、题目
2、知识点
文件包含,代码审计
3、思路
打开题目,发现只有一个表情,右键查看源码
发现了source.php文件,打开,发现源码
进行代码审计
先对一些不认识的函数进行解释
in_array(a,b):检测b中是否有a
mb_substr(a,b,c):将a进行分片,从b到c,左闭右看
mb_strpos(a,b):返回a中第一次出现b字符串的位置
urldecode():url解码
include():将PHP文件内容插到另外一个PHP文件中,只产生警告,程序会继续执行
下面对代码进行解释
php
class emmm
{
public static function checkFile(&$page)
{
//定义一个数组,里面有两个值
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
//对$page参数的值进行判断,看看是否为空,或者是否为字符串
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
//判断$page参数的值是否在数组里面
if (in_array($page, $whitelist)) {
return true;
}
//对$page参数的内容进行切片,并赋值给$_page
$_page = mb_substr(
$page,
0,
//获取$page参数的内容第一个出现?的位置
mb_strpos($page . '?', '?')
);
//对$page参数切片后的内容进行判断,看看是否在数组里面
if (in_array($_page, $whitelist)) {
return true;
}
//将$page参数的值进行url解码
$_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;
}
}
//看看通过GET或者POST上传的file参数的内容是否为空
if (! empty($_REQUEST['file'])
//判断$file是否为字符串
&& is_string($_REQUEST['file'])
//执行emmm类中的checkFile函数
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
我们先访问hint.php
提示flag在ffffllllaaaagggg文件中
构造payload:
?file=source.php?/../../../../ffffllllaaaagggg
这里用四个../是因为一般Web服务的文件夹在/var/www/html目录中,而ffffllllaaaagggg在根目录下,所以用四层
得到flag:NSSCTF{3204be46-27f5-40b0-8047-9ac0d07d18f5}
[HGAME 2023 week1]Classic Childhood Game
4、题目
5、知识点
前端JS代码
6、思路
这种就需要在代码里面找,找到过关的那一个点,修改代码
在Events.js文件中,可以看到很多事件,都在调用mota()函数,在结尾出现了mota函数
可以发现这个函数是一个解密函数,打卡控制台运行这个函数,得到flag
得到flag:hgame{fUnnyJavascript&FunnyM0taG4me}
这篇文章就先写到这里了,哪里不懂的或者哪里不足的欢迎指出