http://bbs.phpdisk.com/thread-5143-1-1.html
下载地址。
WooYun: phpdisk V7 sql注入2
WooYun: phpdisk V7 sql盲注一枚
话说之前提交的两个phpdisk的漏洞都被忽略 乌云君补个分可好。
_________________________________________________________________________
在phpdisk_del_process.php中
全部问题都出在这代码中。
$arr = explode('.',$pp);
这里.用来分割。
0x01:注入
看这里 直接把$file_id 带入查询。 但是之前未定义。 所以不会被转义。
可控 造成了注入。
但是这里没有输出的地方。 可以盲注 看看能否造成更大的伤害。
0x02:重装系统
这里 只要查询出来的数字为1 就直接删除这个文件
这里用了.来切割 所以不能利用../ 来向上跳目录 不过好在他删除的是PHPDISK_ROOT.$src_file 是从根目录开始的 所以就不用向上了。
切割后 第一个就作为文件名 第二个就作为后缀 看看第二个进入的函数。
检测到如果含有这些后缀的 就重新定义为txt。
但是在这里面并没有lock。 所以我们可以来删除lock 然后重新装系统 再达到getshell。
首先我们需要让$num为1
在这里 如果$num要为1的话 需要数据库中存在这个文件才行。 所以得上传。
但是如果这里我懒得去上传呢? 那就让$rs[file_real_name] 为a' union select 1#
这样就不需要上传了。
此时执行的语句如此。
再limit 1,1 就能让num为1了。
成功删除lock
即可直接重装 可轻松getshell。
0x03 鸡肋Getshell。
继续看这个文件
如果num 不为1 就不会删除文件了。
而是把这些信息写入个日志文件里, 而且这个日志文件还是php的文件。
但是在开头定义了 <? exit; ?> 。
为什么说鸡肋呢 就是因为这个<? exit; ?>。
这里用的是<? 短标签 。 需要php.ini中开启short_tag
如果short_tag 为off的话 是不会执行这个exit的。
虽然在安装phpdisk的时候会提示需要short_tag 为on
但是也不能排除一些用户在安装之后 关掉了这个。
所以 当 short_tag 为off的时候 轻松getshell。
配置文件中。
直接访问。