寒假学web--day08

简介

今天学习了sql注入的另外一些类型,以及遇到sql注入时怎么处理

然后学习了php的类与对象,简单了解了php的序列化与反序列化

注释符

--+(--空格)

布尔盲注

页面没有回显点,只有报错和不报错

基于此,我们可以通过大量的请求来猜测敏感数据

username='aaa' or substr(username,1,1)='a' and id=1

判断第一条数据的第一个字母是不是a

像这样一位一位的猜显然很费时间,所以可以编写脚本来打

报错注入

没有回显点,有mysql执行sql语句的报错信息

常用函数

updatexml

extractvalue

整数溢出报错:exp pow cot

不存在函数报错 select xxx();xxx为不存在的函数

username=admin' or updatexml(1,concat('^',(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),'^'),1)%23&password=123123

堆叠注入

支持多条sql语句执行,用;分隔

如果可以堆叠,首先考虑存储过程 set @a=b;

以此来绕过关键字

时间盲注

没有明显的回显点,页面也没有明显的变化

可以执行sql注入,但是不会返回结果,也不会报错

**原理:**猜测某个条件,若成立,则sleep几秒

select id,username,password from user where username = 'admin' and if((select substr(username,1,1) from user where id = 1)='a',sleep(3),1);

猜对了就sleep 3秒,猜错了就返回1

延时方法

benchmark

benchmark(count,exp)

笛卡尔积延时法

select count(*) from user A,user B;

select count (*) from information_schema.columns A,information_schema.columns B,information_schema.tables C;

get_lock函数延迟法

select get_lock('a',3);

条件:针对数据库连接的长连接有效

php 一般 解释执行完毕后,就会关闭数据库连接,下次请求的时候再次连接数据库

java 维护一个数据库连接池,长时间连接,需要处理请求时,拿出来进行sql查询,查询完后,放回数据库连接池

rlike

通过大量的正则匹配来实现延迟

二次注入

无法直接注入,但是可以把要注入的数据插入数据库中,其他地方引用数据库中的数据,拼接sql语句时,默认不再进行过滤,直接拼接,造成曲线控制了sql语句

基于不同注入点的应对技巧

1.当我们控制点在where 之后,则尝试 闭合参数引号,有回显就联合注入,有报错,就报错注入等等

2.select title,content from page;

title,content是可以控制的点

select (select password from user where username='admin') ,content from page;

3 注入点在 group by 或者oder by之后

title是可以控制的点

select title,content from page order by title;

select title,content from page order by title,if(2>1,sleep(3),1);

4 注入点在limit 之后 5.6版本之前 8以后废弃

select title,content from page limit 1;

1是可以控制的点

select title,content from page limit 1 procedure analyse(updatexml(1,concat("^",(select user()),"^"),1));

一些绕过小技巧

1.字符串可以转为16进制来用

select 0x63746673686f77

2.相同或者类似功能的函数相互替换

substr sustring

3.mysql 还可以使用into outfile '/var/www/html/1.php' 的形式,从数据读取,转为数据写入,从而实现代码执行

如果mysql对'/var/www/html/1.php' 目录有写权限 ,就可以写入一句话木马来getshell

序列化与反序列化

序列化就是把一个字符串,整数,或者对象,转换成一段可以描述它的字符串 serialize

反序列化就是序列化的逆过程 unserialize

如果属性为public,序列化后,存储的属性名为属性名

如果属性为protect,序列化后,存储的属性名为%00+*+%00+属性名

如果属性为private,序列化后,存储的属性名为%00+类名+%00+属性名

相关推荐
BingoGo16 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack16 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe4 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5