티스토리 뷰
CTF_WriteUps/2015_CTF
[2015_School_CTF] (Admin 200) Cipollino, little onion
hackability 2015. 11. 8. 14:37최종 수정: 2015-11-08
hackability@TenDollar
안녕하세요. Hackability 입니다.
이번에 포스팅 할 내용은 2015 School CTF 의 Admin 200 문제 입니다.
문제 웹 페이지에 접속하면 다음과 같은 이미지 하나가 뜹니다.
해당 jpg 파일을 다운받아 내용을 살펴 보면 RAR 압축으로 그림 파일 하나가 포함되어 있음을 알 수 있습니다.
파일을 해제 하면 다음과 같은 QR 이미지 파일이 나옵니다.
온라인 QR Code Reader ( https://zxing.org/w/decode ) 같은 곳에서 해당 QR 코드를 읽으면 다음과 같은 코드가 나옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> #include <cstdio> using namespace std; unsigned int key=2343454423; unsigned char gen_key(){ key=key*4356776434567+65765; return (unsigned char) ((unsigned int)(key/65536)%32768); } int main(){ unsigned int mas[]={18, 8, 43, 102, 31, 185, 187, 48, 34, 195, 107, 9, 7, 228, 188, 131, 72, 89, 232, 220, 25, 64, 176, 18, 220, 61, 149, 41, 208, 216, 41, 105, 76, 139, 154, 48, 157, 174, 50, 235, 138, 200, 206, 108, 106, 203, 231, 169, 158, 102, 5, 86, 8, 57, 80, 19, 216, 188, 139, 210, 36, 252, 6, 81, 73, 91, 53, 63, 10, 30, 27, 211, 216, 100, 84, 150, 76, 179, 154, 144, 124, 34, 189, 221, 21, 84, 159, 40, 30, 1, 191, 161, 48, 115, 178, 120, 172, 28, 45, 221, 86, 113, 108, 131, 22, 198, 86, 148, 38, 125, 94, 127, 230, 234, 19, 204, 90, 40, 153, 169, 15, 213, 174, 139, 26, 117, 172, 160, 93, 127, 1, 33, 151, 92, 46, 141, 219, 39, 86, 249, 156, 170, 174, 32, 249, 98, 135, 42, 187, 70, 192, 32, 168, 83, 95, 253, 63, 0, 244, 136, 85, 115, 51, 56, 183, 85, 253, 195, 135, 52, 164, 204, 162, 36, 255, 27, 141, 11, 184, 133, 27, 209, 16, 119, 144, 23, 79, 60, 48, 33, 136, 51, 23, 242, 211, 60, 72, 153, 123, 254, 34, 228, 127, 225, 237, 34, 0, 132, 197, 71, 110, 234, 69, 106, 237, 99, 51, 202, 114, 194, 33, 53, 249, 204, 197, 12, 185, 28, 36, 204, 245, 63, 103, 126, 99, 16, 126, 79, 221, 106, 1, 17, 224, 170, 22, 213, 219, 21, 116, 146, 90, 238, 62, 144, 176, 0, 100, 211, 85, 132, 155, 198, 138, 51, 79, 136, 153, 43, 232, 15, 210, 43, 249, 22, 248, 76, 136, 40, 221, 222, 218, 94, 13, 44, 210, 35, 140, 113, 209, 148, 210, 110, 51, 183, 195, 80, 88, 247, 2, 161, 212, 230, 161, 53, 85, 180, 38, 113, 78, 115, 31, 220, 101}; unsigned char gen_mas[313]; int j; for(j=0;j<313;j++){ gen_mas[j]=mas[j]^gen_key(); } for(j=0;j<313;j++){ printf("0x%x, ", gen_mas[j]); } cout << endl; } | cs |
이 코드를 python 코드로 변경하면 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | key=2343454423; msg = [18, 8, 43, 102, 31, 185, 187, 48, 34, 195, 107, 9, 7, 228, 188, 131, 72, 89, 232, 220, 25, 64, 176, 18, 220, 61, 149, 41, 208, 216, 41, 105, 76, 139, 154, 48, 157, 174, 50, 235, 138, 200, 206, 108, 106, 203, 231, 169, 158, 102, 5, 86, 8, 57, 80, 19, 216, 188, 139, 210, 36, 252, 6, 81, 73, 91, 53, 63, 10, 30, 27, 211, 216, 100, 84, 150, 76, 179, 154, 144, 124, 34, 189, 221, 21, 84, 159, 40, 30, 1, 191, 161, 48, 115, 178, 120, 172, 28, 45, 221, 86, 113, 108, 131, 22, 198, 86, 148, 38, 125, 94, 127, 230, 234, 19, 204, 90, 40, 153, 169, 15, 213, 174, 139, 26, 117, 172, 160, 93, 127, 1, 33, 151, 92, 46, 141, 219, 39, 86, 249, 156, 170, 174, 32, 249, 98, 135, 42, 187, 70, 192, 32, 168, 83, 95, 253, 63, 0, 244, 136, 85, 115, 51, 56, 183, 85, 253, 195, 135, 52, 164, 204, 162, 36, 255, 27, 141, 11, 184, 133, 27, 209, 16, 119, 144, 23, 79, 60, 48, 33, 136, 51, 23, 242, 211, 60, 72, 153, 123, 254, 34, 228, 127, 225, 237, 34, 0, 132, 197, 71, 110, 234, 69, 106, 237, 99, 51, 202, 114, 194, 33, 53, 249, 204, 197, 12, 185, 28, 36, 204, 245, 63, 103, 126, 99, 16, 126, 79, 221, 106, 1, 17, 224, 170, 22, 213, 219, 21, 116, 146, 90, 238, 62, 144, 176, 0, 100, 211, 85, 132, 155, 198, 138, 51, 79, 136, 153, 43, 232, 15, 210, 43, 249, 22, 248, 76, 136, 40, 221, 222, 218, 94, 13, 44, 210, 35, 140, 113, 209, 148, 210, 110, 51, 183, 195, 80, 88, 247, 2, 161, 212, 230, 161, 53, 85, 180, 38, 113, 78, 115, 31, 220, 101] res = [] for i in range(0, len(msg)): key = (key*4356776434567+65765) & 0xFFFFFFFF res.append( msg[i] ^ (((key / 65536) & 0xFFFFFFFF) % 32768 ) & 0xFF ) test = '' for i in range(0, len(res)): test += hex(res[i])[2:].replace('L', '').decode('hex') print test | cs |
그러면 결과로 다음과 같이 인코딩 된 값을 얻을 수 있습니다.
B64'YSA9ICc3MCA3NiA2NSA3MSA5NSA3MSA0OCA2OCA5NSA2OCA2NSA3NyA3OCA5NSA2NiA4MiA0OCA5NSA4NSA5NSA4MiA5NSA4MyA0OCA5NSA2NyA0OCA0OCA3NiA5NSA2OCA2OSA2NyA4MiA4OSA4MCA4NCA3OSA4MicKCm1hcz1bXQoKbWFzPWEuc3BsaXQoJyAnKQoKZm9yIGkgaW4gcmFuZ2UobGVuKG1hcykpOgoJYj1pbnQobWFzW2ldKQoJYz1oZXgoYikKCXByaW50KGMsIGVuZD0nICcpCgpwcmludCgnJyk='
위 스트링을 다시 디코드 하면
1 2 3 4 5 6 7 8 9 10 11 12 | a = '70 76 65 71 95 71 48 68 95 68 65 77 78 95 66 82 48 95 85 95 82 95 83 48 95 67 48 48 76 95 68 69 67 82 89 80 84 79 82' mas=[] mas=a.split(' ') for i in range(len(mas)): b=int(mas[i]) c=hex(b) print(c, end=' ') print('') | cs |
이런 코드가 나오게 되고 이를 python 3.0 에서 구동 시키거나 적절히 수정하여 b 값을 chr 로 찍으면 다음과 같이 플래그가 떨어지게 됩니다.
F L A G _ G 0 D _ D A M N _ B R 0 _ U _ R _ S 0 _ C 0 0 L _ D E C R Y P T O R
'CTF_WriteUps > 2015_CTF' 카테고리의 다른 글
[2015_School_CTF] (Exploit 300) Command line security (0) | 2015.11.08 |
---|---|
[2015_School_CTF] (Crypto 200) Master of guesswork (0) | 2015.11.08 |
[2015_TrendMicro_CTF] (Programming 300) Maze (0) | 2015.10.27 |
[2015_TrendMicro_CTF] (Programming 200) 사칙연산 풀기 (0) | 2015.10.27 |
[2015_TrendMicro_CTF] (Programming 100) click on the different color (0) | 2015.10.27 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- School CTF Write up
- 힙 스프레잉
- shellcode
- IE 10 God Mode
- IE 10 Exploit Development
- shellcode writing
- 2015 School CTF
- heap spraying
- WinDbg
- 윈도우즈 익스플로잇 개발
- School CTF Writeup
- TenDollar CTF
- 2014 SU CTF Write UP
- IE UAF
- Mona 2
- Windows Exploit Development
- Use after free
- IE 10 리버싱
- 쉘 코드
- TenDollar
- 데이터 마이닝
- data mining
- 쉘 코드 작성
- IE 11 exploit development
- IE 11 UAF
- expdev 번역
- UAF
- IE 10 익스플로잇
- CTF Write up
- IE 11 exploit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함