목록전체 글 (109)
Sechack

드림핵에 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)이 호..

CTF에 알고리즘 카테고리가 있고 문제도 7개씩이나 있다... 해킹대횐데...ㅠㅠ 일단 나는 알고리즘을 못하는 사람이므로 안풀려고 했지만 첫번째 문제는 비빌만 해보여서 도전해봤는데 생각보다 쉬웠다. 일단 nc접속정보랑 PDF파일이 주어진다. 주어진 PDF파일을 열어보면 이렇다. 대충 a는 +로 치환하고 m은 *로 치환해서 +가 우선순위 더 높게 괄호로 묶어서 계산한 결과를 mod 2^31-1 해서 보내라는 말이다. 샘플을 보면 더 확실히 와닫는다. 일단 나의 주 아이디어는 주는 문자열에서 a는 +로 m은 *로 치환하고 +일때는 괄호 잘 처리해서 최종적으로는 식을 만든다음에 eval함수로 가져가서 계산결과를 얻고 그것을 보내는것이다. 일단 처음에는 문제 제대로 안읽고 1자리 숫자만 있는줄알고 인덱스가 짝수..

브포날리는데 break안걸어서 맞는거 나오고도 계속 진행되서 결과 안나오는줄 착각하고 조금 삽질한 문제이다. 이문제는 소스코드를 준다. Node.js로 만들어진 사이트고 app.js이외에도 css파일이나 package.json같은것들도 같이주는데 별로 안중요하니 app.js만 보겠다. const express = require("express") const cookieParser = require("cookie-parser") const ejs = require("ejs") require("dotenv").config() const app = express() app.use(express.urlencoded({ extended: true })) app.use(cookieParser()) app.set("..