SQL注入

发布时间 2023-05-16 21:10:49作者: 数星观月

1、SQL注入的危害

数据库数据泄露、注入获得shell

2、SQL注入原理

可控变量、带入到数据库中查询、变量未存在过滤或过滤不严谨

原理就是网页中用户可以传入一个参数,这个参数和后端代码的sql语句进行拼接,然后将拼接后的sql语句放到数据库中进行数据操作。原本这个参数是为了在数据库中数据操作的一些条件限制,现在我们可以将and 1=2拼接上让这条sql语句失效,然后再拼接上其他的sql语句来查询我们想要的数据。

3、SQL注入判定

www.along.com/id=1 and 1=1

www.along.com/id=1 and 1=2

www.along.com/id=1如果拼接and 1=1显示页面正常,拼接and 1=2页面错误,这种情况就有可能有注入点。原本www.along.com/id=1就是能正常显示页面,然后我们使用and且逻辑运算符和后面再加一个逻辑判断语句。且两真为真,一假则假。通过且这两个语句,就验证可以往上面拼接SQL语句,可以注入了。

4、信息收集

数据库版本:version()

数据库名字:database()

数据库用户:user()

操作系统:@@version_compile_os()

知识点:

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

2、数据库中符号:"."代表下一级

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

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

table_name:表名

column_name:列名

table_schema:数据库名

-------------------------------------------------------------------------------------------------------------------------------------

墨者学院靶场SQL注入实验

经过判断后有注入

 

 猜解列名数量(字段数),order by x,x为第几列(1,2,3...),就是能用最大列来排序还能正常显示页面,这里使用这个方法猜出来有4列。

 报出二战

 可以看出来第二列和第三列有回显点,第二列用version()查看数据库版本,第三列用database()查看数据库名

 再第二列用user()查看数据库用户,第三列用@@version_compile_os查看操作系统

select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup',找到上面数据库中的表名

 找到上面数据库中的列名

 显示出用户名和密码

将后面一个密码解密登录,成功拿到了key