목록전체 글 (111)
Sechack
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..
앞으로 이 카테고리에는 글을 적고싶을때마다 내 과거를 화상하며 마음대로 글을 써보려고 한다. 나는 컴퓨터를 초6때 C언어로 처음 접했다. 접하게 된 계기는 매우 단순하고 우연한 계기였다. 친구집에 놀러갔는데 친구가 C#으로 퀴즈프로그램 만들고있길래 뭔가 간지나보여서 어떻게 하는거냐고 물어보고 집에와서 친구한테 질문폭탄 던지면서 똑같이 만들어봤다. 그리고 TV에서만 보던 전문가의 영역인줄 알았던 텍스트코딩을 내가 했다는것에 매우 뿌듯해하고 있었다. 그리고 친구가 본격적으로 코딩 공부해보고 싶다면서 C언어 코딩도장이라는 책을 샀다. 그때당시에는 단순히 내가 쟤보다 빨리 배워야지 하는 지금생각하면 좀 어이없는 경쟁심으로 똑같은 책을 사서 경쟁했다. 그런데 이게 너무 재밌고 흥미있고 내 적성에 맞고 재능까지 보..
간단한 fsb문제이다. 두번 fsb페이로드를 보낼 기회가 있다. 입력은 0x12C만큼 받을 수 있어서 넉넉하다. 첫번째에 leak하고 두번째에 덮으면 될것이다. 나는 전에 dCTF를 하면서 배운 printf함수의 트릭을 사용했다. printf함수는 출력할 문자가 너무 많아지면 내부 루틴에서 malloc을 호출한다는 트릭이다. malloc_hook덮고 맨뒤에 %100000c붙여주면 끝난다. from pwn import * #p = process(["./adult_fsb"], env={"LD_PRELOAD":"./libc.so.6"}) r = remote("ctf.j0n9hyun.xyz", 3040) e = ELF("./adult_fsb") libc = ELF("./libc.so.6") r.send("%49..
이번에는 지인이 준 웹해킹 문제를 풀어보았다. 문제 제작자님은 me2nuk라는 닉네임으로 활동중인 김민욱이라는 분이시다. 일단 문제를 풀때는 소스코드를 제공해주지 않고 uid, upw를 post로 보내서 sql injection을 발생시키라는 정보와 필터링되는 키워드 리스트만 얻었다. filters = ['mid', 'substr', 'substring', 'lpad', 'right', 'left', 'reverse', 'regexp', 'like', ' ', 'in' ] 필터링된 키워드는 대충 이러하다. 가장 걸리는게 공백과 substr이다. 처음에는 Burp Suite를 이용해서 테스트하려 했지만 패킷 구조를 이상하게 보냈는지 그 어떠한 injection페이로드도 먹히지 않길래 그냥 python으로 ..
처음으로 이름만 들어보던 Error based blind sql injection기법을 적용하여본 문제이다. 근데 생각보다 별거 없었다. 기존에 blind sql injection에서 달라진것은 if문을 이용해서 일부러 에러를 유발하는것이다. 문제 소스코드이다. 로그인에 성공했을때 전에 있던 문제처럼 Hello guest같이 반환해주는게 없으니까 우리는 참, 거짓 여부를 알 수 없다. sleep, benchmark함수를 필터링하니까 Time based blind sql injection은 사용할 수 없어보인다. 이것저것 넣어보던 도중 쿼리 에러가 나면 에러 내용이 반환이 된다. 우리는 이걸 이용해서 Error based blind sql injection을 사용할 수 있다. 일단 if문을 사용해서 쿼리의..
문제에서 cipher.txt파일 하나를 준다. 열어보니까 .......... 할말이 없다... 이게뭐지...ㅋㅋ 무려 파일크기가 7000kb가 넘는다. 이게 무슨 암호여;;; 근데 잘 생각해보니까 base64라는 녀석과 비슷해보였다. 생각은 무슨... 그냥 게싱... 그래서 한번 Base64디코딩 사이트에 돌려봤다. 전체 복붙하는건 텍스트가 너무 많아서 브라우저가 렉먹으니까 파일 업로드 기능을 사용했다. https://www.base64decode.org/ Base64 Decode and Encode - Online Decode from Base64 format or encode into it with various advanced options. Our site has an easy to use onl..