知识点
SQL注入-数据请求类型
SQL注入-数据请求方法
SQL注入-数据请求格式
sql-注入天书(对sql-lib专门的学习)
项目案例
SQL-数据请求类型
就是开发在写sql查询时的一些个人习惯所造成的。同样的查询数据情况,可以有不同的写法,以下是一些例子(进行分类):
select * from users where id=$id;
select * from users where id='$id';
select * from users where id="$id";
select * from users where id like '%$id%'
select * from users where id=($id);
select * from users where id=('$id');
select * from users where (id='$id');
这几种在sql-lib里都有相关的例子。
1.数字型
SELECT * FROM users WHERE id=1 #最普通的
2.字符型(有符号干扰)
select * from users where id='$id';
3.搜索型(有多符号干扰)
like:模糊查找关于某个字符
也可以查到相关内容
select * from users where id like '%$id%'
4.框架型(有各种符号干扰)
select * from users where id=('$id');
select * from users where (id='$id');
如果是这种sql语句在无法显示sql语句情况下,如何注入呢?
答案是如果没办法闭合,当然也没办法注入。
SELECT * FROM users WHERE (id=(('$id')))
1'))) and 1=1 #注入点测试
1'))) and 1=2 #注入点测试
其它的写法,为了方便观看,可能会显示进行一些简单操作
大部分黑盒能做的就是分析后各种尝试去判断,所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原SQL语句的未知性导致的拼接失败!
SQL-数据请求方法
GET POST SERVER FILES HTTP UA头等
User-Agent:使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
Cookie:网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]).
Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号
本身来讲,如果是get类型注入,直接在url或者hackbar操作就好。
除此以外的都推荐直接使用burpsuite抓包直接进行测试。
后期使用sqlmap直接把burpsuite的包拉下来,直接注入就好。
用burp来操作,举个例子
右键,把post改为get
一些可能存在的注入的地方
1.用户登录时
2.登录判断IP时
实现:代码配置固定IP去判断-策略绕过
实现:数据库白名单IP去判断-select注入
实现:防注入记录IP去保存数据库-insert注入
PHP特性中的$_SERVER['HTTP_X_FORWARDED_FOR'];接受IP的绕过(绕过)
3.文件上传将文件名写入数据库-insert注入
SQL-数据请求格式
1、数据采用统一格式传输,后端进行格式解析带入数据库(json)
2、数据采用加密编码传输,后端进行解密解码带入数据库(base64)
自己以前的笔记,现在不知道什么情况…
Goole:inurl: MQ==
测试爆出SQL语句,可能存在注入,上SQLMAP了