SQL注入基本知识点总结
SQL注入基本知识
information_schema
MySQL 中存储所有数据库名、所有表名、所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初始化就存在的系统库。库里存储数据库名、表名、字段名的表分别为 schemata 、tables、columns(原始表名为大写,但小写也能取到数据)。
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名'; 解释:从总表中将所需的数据库名查出来
SELECT * FROM information_schema.xxxxx WHERE TABLE_NAME = 'sss' ; 解释:从xxxx数据库中把表名为sss里面的数据查出来
| 表名 | 关键字段 |
|---|---|
| schemata | schema_name [数据库名] |
| tables | table_schema [数据库名],table_name [表名] |
| columns | table_schema [数据库名],table_name [表名],column_name [列名] |
select schema_name from information_schema.schemata 查询所有的数据库名称 select table_name from information_schema.tables where table_schema = 'mysql ' 查询名为 mysql 数据库中的表名 select column_name from information_schema.columns where table_name = 'user' and table_schema = 'mysql' 查询名为mysql数据库下user表中的字段名称 select (user,password) from mysql.user 查询数据库为mysql下user表中user和password字段下的内容
concat()函数
功能:将多个字符串连接成一个字符串。
语法:concat(str1, str2,...)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
1:select concat (id, name, score) as info from student;
返回的结果就是 1小明79
若是嫌格式数据显示不够清楚,可以加 ‘-’
select concat (id, '-',name, '-', score) as info from student;
返回的结果就是 1-小明-79
group_coucat函数()
group_concat ( [DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'] )
将group by产生的同一个分组中的值连接起来,返回一个字符串结果
例:select name, group_concat (id) from student group by name;
小明 | 1,5,6
小丽 | 2,4
小伟 | 3
小红 | 7
这样就使用group_concat()和group by显示相同名字的人的id号
order by
语句判断,判断该表中一共有几列数据
order by 3页面回显正常,order by 4页面回显不正常,说明此表一个有3列。
union 联合查询
根据SQL语言的特性,使用联合查询联合的结果集之间必须具有相同数量的列名(也就是列数)(也就是说,必须在已知列数的情况下才能使用联合查询,所以联合查询的使用必须在 order by 之后)
查询数据库信息 @@version @@datadir
查询用户名,数据库名 user() database()
文件读取 union select 1,load_file('C:\\wondows\\win.ini')#
写入 webshell select..into outfile...
回显点
联合注入是需要显示结果的,这里就会用到一个叫做回显点的东西。
回显点就是 SQL 查询结果显示在页面上位置,有回显点的 SQL 注入叫做回显点注入。
比如一篇文章的标题、作者、时间、内容等等,这些都可能成为回显点。
继续上面的,查询字段数可以通过 order by x 实现。这边我学到一个知识点,order by 不仅可以按照表中的某个字段名排序,还可以用数字代表查询结果的列(column)进行排序。
比如查询结果有两列,id、name,order by 1 就等于 order by id。
与 limit 不同,order by 从 1 开始计数,0 列不存在,大于查询结果列数会报错。
所以可以通过 order by x 测算出查询结果列数。
select id,name from user where id=1 order by 3 报错,则说明运行的 SQL 语句查询字段数为 2。
知道了查询结果列数,就可以通过联合查询返回需要回显的信息了。
想要显示我们需要的信息,可以将当前的查询结果置空,即判断条件改成 false。
就比如说一共有三列 ?id=1 返回正常 我们需要构造 ?id= -1 union select 1,2,3 from xxx where xxx
目的就是,数据库查询不到 id=-1 的数据,就不会有结果返回,也就没有显示,但是后面的语句会查询出来,会出现在原先的显示位置,这样就把我们想要的数据查询出来 了
sql注释符
# 单行注释 注意与url中的#区分,常编码为%23
--空格 单行注释 注意为短线短线空格
/*()*/ 多行注释 至少存在俩处的注入 /**/常用来作为空格
注入流程
是否存在注入并且判断注入类型
判断字段数 order by
确定回显点 union select 1,2
查询数据库信息 @@version @@datadir
查询用户名,数据库名 user() database()
文件读取 union select 1,load_file('C:\\wondows\\win.ini')#
写入 webshell select..into outfile...
补充一点,使用sql注入遇到转义字符串的单引号或者双引号,可使用HEX编码绕过
SQL注入----盲注
基于布尔 SQL 盲注
基于时间的 SQL 盲注
基于报错的 SQL 盲注
SQL注入基本知识点总结的更多相关文章
- sql注入知识点整理(基础版)
sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- 关于防止sql注入的几个知识点
1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...
- sql注入知识点
需找sql注入点1\无特定目标inurl:.php?id= 2\有特定目标:inurl:.php?id= site:target.com 3\工具爬取spider,对搜索引擎和目标网站的链接进行爬取 ...
- 有关SQL注入的一些小知识点
1.判断注入点: 本质原理是找一个需要后台处理后,提交给数据库的点,我理解为用户可以控制并输入后台数据库的变量,比如我们DVWA SQL injection 的ID ,我们可以通过闭合单引号,#注释 ...
- C# sql语句拼接时 like情况的防sql注入的用法
今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...
- SQL注入原理及绕过安全狗
1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...
- SQL注入关联分析
在Web攻防中,SQL注入绝对是一个技能的频繁项,为了技术的成熟化.自动化.智能化,我们有必要建立SQL注入与之相关典型技术之间的关联规则.在分析过程中,整个规则均围绕核心词进行直线展开,我们简单称之 ...
- Sql注入测试--Sqlmap
慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...
随机推荐
- 使用CleanMyMac快速管理应用程序 优化Mac
CleanMyMac作为一款专业的苹果电脑清理软件,它不仅仅能单纯的卸载不用.少用的应用,同时还支持:1.清理应用程序的数据文件,将应用重置回初始状态,减少空间占用:2.自动检查应用更新,保持应用的最 ...
- css3系列之linear-gradient() repeating-linear-gradient() 和 radial-gradient() repeating-radial-gradient()
linear-gradient() (线性渐变) repeating-linear-gradient() (重复的线性渐变) radial-gradient() (镜像渐变) repeatin ...
- idea中安装阿里巴巴的代码规范插件
1.打开iead软件,从左上角点击File -> Settings -> Plugins 2.安装完成后,重启idea软件,即可正常使用了.
- CET-6备考丨词组、佳句积累
一.片段积累 (2020/09/17) 近三年 CET6 - 翻译 Phrases or Expressions Notes drive to commute to and from work 开车上 ...
- Java lambda 分组后多列求和
主要思路是reducing,可以像sql一样分组后多列求和处理成新对象等: select code,max(name)as name,sum(chengJi)as chengJi,sum(age)as ...
- python 爬虫 汽车之家车辆参数反爬
水平有限,仅供参考. 如图所示,汽车之家的车辆详情里的数据做了反爬对策,数据被CSS伪类替换. 观察 Sources 发现数据就在当前页面. 发现若干条进行CSS替换的js 继续深入此JS 知道了数据 ...
- Redis分布式锁—SETNX+Lua脚本实现篇
前言 平时的工作中,由于生产环境中的项目是需要部署在多台服务器中的,所以经常会面临解决分布式场景下数据一致性的问题,那么就需要引入分布式锁来解决这一问题. 针对分布式锁的实现,目前比较常用的就如下几种 ...
- Sql注入--数字型手工测试
Sql注入--数字型手工测试 漏洞原因:是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行. 从而 ...
- Python的富比较方法__le__、__ge__之间的关联关系分析
Python的富比较方法包括__le__.__ge__分别表示:小于等于.大于等于,对应的操作运算符为:"<=".">=".那么是否象普通数字运算一 ...
- 第九章 Python文件操作
前一阵子写类相关的内容,把老猿写得心都累了,本来准备继续介绍一些类相关的知识的,如闭包.装饰器.描述符.枚举类.异常等,现在实在不想继续,以后再开章节吧.本章弄点开胃的小菜提提神,介绍Python中文 ...