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
标签:语句,数据库,拼接,SQL,注入,列名,schema From: https://www.cnblogs.com/panglinglong/p/17404430.html