zoukankan      html  css  js  c++  java
  • 实验吧—Web——WP之 因缺思汀的绕过

     

    首先打开解题链接查看源码:

    查看源码后发现有一段注释:

    <!--source: source.txt-->
    这点的意思是:原来的程序员在写网页时给自己的一个提醒是源码在这个地方,我们要查看时将source.txt复制到当前地址栏里替换index.php,然后回车
    就能看到源码了:


    <?php
    error_reporting(0);
    
    if (!isset($_POST['uname']) || !isset($_POST['pwd'])) {
    	echo '<form action="" method="post">'."<br/>";
    	echo '<input name="uname" type="text"/>'."<br/>";
    	echo '<input name="pwd" type="text"/>'."<br/>";
    	echo '<input type="submit" />'."<br/>";
    	echo '</form>'."<br/>";
    	echo '<!--source: source.txt-->'."<br/>";
        die;
    }
    
    function AttackFilter($StrKey,$StrValue,$ArrReq){  
        if (is_array($StrValue)){
            $StrValue=implode($StrValue);
        }
        if (preg_match("/".$ArrReq."/is",$StrValue)==1){   
            print "姘村彲杞借垷锛屼害鍙�禌鑹囷紒";
            exit();
        }
    }
    
    $filter = "and|select|from|where|union|join|sleep|benchmark|,|(|)";
    foreach($_POST as $key=>$value){ 
        AttackFilter($key,$value,$filter);
    }
    
    $con = mysql_connect("XXXXXX","XXXXXX","XXXXXX");
    if (!$con){
    	die('Could not connect: ' . mysql_error());
    }
    $db="XXXXXX";
    mysql_select_db($db, $con);
    $sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
    $query = mysql_query($sql); 
    if (mysql_num_rows($query) == 1) { 
        $key = mysql_fetch_array($query);
        if($key['pwd'] == $_POST['pwd']) {
            print "CTF{XXXXXX}";
        }else{
            print "浜﹀彲璧涜墖锛�";
        }
    }else{
    	print "涓€棰楄禌鑹囷紒";
    }
    mysql_close($con);
    ?>


    在提示中也很清楚的提示了解题思路:
    主要涉及源码审计,MySQL相关的知识。
    在这代码中有意思的地方是:
    $filter = "and|select|from|where|union|join|sleep|benchmark|,|(|)";
    foreach($_POST as $key=>$value){ 
        AttackFilter($key,$value,$filter);
    }
    他将这些sql注入的语句禁止了


    $sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
    $query = mysql_query($sql); 
    if (mysql_num_rows($query) == 1) { 
        $key = mysql_fetch_array($query);
        if($key['pwd'] == $_POST['pwd']) {
            print "CTF{XXXXXX}";
        }else{
            print "浜﹀彲璧涜墖锛�";
        }
    }else{
    	print "涓€棰楄禌鑹囷紒";
    这一部分的语句是说将输入进来的用户名与库里的进行对比,如果正确就输出flag,否则就会报错


    那么接下来我们应该怎么做呢?
    我们进行SQL注入:
    ' or 1=1 group by pwd with rollup limit 1 offset 2 #
    在这句语句中
    ' or 1=1  我们都知道这是注入的一个常用语句,异或为真,恒成立
    group by pwd with rollup  这句是sql里的添加一行,使得密码为空
    limit 1 是查询的意思,查询第一行
    offset 2 是从第二条数据开始查询
    将这条语句输入到第一个框内,提交查询就可以的出flag,如果输入其他就会报错

    
    

     

    
    
  • 相关阅读:
    html的URL参数传值问题
    html背景图片拉伸至全屏
    Laravel 用户验证Auth::attempt fail的问题
    HTML中meta的应用
    ubuntu升级php版本
    Laravel 目录结构分析
    css颜色渐变在不同浏览器的设置
    谷歌浏览器(Chrome)离线包的下载方法!
    RAD Studio 10 up1欢迎页证书不可用
    MySQL
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/8268470.html
Copyright © 2011-2022 走看看