网安学习第18天 PHP安全——SQL注入
一、SQL注入
1、概念
原理:SQL 注入是一种利用后端 SQL 拼接漏洞来操控数据库查询逻辑的攻击方式。程序本来只想把用户输入当成“数据”,但因为代码写得不安全,用户输入被数据库当成了“SQL 指令”的一部分执行。接受的参数值未进行过滤直接带入SQL的查询操作
攻击:利用SQL语句执行你想要的东西(SQL语句能做什么,你就可以做什么)
SQL语句能做什么 = SQL语句由谁决定?=> 数据库的类型
2、不同的数据库如何进行查询
Access数据库:
直接使用字典进行查询,但是可能有查不到的情况。
MySql数据库:
在MySql5.0以上的版本,自带一个名为information_schema的数据库,其中:
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.schemata:记录数据库名信息的表
information_schema.tables:记录表名信息的表

information_schema,columns:记录列名信息的表

二、MySQL注入流程
1、判断常见四个信息(系统、用户、数据库名、版本)
2、根据这四个信息去选择方案
非root用户方案:直接测试获取数据
root用户方案:先测试读写,后测试获取数据
三、MySQL的数据请求方法
SQL语句由于在黑盒中是无法预知写法的,SQL注入能发成功是需要拼接原SQL语句,大部分黑盒能做的就是分析后各种尝试去判断,所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原SQL语句的未知性导致的拼接失败!
由于开发者对于数据类型和SQL语句写法(框架写法)导致SQL注入拼接失败
1、数字型(无符号干扰)
select * from news where id=$id;
2、字符型(有符号干扰)
3、搜索型(有多符号干扰)
select * from news where id like '%$id%'select * from news where id='$id';
4、框架型(有各种符号干扰)
select * from news where id=('$id');
select * from news where (id='$id');
四、数据请求的方法
全局变量方法:GET POST SERVER FILES HTTP头等
User-Agent:
使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
Cookie:
网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]).
Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号
五、数据请求格式
1、数据采用统一格式传输,后端进行格式解析带入数据库(json)
2、数据采用加密编码传输,后端进行解密解码带入数据库(base64)
注:本人学习是跟着小迪安全学的,所以一部分笔记可能相同
更多推荐
所有评论(0)