Web 渗透与攻防在 Linux 中的实现(以下内容仅用于学习安全知识和测试安全机制,禁止用于非法活动)及代码示例
SQL 注入检测(以 Python 和 SQLmap 为例)
安装 SQLmap:
可以从 SQLmap 官方网站(https://sqlmap.org/)下载,解压后即可使用。通常可以通过命令克隆代码仓库
git clone https://github.com/sqlmap/sqlmap.git
然后进入目录使用命令运行
python sqlmap.py
使用 SQLmap 进行 SQL 注入检测:
运行命令
python sqlmap.py -u http://example.com/login.php --data "username=&password="
将http://example.com/login.php替换为目标登录页面的 URL,--data参数后的内容根据实际表单数据修改 来检测是否存在 SQL 注入漏洞。
简单的手动检测 SQL 注入代码示例(使用 Python 的 requests 库)
import requests
def sql_injection_test(url):
payloads = ["' or '1'='1", "1' or '1'='1 --"]
for payload in payloads:
data = {"username": payload, "password": "test"}
try:
response = requests.post(url, data=data)
if "Login successful" in response.text:
print("可能存在SQL注入漏洞, payload: ", payload)
except requests.RequestException as e:
print("请求出错: ", e)
if __name__ == "__main__":
target_url = input("请输入要测试SQL注入的登录页面URL:")
sql_injection_test(target_url)
XSS(跨站脚本攻击)检测
使用工具方式(以 XSS - Striker 为例)
安装 XSS - Striker:
从官方网站(https://xsstrike.github.io/)下载,或者通过命令克隆代码仓库
git clone https://github.com/s0md3v/XSS - Striker.git
进入目录后按照文档安装依赖并运行。
使用 XSS - Striker 检测 XSS 漏洞:
运行命令
python xsstrike.py -u http://example.com/search.php
将http://example.com/search.php替换为目标页面 URL 来检测是否存在 XSS 漏洞。
简单的手动检测 XSS 代码示例(使用 Python 的 requests 和 BeautifulSoup 库)
import requests
from bs4 import BeautifulSoup
def xss_detection(url):
payloads = ["<script>alert('XSS')</script>", "<img src=x onerror=alert('XSS')>"]
for payload in payloads:
try:
data = {"input": payload}
response = requests.post(url, data=data)
soup = BeautifulSoup(response.text, 'html.parser')
if payload in soup.text:
print("可能存在XSS漏洞, payload: ", payload)
except requests.RequestException as e:
print("请求出错: ", e)
if __name__ =="__main__":
target_url = input("请输入要测试XSS的页面URL:")
xss_detection(target_url)
防御措施示例(以防止 SQL 注入为例,在 Python 的 Flask 框架中)
from flask import Flask, request, jsonify
import sqlite3
app = Flask(__name__)
# 正确的数据库查询方式,使用参数化查询
@app.route('/login', method=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
query = "SELECT * FROM users WHERE username =? AND password =?"
cursor.execute(query, (username, password))
user = cursor.fetchone()
if user:
return jsonify({"message": "Login successful"})
else:
return jsonify({"message": "Login failed"})
if __name__ == "__main__":
app.run()
在上述代码中,通过使用参数化查询(cursor.execute(query, (username, password))),将用户输入作为参数传递,而不是直接拼接 SQL 语句,从而有效地防止了 SQL 注入攻击。对于 XSS 防御,在 Web 应用中可以使用模板引擎的自动转义功能(如在 Flask 中,Jinja2 模板引擎默认会对变量进行转义),或者手动对用户输入进行 HTML 转义。