第十届全国大学生信息安全竞赛一道Web题的Writeup

                                        wanna to see your hat?

 

http://106.75.106.203:1515/mysql

 

 

svn文件泄露sql

 

 

 

使用dvcs-ripper将泄露文件下载下来:session

 

 

 

 

进行代码审计:svn

 

 

 

关键代码:测试

 

$name = str_replace("'","", trim(waf($_POST["name"])));fetch

  if (strlen($name) >11){spa

    echo("<script>alert('name toolong')</script>");blog

  }else{ip

    $sql = "select count(*) from t_info where username ='$name' or nickname = '$name'";io

    echo $sql;

    $result = mysql_query($sql);

    $row = mysql_fetch_array($result);

    if ($row[0]){

      $_SESSION['hat']= 'black';

      echo 'good job';

    }else{

    $_SESSION['hat']= 'green';

}

 

 

name字段长度不能大于11,只要查询语句返回不为空,就执行:

$_SESSION['hat']= 'black';

      echo 'good job';

 

 

 

关键代码:

 

if(isset($_SESSION['hat'])){

    if($_SESSION['hat']=='green'){

    output("<imgsrc='green-hat-1.jpg'>",10);

    }else{

    output("<imgsrc='black-fedora.jpg'>",1);

    echo $flag;

    }

 

若是SESSION中存在hat字段,而且其值不等于green,就输出flag,而设置session的地方就是第一处关键代码所在的地方。

 

而咱们不知道哪一个name值返回不为空,猜想存在注入,burp抓包:

 


 

发现name字段能够注入,不过过滤了不少,经测试发现过滤了空格,%df也被替换了,尝试使用注释绕过,提示good job,说明payload有效,故最终payload为:or /**/1=1#'




在login页面输入框中输入   or/**/1=1#'   即获得flag。