목록전체 글 (111)
Sechack
이번에 해캠 처음 참가해봤는데 팀이 잘걸려서 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++과 같은 객체지향 프로그래밍을 조금이라도 해보신 분들은 이말이 무슨말인지 바로 알것..
딱봐도 xss문제인 baby문제이다. 일단 태그 인젝션이 가능한게 확인되었다. 하지만 태그로 alert를 해주려고 하면 실행이 되지 않는다. 왜그런가 봤더니 Content-Security-Policy: script-src 'nonce-zwsN5tzvG9CmVOzxy0Cabi3ioXs='; 다음과 같이 csp가 설정되어있는것을 볼 수 있다. 따라서 xss공격이 방어가 된다. 하지만 얼핏보면 안전해보이는 저 csp에 큰 문제점이 하나 있다. 바로 base태그에 대한 정책이 누락되어 있다는것이다. 따라서 태그 삽입이 가능하므로 우리는 base태그를 이용해서 base url값을 맘대로 설정할 수 있다. 페이지 소스코드를 보면 /script.js를 로드하는것을 볼 수 있다. 그러면 임의의 웹사이트를 하나 판 뒤에..
calloc에 대한 재미있는 내용을 배운 문제였다. 일단 나는 이문제를 풀때 당시에는 새벽이어서 잠결에 calloc으로 이것저것 해보다가 우연히 걸린거라서 원리는 문제를 풀고 하루가 지난 시점인 지금 알았다. exploit에 사용된 공격 기법은 Tcache Stashing Unlink Attack이다. main함수는 이렇다. 일단 가장 눈에 띄는게 system의 주소를 그냥 출력해준다. 그리고 문제에서 libc파일도 같이 주기때문에 libc leak을 할 필요가 없고 libc database를 사용할 필요도 없다. libc파일의 버전은 2.31이었다. (ubuntu 20.04) 메뉴를 출력해준다. 1번을 선택하면 호출되는 함수이다. 일단 여기서도 메뉴가 있는데 1번 메뉴를 사용하면 malloc(8)이 호..