WEB渗透之SQL注入

什么是SQL注入?

SQL注入就是将恶意的SQL命令注入到后台数据库引擎执行的攻击,通过在Web表单中输入恶意的SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句,从而进一步得到相应的数据信息。简而言之就是说攻击者用一些恶意的SQL语句进入到不严谨的数据库中进行操作。SQL注入攻击是一直是最受欢迎的Web应用程序漏洞攻击之一。

原理

POST/GET表单、输入域名或URL的查询字符串中插入恶意的SQL命令,从而绕过PHP等脚本的不严谨导致的漏洞,与数据库进行交互,最终使WEB服务器执行恶意命令的过程。

步骤

1、判断交互方式

在进行SQL注入时,我们需要知道是客户端使用什么方式与服务器进行交互的,一般是使用:getpost

1、寻找注入点,进行猜测注入,打破构造

通过SQL语句进行测试注入,找出网页的语言漏洞,个人感觉这是最关键的一步。
若不执行,说明注入是失败
若报错,说明语句可能有效
若执行语句并返回预计值,说明注入成功
常见的闭合有:''""()('')("")[]{}

2、注入成功后,使用SQL语句进行数据库信息采集

这一步就是需要熟悉SQL语句,从而查询数据库的基本信息
比如:寻找显示数据多少,数据库名称,数据库的表,数据库的列等等

判断列数:

select 语句 order by+预计的列数(可以使用二分法)--这个原来的意思是用来对列数的数据进行排列的,但是当输入的数字超出列数时就会报错

查询所有数据库名:

show databases; --不在注入时候用一般用下面两个
#或者
select schema_name from information_schema.schemata
#或者
select distinct table_schema from information_schema.columns
#或者
select distinct table_schema from information_schema.tables

查询所有列名:

select distinct column_name from information_schema.columns

查询所有表名:

select distinct table_name from information_schema.columns
#或者
select distinct table_name from information_schema.tables

常见函数:

select system_user()--系统用户名
select user()--用户名
select current_user()--当前用户名
select session_user()--连接数据库用的用户名
select database()--数据库名
select version()--mysql数据库版本
select load_file(路径)--mysql读取本地文件的函数
select @@datadir--数据库路径
select @@basedir--mysql安装路径
select @@version_compile_os--操作系统

注意:如果感觉内容过少可以使用group_concat(搜索的值),就是将行和列互换,–+中的+表示空格

3、当得到数据库信息后,我们就可以继续收集用户名和密码

这里就需要依靠第二步所使用到的信息进行查询了。当拿到管理员的用户名和密码后,就是基本无敌了。

4、在对网页搜索表单填写,从而进入WEB服务器里面,进行任意操作

知道用户名和密码后,就得要进入数据库,那么我们就需要知道在网页的哪里去输入用户名和密码,从而进入数据库。

发布了23 篇原创文章 · 获赞 26 · 访问量 1433

猜你喜欢

转载自blog.csdn.net/qq_41734243/article/details/105220600
今日推荐