本帖最后由 true 于 2016-2-4 00:08 编辑
纯属友情: 原因是有一个朋友在这学校读书,准备过几天去他们学校玩下,于是职业病又来了打算测试下他们学校的安全。 经过简单的抓取连接扫描注入目标锁定在招生就业网。 一共是四个ip是这学校的在同一C段。 让我们来分析下这服务器的情况: 1:linux+php+mysql4 mysql4没有information_schema这个虚拟裤。 2:mysql root权限 可以读文件。 3:GPC 为on URL情况下不可以写文件。 4:后台地址也找好了。 5:没有发现类似phpmyadmin这样的管理软件。 6:扫描结果没发现上传漏洞和其他些可以直接写shell的远程执行代码的利用。
大致情况就这样: 思路: 1:mysql4+root :找到物理路径,读取文件社工管理。 2:爆力猜表和字段最后进后台拿shell。 3:利用mysql远连写shell。(发现不可以连) 从目前来看2看起来容易实现,因为毕竟程序员还是喜欢用常用的单词来做表名。
正始开工: 利用注入点。先手工确定下是不是存在注入。
看图吧。代码都很清楚。
打算丢工具去跑表。结果失败没有找到。
这个时候load_file()就发威作用了。 找了几个常用的地址去读。
/var/www/html/include/web_concent.php 不存在
/etc/httpd/conf/httpd.conf 不存在
/usr/local/apache/conf/extra 不存在
/usr/local/apache/conf/httpd.conf 不存在
/usr/local/apache2/conf/httpd.conf 存在。
并找到了目标站的路径。路径:/home/wwwroot/zhaosheng.axhu.cn/
有了路径我们就好读网站源码了。直接读后台文件:admin/index.php本来想构造下万能密码的,想起来了GPC为on。
好嘛,那我们找到验证后台的SQL语句来。找出表名和字段名。
表名:web_user 字段名:username,password。工具增加表名和字段名,很快得出了结果。
但是密码是加密的,当时没注意以为是md5加密。去解密的时候提示不符合。直接明文试下也失败了。
这个时候,去尝试了下用mysql的root密码社工失败。
暂时陷入了僵局...
继续读后台文件看能发现什么验证饶过不,或是能否发现些包含,eval等。结果还是没收获。
最后回到后台验证页面,刚发现了他的验证并不是在这个文件里完成的,而是在包含的别的文件里完成。
一路读代码跟踪代码到公共函数文件里。 后台文件code:
<?php/********************************************
/ 作者:匿名
/ 时间:不详
/ 作用:用户登录
********************************************/
require'./include/common.inc.php';
$username = $_POST['username'];
$password = $_POST['password'];
if(!empty($username) && !empty($password) && !empty($web_auth_key)){
$UserInfo =UserLogin($username,$password);
if($UserInfo) {
//保存用户信息
SetUserInfo($UserInfo);
//修改登陆次数和状态
$sql="UPDATE web_user SET
Online=1,Logincount=Logincount+1,Lasttime='".$PHP_DATE."' WHERE
Username='".$username."'";
$db->sql_query($sql);
//添加日志
AddLog("登录系统");
省略代码....?>
最后跟到global.func.php发现公共函数里有个加密解密函数。
/**
*加密,分别能加密和解密。通过传入$operation = 'ENCODE'|'DECODE' 来实现。
*/
functionauthcode($string,$operation='ENCODE') {
if($operation=='ENCODE'){
$OutTxt = "";
for ($x=0;$x<strlen($string);$x++) {
$nr= ord($string[$x]);
if($nr < 128) {
$nr += 128;
}
elseif($nr > 127) {
$nr -= 128;
}
$nr= 255 - $nr;
$OutTxt.= sprintf("%02x", $nr);
}
return $OutTxt;
}else{
$OutTxt = "";
for ($x=0;$x<(strlen($string)/2);$x++){
$nr= hexdec($string[$x * 2] . $string[($x * 2) + 1]);
$nr= 255 - $nr;
if($nr < 128) {
$nr += 128;
}
elseif($nr > 127) {
$nr -= 128;
}
$OutTxt.= chr($nr);
}
return $OutTxt;
}这下好了,我们把得的密码放本地来解密就ok!
登录后台:
后台拿shell也很简单,在模板那里可以直接上传php马。但是路径模糊一段时间。
正好我手上有个2.6.9 通杀的exp Chmod 777 ./2.6.9./2.6.9
内网ip 今天到公司小马继续用lcx 把端口转发出来了。我继续把其他的ipshell 拿下。
这上面有其他28 个子站,但是提权不成功。内核2.6.9-42 主站也找到了突破口只是数据库不定的超时,现在还没有弄下来,也是一个mssql sa 权限注入。
支持多语句,经过我简单修复后不再提示联机丛书那个错误了,但不为什么老是爆数据库连接超时。所以只有等服务器不是那么卡再继续了。
此文章转载别处。。最后、、原作者与基友提权成功。仅供参考。。
|