분류 전체보기

계기 지금까지 ftz, lob 등 shellcode가 필요한 wargame을 풀 때면 구글링을(ex : 32bit shellcode 검색) 통해 얻은 shellcode로 풀이를 진행했었다. 그런 식으로 풀이를 하다가 갑자기 오늘 이런 생각이 들었다. "굳이 인터넷에서 남이 만든 쉘 코드를 가져올 필요 없이 내가 직접 원하는 기능을 하는 쉘 코드를 만들면 되지 않을까?" 쉘 코드를 만든다면 어셈블리어에 대한 이해도가 높아질 것이며, 또한 구글링을 통해 얻는 쉘 코드는 기능적 제약 사항이 있으므로 공부 삼아 직접 만들어보기로 했다. System Call 쉘 코드를 만들기 전 알아야하는 지식으로 system call이 있다. srop 공격을 공부해봤다면 쉽게 알 수 있는 내용인데, 이 system call이란..
보호되어 있는 글입니다.
· CTF
HSCTF 8의 stonks 문제다. 이 문제는 대회 기간 내에 풀지 못했지만, 좋은 교훈을 얻을 수 있던 문제라서 풀이한다. 문제를 실행하면 다음과 같은 실행 화면이 나온다. 출력된 문구들을 보면 ai 주식 가격 출력 프로그램인 것 같다. 'Please enter the stock ticker symbol: '라는 문구를 통해 사용자의 입력을 받는데, 시험삼아 많은 수의 1을 입력으로 주니 segmentation fault가 터졌다. bof 취약점이 있는 것 같다. ida를 통해 문제의 main 함수를 확인해보면 puts 함수를 통해 문구들을 출력하고 이름부터 취약한 vuln 함수를 실행해 주는 것을 알 수 있다. vuln 함수에서 사용자의 입력을 처리하는데, 문제는 bof 취약점이 있는 gets 함수..
· CTF
HSCTF의 seeded-randomizer 문제다. 자바 파일이 하나 주어져 있다. import java.util.Random; public class SeededRandomizer { public static void display(char[] arr) { for (char x: arr) System.out.print(x); System.out.println(); } public static void sample() { Random rand = new Random(79808677); char[] test = new char[12]; int[] b = {9, 3, 4, -1, 62, 26, -37, 75, 83, 11, 30, 3}; for (int i = 0; i < test.length; i++) ..
· CTF
ThcCTF 2021의 Living QR Code 문제다. gif 파일이 하나 주어져 있다. gif 파일을 열어본다면 위 사진과 같은 QR 코드가 나오는데, 문제는 gif 파일이다 보니 QR 코드 이미지가 바뀌어 가면서 보여진다. 일단 무엇을 하든 gif로 압축된 원본 사진 파일들이 필요할 것 같아서 jpg로 변환했다. (변환에 사용한 사이트다. https://ezgif.com/gif-to-apng) 위는 gif파일을 jpg로 변환한 모습이다. 확인해보니 각각 모양이 다른 QR code 이미지 41개가 존재했다. 처음에는 이 이미지들을 모두 겹쳐서 만들어진 QR code를 스캔해야지 flag를 얻을 수 있지 않을까 생각해 이미지 겹치기 관련해서 구글링을 했었다. 하지만 답은 생각보다 간단했었다. 단순히 ..
· CTF
ThcCTF 2021의 SQL for dummies 문제다. 웹 사이트 주소가 주어져 있는데, 해당 웹 사이트를 통해 flag를 얻는 것 같다. 문제 이름, 설명을 고려했을 때 sql injection을 통한 로그인 우회로 flag를 얻는 것 같다는 생각이 들었다. 주어진 주소에 접속하면 위 사진과 같은 화면이 뜬다. 예상대로 로그인 화면이다. 보통 username, password가 유효(올바른지)한지 검증하는 취약한 sql 쿼리문은 select from where = '' and = '';로 처리된다. 이 문제 역시 위와 같은 쿼리문으로 작성됐다 가정하고 쿼리문의 where(조건)절이 무조건 참이되도록 1' or '1' = '1' --를 입력 값으로 줘 보았다. (처음에는 admin으로 로그인해야지 ..
· CTF
ThcCTF 2021의 Welcome 문제다. 이 문제는 설명에 나와 있는 discord 서버에 들어가기만 해도 flag를 준다.
· Wargame/FTZ
level19로 로그인한 후 hint를 확인해보면 소스코드가 나온다. 전 단계에서 많은 양의 코드를 보여줬기에 19 level은 더 많거나 복잡할 줄 알았지만 예상보다 간단했다. 소스코드도 작고 대놓고 gets 함수가 보여서 bof가 일어남을 알 수 있다. 공격은 gets를 통해 overflow를 일으켜 ret를 쉘 코드가 들어간 환경변수의 주소로 변조하면 될 것 같다. 이번 단계는 setuid가 없기 때문에 setuid가 포함된 쉘 코드를 써야겠다. main의 함수 프롤로그 부분과 gets 함수 부분에 bp를 걸고 실행한다면 ret와 buf의 스택 주소를 알 수 있다. ret : 0xbffff45c buf : 0xbffff430 따라서 ret와 buf 사이의 거리는 44byte인 것을 알 수 있다. r..
· Wargame/FTZ
level18로 로그인하고 힌트를 보면 굉장히 긴 코드가 나온다. 다른 level에 없던 긴 코드에 조금 쫄았으나, 취약점은 굉장히 간단하다. #include #include #include #include void shellout(void); int main() { char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(..
· Wargame/FTZ
level17로 로그인한 후 hint 파일을 확인해보면, 역시 소스코드가 주어져 있다. level16과 마찬가지로 call에 printit가 들어가고 fgets를 통해 overflow가 일어나는데, 이번에는 shell을 얻게 해주는 함수가 없다. shell을 얻게 해주는 함수가 없으므로 쉘 코드를 환경변수에 삽입한 뒤 주소를 구한 뒤, stack overflow를 통해 call의 값을 쉘 코드가 들어간 환경변수의 주소로 변조해주면 될 것 같다. export 명령어로 쉘 코드를 환경변수에 등록한 뒤 미리 빌드해둔 tmp 폴더 내 env 파일을 실행해서 쉘 코드가 들어 있는 환경변수의 주소를 구했다.(앞에 \x90을 추가해준 이유는 \x90 없이 쉘 코드만 넣어준다면 제대로 쉘이 얻어지지 않기 때문이다.) ..
dyp4r
'분류 전체보기' 카테고리의 글 목록 (5 Page)