一:sql注入原理
当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。
二:危害
- 窃取数据库信息。
- 写入webshell获取网站权限。
三:sql注入流程
- 寻找传参页面
- 判断是否存在注入点
- 判断字段的数量
- 判断字段回显的位置
- 查找数据库名
- 查找表名
- 查找字段名
- 查找字段内容
- 找后台登录
四:常见符号/函数/语句归类
注释符
#url 编码23% 单行注释在URL种#表示锚点,也就是hash路由,带上#不会请求后端路由,而是刷新前端路由
-- x 单行注释x表示任意字符,这里表示有一个空格
/**/ 内联注释
常见运算符
&& 同 and
! 同 not
^ 同 xor
\ 转义符
~ 一元比特反转
+ 加,可替代空格
常用函数
user() 获取当前操作的用户名,同session_user(),current_user()有时也用sysytem_user()
version() 获取当前数据库版本信息
database() 获取当前数据库名称
@@datadir 获取数据库路径
@@hostname 获取安装MYSQL的计算机名称
截取字符串常用的函数
mid(str,pos,length) 对字符串str,自pos位开始截取,截取长度为length
substr(str,start,length) 对指定字符串进行截取,为substring的简版
l left(a,b) 表示从数据库名左侧截取1位
ord函数是返回字符的ASSCI码,常和截取字符函数一起使用
ord(substr(database(),1,1)) > 114 判断数据库名的第一个字符的ASSCI码是否大于114
ord()函数同assci()函数都是返回字符串的assci码值
concat()将多个字符合并成一个字符串
concat_ws() 简单理解为带分隔符的连接字符串
group_concat()返回一个字符串结果,该结果由分组中的值连接而成