목록2021/06 (6)
Sechack

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("..

이거는 포렌식 잘하는 지인분이 스테가노그래피라고 했다. 하지만 나는 스테가노그래피를 할줄 모르기 때문에 이 문제는 처음부터 끝까지 write up을 보면서 했다. 덕분에 좋은 도구도 배웠고 앞으로 CTF에서도 스테가노그래피 문제 쉬운건 툴돌려서 풀긴 할것같다. LSB를 뭐 어케 해서 숨기는거라던데 자세한건 모르지만 킹갓 StegSolve툴이 있으니 당분간은 툴에 의존해야겠다. 시간이 나고 진지하게 포렌식을 파고싶어질때 제대로 할것이다. 아직은 pwn, web해야되고 rev도 배워야된다... 아무튼 문제를 풀어보자면 이런 사진이 나온다. 저기 밑에 화살표를 눌러서 아무리 이미지를 가공해봐도 전혀 플래그 관련된게 나오지 않는다. 그래서 이미지가 아닌 텍스트로 숨겨져있지 않을까 하고 Analyse -> Ext..

두개의 파일을 준다. 그래서 열어봤는데 둘다 같아보인다. 우클릭 하고 속성 가서 크기도 봤는데 둘다 크기가 같다. 근데 zip파일 이름이 compare였다. 비교하라는것 같다. 그래서 HxD키고 파일 비교 기능을 이용해서 비교해봤다. 역시나... 다르다. 첫번째 파일은 N인데 두번째 파일은 H이다. F6을 계속 눌러서 틀린부분을 찾아본다. 첫번째는 q 두번째는 a 첫번째는 I 두번째는 c 첫번째는 0xd9 두번째는 k이다. 걸렸던 문자들 중에서 두번째 이미지에서 걸린걸 조합해보면 Hack이 된다. 첫번째 이미지와 두번째 이미지가 다른부분이 있고 두번째 이미지의 다른부분을 조합해보면 플래그가 나온다는 합리적 의심을 할 수가 있다. 이미 여기까지 봤을때 Hack이라는 문자열이 나왔으므로 매우 높은 확률로 계..

간단하고 가벼운 그림판으로 파일 열어보니까 hex값을 뒤집어 놓았단다. 근데 시그니처나 IHDR 이런건 정상적으로 들어가있다. 애초에 정상적으로 들어가서 이미지가 잘 읽힌것일거고... 근데 밑에보니까 뒤집혀있긴 했다. 뒤집혀있으니까 밑에부분에 시그니처와 헤더가 보이고 우리는 이제 좀더 위로 올리면서 뒤집힌 IEND를 찾아야한다. 뒤집어서 검색해보니까 나온다. 그러면 우리는 여기부터 복붙해서 뒤집으면 되는거다. 저기부터가 뒤집한 png파일이므로 저부분만 복사하고 전체 지우고 붙여넣기 하면 뒤집힌 부분만 추출이 된다. 그리고 이제 추출을 했으므로 파일을 읽고 값을 뒤집고 다시 저장하는 코드를 짜준다. f = open("./waytogo.png", "rb") data = f.read() f.close() fl..