首页 技术 正文
技术 2022年11月22日
0 收藏 859 点赞 4,658 浏览 1939 个字

转自先知社区https://xz.aliyun.com/t/2288

在4月的pwnhub比赛中,我们遇到了一个比较神奇的问题,如果在注入中遇到需要延时注入的情况,但服务端过滤了我们一般使用的sleep和benchmark函数,这时候我们有没有办法使用别的方式来替代这两个函数造成延时呢?

这里可以代码看看

<?phprequire 'conn.php';$id = $_GET['id'];if(preg_match("/(sleep|benchmark|outfile|dumpfile|load_file|join)/i", $_GET['id'])){    die("you bad bad!");}$sql = "select * from article where id='".intval($id)."'";$res = mysql_query($sql);if(!$res){    die("404 not found!");}$row = mysql_fetch_array($res, MYSQL_ASSOC);mysql_query("update view set view_times=view_times+1 where id = '".$id." '");?>

很明显$id没有任何过滤就拼接入了update语句,一般来说我们可以用延时盲注来获取数据。

一般我们会用sleep(5)或者是benchmark来多次执行md5操作来换取比较长的执行时间来替代延时。

那么是不是有别的方式替代呢?

笛卡儿积

https://blog.csdn.net/niexinming/article/details/52980140

这种方法又叫做heavy query,可以通过选定一个大表来做笛卡儿积,但这种方式执行时间会几何倍数的提升,在站比较大的情况下会造成几何倍数的效果,实际利用起来非常不好用。

mysql> SELECT count(*) FROM information_schema.columns A, information_schema.columns B;+-----------+| count(*)  |+-----------+ |+-----------+ row in set (9.87 sec)

在一个列数比较少的站内,可能需要3个表做笛卡尔积,延时已经是分钟级别的了

get_lock

这是一种比较神奇的利用技巧,延时是精确可控的,但问题在于并不是所有站都能实现。

https://zhuanlan.zhihu.com/p/35245598

get_lock的官方解释如下

GET_LOCK(str,timeout)Triesto obtain a lock with a name given by the string str, using a timeout oftimeout seconds. A negative timeout value means infinite timeout. The lock isexclusive. While held by one session, other sessions cannot obtain a lock ofthe same name.

当我们锁定一个变量之后,另一个session再次包含这个变量就会产生延迟。

mysql);+---------------------+) |+---------------------+ |+---------------------+ row in set (0.00 sec)

换新的session

mysql);+---------------------+) |+---------------------+ |+---------------------+ row in set (5.00 sec)

值得注意的是,利用场景是有条件限制的:需要提供长连接。在Apache+PHP搭建的环境中需要使用 mysql_pconnect函数来连接数据库。

正则bug

这是一个老生常谈的问题了,但之前可能很少会把它放到注入里讨论。

正则匹配在匹配较长字符串但自由度比较高的字符串时,会造成比较大的计算量,我们通过rpadrepeat构造长字符串,加以计算量大的pattern,通过控制字符串长度我们可以控制延时。

mysql,),'b');+-------------------------------------------------------------+,),'b') |+-------------------------------------------------------------+ |+-------------------------------------------------------------+ row in set (5.22 sec)
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,026
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,517
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,364
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,145
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,779
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,856