어제 YISF가 끝났는데 나는 2문제를 풀면서 10위에 머물렀다. 그래도 한문제도 못풀줄 알았는데 리버싱과 웹에서 한문제씩이 엄청 쉽게 나오면서 몇문제는 풀수 있었다. 대회가 10시 시작인데 9시까지 순천향대학교로 가야되서 5시 50분에 나와서 7시 12분 KTX를 타고 갔다. 패턴이 꼬여서 2시에 일어나는 바람에 대회 12시부터 꾸벅꾸벅 졸았던것 같다;;
ELF와 웹 php문제를 풀었는데 리버싱의 Path문제를 거의 6시간 잡고 있었다. 힌트에 어그로가 너무 끌리는 바람에 시간을 너무 썼던것 같다. Path문제도 대회가 끝나고 풀긴 했다.
대충쓰는 Write up
ELF
일단 이문제는 퍼블 따고싶어서 야매로 정연산을 짜지도 않고 pwntools로 바이너리를 가져와서 풀었다.
IDA로 까보면 이게 메인 로직인데 어짜피 flag를 넣으면 주는 "bdbccCbBbAcDCCCaAcdddACcAcaCDCdbAcdDBABDBbadcCBDBbaCDCCABDbaaaee"를 flag.txt로 제공해 주었고 앞글자가 뒷글자에 영향을 받지 않기때문에 YISF{를 넣으면 flag.txt의 일부가 제대로 나오는걸 볼 수 있다.
그래서 그냥 pwntools로 바이너리를 가져와서 YISF{[아스키 범위] 를 넣고 나오는 값을 가져온 뒤에 flag.txt 와 비교하면서 한글자씩 맞추는게 정연산 짜는거보다 빠를것 같았다.
from pwn import *
# flag = 'YISF{h3ll0_r3v_hi_h_i}'
flag = 'YISF{'
enflag = 'bdbccCbBbAcDCCCaAcdddACcAcaCDCdbAcdDBABDBbadcCBDBbaCDCCABDbaaaee'
for j in range(33,128):
p = process('./ELF')
p.sendline(flag+chr(j))
res = p.recvline()
print(chr(j),',',res)
python a.py >> a.txt 이렇게 하면 출력값이 a.txt에 저장되는데 ctrl+f를 이용해 enflag값을 적절히 비교하면 flag를 얻을 수 있다.
FLAG = YISF{h3ll0_r3v_hi_h_i}
PATH
딱봐도 z3길래 돌려봤더니
이런 힌트가 나왔다.
눈치껏 대충 제대로 맞춰보면 HINT{Check_the_resource_and_inject!}인거 같은데 여기서 reversing inject를 구글링하니까 dll inject가 나오길래 이런건줄 알았는데 그냥 exe안에 dll이 들어있는 구조였다.
바이너리를 hxd로 까고 "4D 5A"를 검색하면
이런걸 볼 수 있다.
이걸 다 긁어서 dll로 저장하고 IDA로 까면 flag를 뽑는 함수를 찾을 수 있다.
걍 리스트 뽑아와서 정연산 돌리면 된다.
v7 = [0]*3
v4 = [0]*256
v3 = [0]*56
v7[0] = 5394264;
v7 = 'XOR'
v7 = map(ord, v7)
v3[0] = 96;
v3[1] = 99;
v3[2] = 2;
v3[3] = -108;
v3[4] = 0;
v3[5] = -70;
v3[6] = 115;
v3[7] = -73;
v3[8] = -61;
v3[9] = -123;
v3[10] = -84;
v3[11] = -51;
v3[12] = -5;
v3[13] = -87;
v3[14] = 49;
v3[15] = 115;
v3[16] = 12;
v3[17] = -44;
v3[18] = 20;
v3[19] = 31;
v3[20] = -42;
v3[21] = 74;
v3[22] = -77;
v3[23] = -21;
v3[24] = 85;
v3[25] = 45;
v3[26] = 82;
v3[27] = -59;
v3[28] = -117;
v3[29] = 57;
v3[30] = -68;
v3[31] = 125;
v3[32] = -61;
v3[33] = 101;
v3[34] = 39;
v3[35] = 20;
v3[36] = -5;
v3[37] = 88;
v3[38] = -62;
v3[39] = 37;
v3[40] = 1;
v3[41] = -91;
v3[42] = 51;
v3[43] = 109;
v3[44] = -43;
v3[45] = 69;
v3[46] = -8;
v3[47] = 95;
v3[48] = 99;
v3[49] = -19;
v3[50] = -60;
v3[51] = -94;
v3[52] = -119;
v3[53] = 86;
v3[54] = 0;
v3[55] = 127;
v4[0] = 73;
v4[1] = 51;
v4[2] = 24;
v4[3] = 110;
v4[4] = -114;
v4[5] = 51;
v4[6] = -24;
v4[7] = -48;
v4[8] = 49;
v4[9] = 50;
v4[10] = 110;
v4[11] = -14;
v4[12] = -18;
v4[13] = -50;
v4[14] = 98;
v4[15] = -6;
v4[16] = 104;
v4[17] = -21;
v4[18] = -87;
v4[19] = -116;
v4[20] = -64;
v4[21] = -7;
v4[22] = -125;
v4[23] = 52;
v4[24] = 101;
v4[25] = 118;
v4[26] = 6;
v4[27] = 4;
v4[28] = 46;
v4[29] = -77;
v4[30] = -53;
v4[31] = 126;
v4[32] = -90;
v4[33] = -38;
v4[34] = -25;
v4[35] = -76;
v4[36] = -89;
v4[37] = 48;
v4[38] = 28;
v4[39] = -83;
v4[40] = 42;
v4[41] = -104;
v4[42] = 81;
v4[43] = 11;
v4[44] = 93;
v4[45] = 89;
v4[46] = 64;
v4[47] = -21;
v4[48] = -10;
v4[49] = 32;
v4[50] = 111;
v4[51] = 13;
v4[52] = -57;
v4[53] = 73;
v4[54] = 97;
v4[55] = 53;
v4[56] = -109;
v4[57] = 90;
v4[58] = 13;
v4[59] = -48;
v4[60] = 33;
v4[61] = -48;
v4[62] = -113;
v4[63] = -37;
v4[64] = -114;
v4[65] = 31;
v4[66] = 30;
v4[67] = 1;
v4[68] = -25;
v4[69] = -12;
v4[70] = 62;
v4[71] = 3;
v4[72] = -8;
v4[73] = -67;
v4[74] = 54;
v4[75] = 93;
v4[76] = 94;
v4[77] = 107;
v4[78] = -59;
v4[79] = 39;
v4[80] = -28;
v4[81] = 118;
v4[82] = 17;
v4[83] = 57;
v4[84] = 12;
v4[85] = 34;
v4[86] = -32;
v4[87] = -110;
v4[88] = -21;
v4[89] = 2;
v4[90] = 10;
v4[91] = -5;
v4[92] = 58;
v4[93] = -70;
v4[94] = 47;
v4[95] = -25;
v4[96] = -85;
v4[97] = 8;
v4[98] = -91;
v4[99] = -98;
v4[100] = 121;
v4[101] = 6;
v4[102] = -76;
v4[103] = -102;
v4[104] = 67;
v4[105] = -87;
v4[106] = 6;
v4[107] = 49;
v4[108] = 26;
v4[109] = -114;
v4[110] = 89;
v4[111] = 117;
v4[112] = -39;
v4[113] = -10;
v4[114] = 119;
v4[115] = 89;
v4[116] = -76;
v4[117] = 15;
v4[118] = 104;
v4[119] = 21;
v4[120] = 20;
v4[121] = 117;
v4[122] = -26;
v4[123] = -53;
v4[124] = -93;
v4[125] = -8;
v4[126] = 17;
v4[127] = 106;
v4[128] = -94;
v4[129] = -96;
v4[130] = 100;
v4[131] = -45;
v4[132] = -125;
v4[133] = -18;
v4[134] = -24;
v4[135] = 58;
v4[136] = -76;
v4[137] = 101;
v4[138] = -89;
v4[139] = -49;
v4[140] = -71;
v4[141] = 73;
v4[142] = 100;
v4[143] = -98;
v4[144] = 125;
v4[145] = -89;
v4[146] = -119;
v4[147] = -76;
v4[148] = -22;
v4[149] = -107;
v4[150] = 97;
v4[151] = -124;
v4[152] = -73;
v4[153] = -69;
v4[154] = -121;
v4[155] = -119;
v4[156] = -127;
v4[157] = 18;
v4[158] = -97;
v4[159] = 44;
v4[160] = 30;
v4[161] = -20;
v4[162] = 67;
v4[163] = -25;
v4[164] = 46;
v4[165] = 53;
v4[166] = 64;
v4[167] = -85;
v4[168] = -14;
v4[169] = -8;
v4[170] = 3;
v4[171] = 127;
v4[172] = 98;
v4[173] = 36;
v4[174] = 78;
v4[175] = 107;
v4[176] = 121;
v4[177] = -111;
v4[178] = 48;
v4[179] = -108;
v4[180] = -44;
v4[181] = 62;
v4[182] = 51;
v4[183] = -88;
v4[184] = 123;
v4[185] = -35;
v4[186] = -41;
v4[187] = 124;
v4[188] = -1;
v4[189] = -111;
v4[190] = 63;
v4[191] = -12;
v4[192] = -59;
v4[193] = -10;
v4[194] = 43;
v4[195] = 36;
v4[196] = -95;
v4[197] = 98;
v4[198] = 38;
v4[199] = -76;
v4[200] = -90;
v4[201] = 106;
v4[202] = 1;
v4[203] = -119;
v4[204] = 61;
v4[205] = -88;
v4[206] = 127;
v4[207] = -95;
v4[208] = 117;
v4[209] = -68;
v4[210] = 82;
v4[211] = 63;
v4[212] = -102;
v4[213] = -111;
v4[214] = 70;
v4[215] = 73;
v4[216] = 9;
v4[217] = -30;
v4[218] = -67;
v4[219] = -18;
v4[220] = 66;
v4[221] = -4;
v4[222] = 91;
v4[223] = -117;
v4[224] = 63;
v4[225] = -59;
v4[226] = 2;
v4[227] = -48;
v4[228] = 5;
v4[229] = -3;
v4[230] = 1;
v4[231] = 31;
v4[232] = 120;
v4[233] = -60;
v4[234] = -120;
v4[235] = 52;
v4[236] = 115;
v4[237] = 92;
v4[238] = 96;
v4[239] = 11;
v4[240] = 24;
v4[241] = 49;
v4[242] = -40;
v4[243] = -2;
v4[244] = 101;
v4[245] = 22;
v4[246] = 3;
v4[247] = 47;
v4[248] = 8;
v4[249] = -46;
v4[250] = 32;
v4[251] = 37;
v4[252] = 117;
v4[253] = -37;
v4[254] = 90;
v4[255] = -70;
def ROL(num, count, bits=8):
return ((num << count) | (num >> (bits - count))) & ((0b1<<bits) - 1)
def ROR(num, count, bits=8):
return ((num >> count) | (num << (bits - count))) & ((0b1<<bits) - 1)
flag = ''
for i in range(56):
v5 = v3[i]
v0 = ROR((v4[i%4*i]^v5)&0xff, 4)
v1 = ROL(v7[i%3]^v0, 5)
flag+=chr(v1)
print(flag)
FLAG = YISF{Y0u_d1dn't_c4lcul4t3_all_0f_th1n9s_y0urs3lf_r19ht?}
웹은 소스 옮기기가 귀찮아서 나중에 추가ㅎ,,
'Hacking > 기타' 카테고리의 다른 글
codegate2022 예선 후기 (0) | 2022.03.02 |
---|---|
2022 Hayyim CTF 후기 (0) | 2022.02.13 |
IDA python (0) | 2022.01.17 |
본선 전에 쓰는 YISF 예선 후기 겸 Write up (0) | 2021.08.21 |
Burp Suite (0) | 2021.01.06 |