sql注入简介
2019-11-05 本文已影响0人
nohands_noob
sql注入原理
当客户端传递给sql语句的参数没有做安全过滤式,用户可以任意构造改变sql语句结构,执行攻击者想要的操作
栗子:语句"select * from table where id=" + id
当id传递 1 or 1=1
时,语句就变成了
select * from table where id=1 or 1=1
该语句就恒为真,满足所有行的结果
Mysql注入中常用的函数
函数 | 函数功能 |
---|---|
system_user() | 系统用户名 |
user() | 用户名 |
current_user() | 当前用户名 |
session_user() | 连接数据库的用户名 |
database() | 当前数据库名 |
version() | 数据库版本 |
@@datadir | 数据库路径 |
@@basedir | 数据库安装路径 |
@@version_compile_os | 操作系统 |
concat() | 无分隔符连接字符串 |
concat_ws | 含分隔符连接字符串 |
group_concat | 以逗号连接字符串 |
load_file() | 读取本地文件 |
info outfile | 写文件 |
ascii() | 字符的ascii码 |
ord() | 字符串的第一个字符ascii码 |
mid() | 返回子字符串 |
substr() | 返回子字符串 |
length() | 返回字符串长度 |
一般注入流程:
1.寻找注入点
类似url中传递参数xxx.xxx?id=x,像这种可能会与数据库交互的,都可能会存在注入点
2.测试注入点
传递" ' "造成引号闭合失败,出错,则可能存在注入点
继续传递" '# ",若无报错,说明引号闭合成功,传递的参数为字符型注入;若报错,则为数字型注入
3.开始攻击
上sqlmap! or 手工注入