从零开始学习网络安全-我的八周学习路线
这周学习sql注入以下是我学习的时候写的笔记。sql注入原理用户输入的内容被拼接到数据库执行所有漏洞都有前提条件而sql注入的条件是用户能控制输入的内容web应用把用户输入的内容带入数据库执行数据库sql代码必须会手写1.INSERT增2.DELETE删后面必须加where条件指定删哪条3.UPDATE改同样必须加where条件4.SELECT查最常用的命令查询所有信息SELECT*FROM表名*代表所有在哪里查WHERE筛选条件ORDER BY排序升序省略或者写asc降序写descGROUP BY分组 HAVING满足什么条件进入分组into把查询结果复制到对应表里写在from前面SELECT后面多个目标用分开。where后面多个目标用and或者or连接LIMIT数字 限制返回多少行数字型注入没有单引号闭合有且仅有数字的才是数字型注入字符型注入需要单引号闭合再用#注释掉后台的那个原有的单引号在bp上改包一定要在inspector那里去改不然格式不对union可以连接两条select一起查询要用oeder by猜出有几列才能使用union他们前后要一致否则会报错information schema在mysql中自带的information_schema这个表里面存放了大量的重要信息。具体如下如果存在注入点的话可以直接尝试对该数据库进行访问从而获取更多的信息。比如SCHEMATA表提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。TABLES表提供了关于数据库中的表的信息包括视图。详细表述了某个表属于哪个schema表类型表引擎创建时间等信息。是show tables from schemaname的结果取之此表。COLUMNS表提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns fromschemaname.tablename的结果取之此表。ORDER BY 判断列数 → UNION SELECT 占位确认 → 查数据库名 → 查所有表名 → 查目标表的列名 → 查用户名和密码关键函数- database()当前数据库名- group_concat()把多行结果合并成一行- information_schemaMySQL 元数据库存着所有库、表、列的信息# SQL注入速查## 查数据库名UNION SELECT 1,database()### 查所有表名UNION SELECT 1,group_concat(table_name) FROM information_schema.tables WHERE table_schema库名### 查某表的所有列名UNION SELECT 1,group_concat(column_name) FROM information_schema.columns WHERE table_name表名### 查某表的数据UNION SELECT 1,group_concat(列1,:,列2) FROM 表名#tables表名columns列名注释符还有“-- ”双横线后面一定要加空格因为这个我把一个命令反反复复检查了3遍才检查出问题。如果用union命令前面的最好写成1‘ and 12让第一个失效不然第一个显示很可能会挤掉你后面的结果。还有输入命令的时候一定要慢很多时候少打一个空格一个逗号那命令就白输了浪费更多的时间。这里就放一张我在皮卡丘玩字符注入的照片