목록전체 글 (103)
Sechack
이문제는 소스코드를 제공해준다. 아마 바이너리만 제공했다면 못풀었을것 같다. #include #include #include #include #include //gcc Cshell.c -static -lcrypt -o Cshell struct users { char name[8]; char passwd[35]; }; struct tracker{ struct tracker *next; struct users *ptr; char name[8]; long int id; }; char * alex_buff; char * Charlie_buff; char * Johnny_buff; char * Eric_buff; struct users *user; struct users *root; struct tracker *..
사이트 드가보면 알고리즘 문제 풀라고 한다. 그래서 알고리즘 문제인줄 알았는데 소스코드에 주석으로 달린걸 보면 알고리즘 문제가 아니다. 플래그가 /flag.txt파일에 있다고 한다. 우리가 코드를 입력하면 그게 컴파일되고 서버에서 실행되니까 C언어를 이용해서 플래그를 가져오는 문제임을 짐작할 수 있다. 하지만 system, execve, open, read등 os command 실행이나 orw를 진행하기 위한 함수들은 키워드 필터링이 되어있었다. 하지만 이것은 seccomp같이 system call자체를 필터링하는게 아니라 단순 키워드 필터링이므로 키워드만 안넣으면 된다. C언어의 syscall함수는 필터링되지 않으므로 그걸 사용하면 원하는 system call을 호출할 수 있게 된다. 그래서 다풀었다 ..
이번에 해캠 처음 참가해봤는데 팀이 잘걸려서 1등한것같다. 작년 해캠 웹문제 보니까 생각보다 쉽길래 이번에도 비슷하게 나오겠지 하고 편한마음으로 임했는데 웹이 너무 게싱이었다... 그래서 솔버가 아무도 없어서 주최측에서 웹문제는 문제마다 힌트를 두세개씩 풀었는데 그때서야 할만했다. write up은 내가 풀었던 문제들과 팀원분이 풀었던 문제중에 조금 인상깊었던것들을 올리겠다. Pwnable Welcome 힙 문제이다. 메뉴가 있다. info에서는 target전역변수의 주소를 주는데 pie가 안걸려있으므로 그냥 IDA에서 보면 된다. Malloc함수는 그냥 0x20만큼 힙 할당해주고 거기다가 데이터 입력할 수 있다. Free함수는 선택한 인덱스에 있는 청크를 해제하는데 초기화를 하지 않아서 DFB가 터진다..
보이다시피 top10을 찍었다. 드림핵에는 회원등급, 워게임, CTF 이렇게 총 3가지의 순위가 있는데 그중 워게임이 top10안에 들었다. 매우 기분이 좋다. 회원등급은 열심히 활동해서 그런지 그다지 관심 두지 않았는데도 경험치가 쭉쭉 올라서 4등이다. CTF순위는... 음... 91등... 처참하다... 거의 백지시절일때 Dreamhack CTF몇번 참가해서 한문제도 못풀고 점수 깎였는데... 지금보면 쉬운문제도 되게 많다...ㅎㅎ... 아무튼 언제 순위가 바뀔지는 모르겠지만 지금은 top10!!
드림핵에 kpwnote문제를 풀고싶어서 시작한 커널 공부이다. kpwnote는 몇시간전에 삽질하다가 결국 풀긴 했다. 목표를 달성했으니 커널공부는 좀 나중에 다시하지 않을까 싶다. 아무튼 커널 입문으로 core문제가 좀 유명하길래 이 문제로 ret2usr이라는 기법을 공부했다. ret2usr은 유저모드에서 커널영역의 주소를 실행하거나 접근하는것은 제한되지만 반대로 커널모드에서는 유저영역에 자유롭게 접근할 수 있다는 특징을 이용해서 커널 모듈의 취약점으로 인해서 rip를 원하는대로 변조할 수 있는 상황에서 프로세스의 코드에 미리 권한상승을 수행하는 코드를 구현해놓고 해당 함수의 주소로 rip를 덮어서 유저영역에 구현해둔 악의적인 코드가 커널 권한으로 실행되도록 유도하는 기법이다. 본격적으로 core문제를 ..
맨날 워게임이랑 CTF문제만 풀면서 포너블을 ELF파일 한정으로 접해봤는데 이번에 김현민 님이 쓰신 "윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇" 이라는 책을 사서 처음 윈도우 포너블을 접해보았다. Stack buffer overflow를 이용한 공격 방법은 ELF익스랑 크게 다르지 않았다. 책 안보고 혼자서 해봐도 될정도로 매우 유사하다. 하지만 buffer overflow공격에 필요한 shellcode를 만드는 과정이 리눅스와는 많이 달라서 흥미로웠다. Universal Shellcode가 필요한 이유는 쉘코드 상에서 WinAPI함수들을 호출해서 사용하려면 해당 함수들의 주소를 알아야 한다. 하지만 Windows7 이상의 버전에서는 WinAPI함수들이 포함되어있는 kernel32.dll의 상위 ..
보호되어 있는 글입니다.
트릭모르면 못푸는 문제이다. 나도 문제풀당시에는 트릭을 몰랐어서 너무 오래걸렸었다. 굉장히 심플한 프로그램이다. 하지만 scanf의 서식지정자로 %zu를 줬을때 scanf내부 로직을 모르면 못푸는 문제이다. 일단 libc leak은 대충 1000000정도로 크기 엄청 크게주면 mmap system call로 따로 공간을 할당해서 사용하고 이 영역은 libc와 offset이 일정하다는 특징을 이용해서 libc leak을 할 수가 있다. 그리고 oob가 발생해서 임의의 주소를 한번 덮을 수 있다. libc주소를 얻었으므로 덮을 수 있는곳은 많다. 일단 먼저 나는 문제에서 ld파일도 주길래 rtld overwrite를 시도했다. 하지만 exit가 아니라 _exit함수여서 결국에는 불가능했다. 남은건 vtabl..
태그 인젝션이 가능하다. report기능이 있으니까 xss를 하면 된다. Content-Security-Policy: script-src https://*.google.com/ 하지만 이러한 CSP에 걸린다. *.google.com에서 오는 javascript만 허용하고 있다. 자 그러면 풀이방법은 브라우저 0-day찾거나 *.google.com도메인으로 돌아가는 서비스에서 멋지게 RCE트리거해서 xss.js만들어준다음 로드시키면 끝난다.(?) 장난이고 구글은 방대한 서비스이다. 구글 서비스중에서 javascript를 실행할 수 있는걸 찾으면 된다. 방대한 구글 서비스들의 소스코드를 하나하나 분석하는건 미친짓이니까 google jsonp xss 이런식의 키워드로 구글링을 해보면 https://github..
들어가서 new game버튼을 누르면 게임이 나온다. 저기 저 보물상자를 먹어야하는것 같은데 강때문에 막혀있어서 키보드로 백날 조작해봐야 못간다. 절대 못깨게 만들어놓은 게임이다. 하지만 이것은 javascript로 돌아가는 게임이다. 따라서 소스코드를 분석해서 캐릭터의 좌표 위치를 담고있는 무언가를 찾은다음에 변조하면 끝날것이다. 근데 저기 보이다시피 소스코드 파일도 많고 파일 하나하나에 들어있는 javascript코드의 양도 굉장히 많다. 따라서 저걸 전부 분석하는데는 한세월이 걸릴것같아서 다른 방법을 떠올렸다. 지금 게임은 현재 실행중이다. 게임개발 조금 해보신분들은 아시겠지만 게임은 요소 하나하나가 객체이다. C++과 같은 객체지향 프로그래밍을 조금이라도 해보신 분들은 이말이 무슨말인지 바로 알것..