渗透测试学习-漏洞讲解-01

渗透测试-SQL注入-01

Posted by hmoytx on August 19, 2018

SQL注入简介

这里先讲解下SQL注入攻击,所谓SQL注入攻击都可以划分到数据库安全攻击手段中,主要是程序员在开发时,没有对用户输入数据的合法性进行判断,导致恶意数据插入到原SQL 语句中,导致执行SQL恶意语句,从而对数据库进行的攻击。
常见的数据库攻击主要是为了:文件读写、调用执行等敏感行为。
注:这里以mysql为例。

SQL注入产生条件

1.可控变量接收。
2.变量代入到SQL语句中。
3.未对变量进行过滤或者可以绕过过滤。

mysql数据库有关

mysql数据库结构:
数据库


数据
数据库
表 列 数据

mysql5.0以后数据库中自带一个information_schema数据库用来存储mysql下所有信息(数据库名,表名,列名)。
常见的一些参数:
database() 数据库名
user() 数据库用户 最高权限是root
version() 数据库版本
@@version_compile_os 操作系统

注入攻击常用的一些语句

order by

可能会有人用order by 对mysql进行一个字段数的检测,但是在mysql中order by跟在access中是不一样的。
order by 后面的数字是代表在select中想查询的字段在查询语句中的位置。例如 select id, sex from table_1 order by 1指的是根据id进行排序。

select

上面的order by无法像access那种确定字段数,我们可以用select来确定字段数。通过union select 1, 2, 3 –不需要指定表名。直到页面正常,可以构造错误页面再联合查询,最后是会有可显示字段的编号(针对显错的)。

利用information_schema

前面讲到information_schema数据库中存储了整个mysql的信息,我们可以通过这个数据库来进行查询(其中的schemata表中存储了全部数据库信息)。
在schemata中,schema_name字段存储了数据库名,在table_name中,table_schema字段存储了数据表所在的数据库名,table_name字段存储额数据表名。类似的还有columns。

利用查询语句获取想要的数据

union select table_name from information_schema.tables where table_schema=’数据库名(由database()爆出来)’ limit 0,1

特殊情况

phpmyadmin的情况下,或者可以连接数据库,权限足够大是可以直接写入shell的,前提是知道网站根路径。
以root权限为例:
直接可以通过 select “content” into outfile(‘path’) 直接写入文件的。

结语

这里主要是讲了一些基础的SQL注入有关的知识点,SQL注入是很有学问的,作者才疏学浅只能是接触点皮毛,后面还有盲注等放下面几篇讲。