发现注入点:
http://www.xxx.com/xx.php?id=xxxx
直接sqlmap脱库,发现有admin表,内容是显示的是账号admin密码admin,这时心里高兴了下,没加密。可是,曲折的在后面呢 !管理后台很容易找到,直接上admin admin 可是,显示密码不对,怎么回事??
在看看数据库,翻遍数据库,账号密码也就这一个admin admin,(事实上也是这么回事) ,看看它登陆页面的源码吧,注入点能爆路径,可以读出文件内容,直接读login.php 内容如下:

<?
$filename = "password.txt";
$fd = fopen( $filename, "r" );
$contents = fread($fd, filesize($filename));
fclose( $fd );
if($T1=="admin"){
     if($T2==$contents){
        setcookie("ad","$T1");
        header("location:editor/edit_index.php");
     }else{
     ?>
      <script language="javascript">
      alert("密码错误");
      window.history.back();
      </script>
     <?
   }
}else{
   ?>
    <script language="javascript">
      alert("用户名错误");
      window.history.back();
      </script>
   <?
   }
?>

看到了吧!!!当时我就愣了一下,靠。。。。。。。。你妹的,怪不得找不到密码呢 好了,直接在域名后面加password.txt,密码出来了。 登陆后台页面,发现三个上传点,第一个是eweb3.8 (直接放弃),第二个上传点控制
的非常死,各种变换都不行。还是第三个注入点有用,直接上传d,php,提示上传成功, 呵呵,上传是成功了,但是找不到路径,找啊找就是找不到路径。。晕啊。。。。。。。。。 找上传图片的路径,这时在读处理上传的php代码,代码如下

<?
if($_FILES['sytp']['name']!="none"&&$_FILES['sytp']['name']!=""){//判断上传文件是否为空
$thistype=$_FILES['sytp']['type'];//将上传的类型传给$thistype
//echo time().$_FILES['sytp']['name'];
//exit;
if("image/pjpeg"==$thistype or "application/x-shockwave-flash"==$thistype or "image/gif"==$thistype){//判断是否是我要的类型
  $file_name = "shouyetupian/".time().$_FILES['sytp']['name'];//time()是为了区分两个文件不是同一时间传的
include("../connect.php");//调用connect.php里的内容
$sql="select count(*) from shangchuantu";
$result=mysql_query($sql,$db);
$jie=mysql_fetch_row($result);
$zhong=$jie[0];
if($zhong<5){
$sql1="select max(paixu) from shangchuantu";
  $result1=mysql_query($sql1,$db);
$jie1=mysql_fetch_row($result1);
$zhong1=$jie1[0];
$zhong1=$zhong1+1;
  $query="insert into shangchuantu values('','$file_name','".$_POST['url']."','','$zhong1')";
  mysql_query($query,$db);

  if(!move_uploaded_file($_FILES['sytp']['tmp_name'], $file_name)) {//上传文件,$_FILES['sctb']['tmp_name']临时目录传到$file_name实际目录
?>
  <script language="javascript">
  alert("文件上传失败,请稍候再试");
  window.history.back();
  </script>
<?
}else{//上传成功
?>
<script language="javascript">
alert("文件上传成功!");
  location.href="shanchuantu.php";

</script>
<?

}
}else{
?>
<script language="javascript">
  alert("图片不能超过5张");
  window.history.back();
  </script>
<?
}
}else{//如果类型不对
?>
  <script language="javascript">
  alert("文件上传失败,请稍候再试");
  window.history.back();
  </script>
<?

}
}else{
?>
<script language="javascript">
  alert("请选择上传图片");
  window.history.back();
  </script>
<?
}
?>

 

关键是file_name 是怎么形成的,
$file_name = "shouyetupian/".time().$_FILES['sytp']['name'];
Time() 返回自从Unix 纪元(格林威治时间1970 年1 月1 日00:00:00)到当前时间的秒数 比如你上传文件名为d.php,上传之后文件名为:     当前时间d.php 从代码页可以看出,是不返回上传后的文件名,这时怎么办,根据时间去碰文件名 本地搭建php服务器,echo 出time() 上传之前访问本地 http://127.0.0.1/time.php返回时间:1345279425 这时快速的去目标网站去上传图片,多上传几个,道理你懂的,呵呵 上传完了之后在访问http://127.0.0.1/time.php 记下时间1345279475 相差50秒,也就是说上传的文件名在1345279425d.php—-1345279475d.php 之间.好吧,去碰吧。。。。。。。。。。。。。。。。。。。。。。。。。 碰啊碰。。。。。碰到了啊。。。。。。 菜刀连接,,成功!!!!!!!!!

源链接

Hacking more

...