(1)扫描网站 nikto
发现在生成的报告里,有./svn 目录,链接过去
nikto -h http://http://117.50.3.97:1515 -o result.html // -h 是网站名称 -o 是生成的报告名称
(2)在pristine目录下有源码泄漏
通过dvcs-ripper rip-svn-pl -v -u url,将源码下载到本地,进行审计
./rip-svn-pl -v -u http://117.50.3.97:1515/.svn/
(3)发现在login.php目录下
if (isset($_POST["name"])){
$name = str_replace("'", "", trim(waf($_POST["name"])));
if (strlen($name) > 11){
echo("<script>alert('name too long')</script>");
}else{
$sql = "select count(*) from t_info where username = '$name' or nickname = '$name'";
echo $sql;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if ($row[0]){ //只要非空就black
$_SESSION['hat'] = 'black';
echo 'good job';
}else{
$_SESSION['hat'] = 'green';
}
header("Location: index.php");
}
}
意思是,判断是否输入,如果字长超过11,就会提示太长,否则就会检测sql语句。如果数据库返回的不是空,就成功,否则显示green
if(isset($_SESSION['hat'])){
if($_SESSION['hat']=='green'){
output("<img src='green-hat-1.jpg'>",10);
}else{
output("<img src='black-fedora.jpg'>",1);
echo $flag;
}
如果数据库存在字段hat,并且不是green就返回flag,并且显示black
(4)可能存在注入
输入的是or 1=1-- 有空格,所以被过滤掉了,or 1=1#'的由来,如果被过滤应该怎么办,手工注入探索之旅