UNION注入 POST注入 sqlmap 使用
注入的原理 :将用户传入给后端页面(PHP)的SQL语句,作为代码来执行
核心点:传参
union 注入
第一步:判断目标站点,是否存在注入漏洞
向页面传入一些指令(SQL语句),检查指令是否被执行,如果被执行,说明页面是可能存在SQL注入漏洞的;如 果不能被执行,说明可能不存在SQL注入漏洞
常用的闭合点:"单引号 ""双引号 (' ') (" ") * *
第二步
:
判断数据表的字段数量;
思路:order by 字段编号
第三步:找到页面的显错位;
结合union 和 select 语句查询页面显错位
第四步
:
判断这个站点
/
页面用的数据的版本和当前数据库的名称
select database(); 查询数据库的名称
select version(); 查询数据库的版本
第五步:判断表名; 使用information_schema 库中的tables表
第六步:判断字段名; 使用information_schema 库中的columns表
第七步:查询表中的数据
(
拖库); 使用select 各种查询
因为MYSQL 5.0 以下的没有 information_schema这个数据库 所以可以要先判断数据库名和版本信息
构造的SQL语句:
用w1表测试
#
获取当前库中所有的表
select group_concat(table_name) from infomation_schema.tables where table_schema='w1'
#
获取当前表中所有的字段
select group_concat(column_name) from infomation_schema.columns where table_name='tb3'
#
获取表中所有的数据
select * from w1.tb3
POST 注入
POST注入和GET注入区别在于GET是通过URL进行注入-联合查询,POST注入实现的地点是在POST请求头里面来修改
sqlmap工具
SQLmpa 是一款自动化SQL注入工具,工具可以扫描到主机所有的库 表等信息,通过工具可以尝试拿到mysql 的最高系统权限
特点:
全面支持
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite,
Firebird, Sybase
和
SAP MaxDB
数据库管理系统。
全面支持六种
SQL
注入技术
:boolean-based
盲注、
time-based
盲注、
error-based
、
UNION
查询、堆叠查
询和带外查询。
通过提供
DBMS
凭证、
IP
地址、端口和数据库名,支持不通过
SQL
注入的直接连接数据库。
支持枚举用户、密码哈希、特权、角色、数据库、表和列。
自动识别密码哈希格式,支持基于字典的攻击破解。
支持完整转储数据库表,根据用户的选择转储一定范围内的条目或特定列。用户还可以选择只从每列中转
储指定字符。
支持搜索特定的数据库名、表名,或跨表搜索特定的列名。这非常有用,例如,识别包含自定义应用程序
凭证的表,其相关列名称可能包含
name
、
pass
等字符串。
支持通过数据库服务器所在的文件系统下载和上传任何文件,当数据库软件是
MySQL, PostgreSQL
或
Microsoft SQL server
时。
支持通过数据库服务器所在的操作系统执行任意命令并获取输出,当数据库软件为
MySQL
、
PostgreSQL
或
Microsoft SQL server
时。
支持在攻击者机器和数据库服务器所在操作系统之间建立带外有状态的
TCP
连接,这个通道根据用户的选
择可以是交互式命令行、
Meterpreter
会话或图形用户界面
(VNC)
。
支持通过
Metasploit
的
getsystem
命令实现数据库进程的用户权限升级。
基础使用:
通过URL来进行注入: sqlmap -u http://www.sqli.zz/Less-1/?id=1 --dbs
选项:
-u : 指定一个URL,根据url 做注入
--dbs:跑库
-D [database_name] : 指定库名 后面会跟上 --tables
--tables 跑表名
-T [table_name] : 指定表,用来跑字段名
--columns: 跑字段
-C [column_name]:根据指定字段获取记录
--dump :读取数据,一般情况拿到数据库的表的名字就可以了。
--technique:指定sqlmap的注入方式
=B 布尔型注入
=E 报错型注入
=U 联合查询注入
=S 多语句查询
=T 时间盲注
--random-agent: 使用随机请求头,默认情况下使用sqlmap 【避免主机根据请求头来封禁我们的后续请求】
--delay=1 每次探测时延1秒
--count 查看数据量
--level 【1-5】: 数值越高,测试级别越高,跑库的成功率也会更高,但是系统性能下降,并且需要的时间更
长。默认 级别3
--risk 【0-3】: 测试语句更加丰富,例如级别1测试10条语句,级别2可能测试40条
--is-dba:查看当前注入点的数据库权限
--os-shell 直接获取目标服务器的系统权限,但是需要--is-dba为 true的状态才能使用
--proxy=‘http://127.0.0.1:8080’ 设置代理,将跑库的数据发送到指定的代理服务器上,经过改包等操作 将数据
包转发
--flflush-session 忽略缓存 继续注入
-r [txt] :txt文件存放的是POST请求数据,-r选项可以根据POST请求头实现注入效果