SQL注入原理
当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据.
SQL注入本质
把用户输入的数据当成执行的代码
SQL注入的危害
盗取网站的敏感信息
绕过网站后台认证
借助SQL注入漏洞提权获取Webshell
借助SQL注入漏洞提权 把服务器变成自己的肉鸡
读取文件信息
SQL注入-常用函数:
user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账
version() 返回数据库版本
database()返回数据库(只有在use命令选择一个数据库之后,才能查到)
group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串
@@version_compile_os 操作系统版本
SQL联合查询流程:
?id=1 and 1=1
判断有无闭合 and 1=1 and 1=2 //结果和第一个一样说明需要闭合,反之无闭合 有闭合需要用到
猜解字段 order by 10
判断数据回显位置 -1 union select 1,2,3,4,5, 6…….
获取当前数据库名、用户、版本 union select version(),database(),user()
SQL注入思路
判断注入点
在GET参数、POST参数、Cookie、Referer、XFF、UA尝试插入代码、符号或语句,尝试是否存在数据库参数读取行为,以及能否对其参数产生影响,如产生影响,存在注入点
端口扫描
如果可以对主机进行端口扫描,可以根据端口判断数据库类型Oracle:521
SQL Server:433
MySQL:3306
PostgreSql:5432
sql注入点类型
get注入
在get传参时写入参数,将SQl语句闭合,后面加写入自己的SQL语句
post注入
通过post传参,原理与get一样,重要的是判断我们所输入的信息是否与数据库产生交互,其次判断SQL语句是如何闭合的
Referer注入
Referer正确写法应该是Referrer,因为http规定时写错只能将错就错,有些网站会记录ip和访问路径,例如百度就是通过Referer来统计网站流量,我们将访问路径进行SQL注入,同样也可以得到想要的信息
XFF注入
在用户登录注册模块在 HTTP 头信息添加 X-Forwarded-for: 9.9.9.9′ ,用户在注册的时候,如果存在安全隐 患,会出现错误页面或者报错。从而导致注册或者登录用户失败
SQL注入:数字型
当输入的参数为整形时,若存在注入漏洞,则是数字型注入。
如:https://blog.csdn.net/aboutus.php?id=1
此时后台语句:$sql=“SELECT 123 FROM abc WHERE id=’1 ‘”
检测方法:URL输入 and 1=1 / and 1=2 报错则说明有注入
SQL注入:字符型
当输入参数为字符串时,称为字符型注入。
它与数字型的区别:数字型不需要单引号来闭合,而字符串需要单引号来闭合。
例:https://github.com/KnightYuGan?id=1’
此时后台语句:$sql=“SELECT 123 FROM abc WHERE id=’1 ’ ’ “
若多出了一个单引号,破坏了原本的SQL语句结构,数据库无法处理,于是会报错,证明这条语句成功被带进数据库查询,存在字符型注入。
没有回复内容