일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- heap
- 큐
- fsb
- 문자열 처리
- OOB
- ROP
- House of Orange
- 이분 탐색
- 동적 계획법
- 스택
- 수학
- tcache
- 투 포인터
- 연결리스트
- 분할 정복
- BOF
- off by one
- 완전 탐색
- DFS
- 이진트리
- 에라토스테네스의 체
- 포맷스트링버그
- RTL
- 브루트 포스
- BFS
- syscall
- 이진 탐색
- 다이나믹 프로그래밍
- 백트래킹
- 스위핑 알고리즘
- Today
- Total
목록분류 전체보기 (218)
SDJ( 수돈재 아님 ㅎ )
https://jun-lab.tistory.com/198 CONFidence 2020 CTF - Hidden flag 일단 처음 페이지에 들어가면 Query와 Parse 버튼이 있고, 아래 입력할 수 있는 창이 존재한다. 이것이 무엇인지 잘 몰라서 일단 아무거나 입력하고 보내니까 Error occurred가 뜨면서 Yara rule .. 뭐시기가 뜨더.. jun-lab.tistory.com
파일 다운로드 보호기법을 보면 다음과 같다. 바이너리를 분석해보자. int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // ebx unsigned int v4; // eax unsigned int v6; // [rsp+Ch] [rbp-2Ch] while ( 1 ) { show_menu(); v3 = read_int("Operator: "); if ( !v3 ) break; v4 = read_int("x = "); ((void (__fastcall *)(_QWORD, unsigned int *))ope[v3 - 1])(v4, &v6); __printf_chk(1LL, "f(x) = %d\n", v6); } return 0;..
일단 처음 페이지에 들어가면 Query와 Parse 버튼이 있고, 아래 입력할 수 있는 창이 존재한다. 이것이 무엇인지 잘 몰라서 일단 아무거나 입력하고 보내니까 Error occurred가 뜨면서 Yara rule .. 뭐시기가 뜨더라. 그래서 Yara rule에 대해 검색을 하다가 https://github.com/plyara/plyara plyara/plyara Parse YARA rules and operate over them more easily. - plyara/plyara github.com 이 사이트에서 다음과 같은 Yara rule을 찾게 되었다. rule silent_banker : banker { meta: description = "This is just an example" th..
파일 다운로드 으아 피곤하다 alloca함수를 처음 본 바이너리다. 돌리다가 계속 어딘가에서 터지는데 원인을 잘 몰라서 어셈블리어로 찬찬히 디버깅했더니 alloca(4 * n)하는 부분에서 뭔가 오류가 있는듯 보인다. 어셈블리로 본 alloca(4 * n)을 하는 과정 결론만 보면 별거없긴 한데.. 어셈블리어 로직상 alloca가 할당해주는 범위가 입력한 n*8보다 작기 때문에 입력을 하면서 alloca가 할당한 스택 프레임을 원하는 값으로 바꿀 수 있고, 원하는 값을 쓸 수 있게된다. 그래서 나는 atol 함수를 printf로 바꾸고 포맷스트링을 하다가 main함수의 ret를 one_gadget으로 바꾸고 익스했다. 어셈 초보의 노오력... 어셈블리어를 몰라서 이마저도 힘들게 느껴지는데 분발해야지.. ..
파일 다운로드 다운로드 받은 파일에 libc파일이 없길래 2.23인줄알고 삽질만 계속하다가 정 모르겠어서 분류를 따로 찾아보니 tcache라더라... 먼저 보호기법 Partial RELRO, Canary, NX가 걸려있다. 이전에 2.23에서 삽질할 때 double free까지 되는것을 보고 fastbin dup을 이용하는 문제인것 같았는데 strdup때문에 어떻게 익스해야하나.. 계속 고민을 했다가 2.27인거보고 개허무.. 2.23은 푸는 방법이 없나? 고민해보도록.. 바이너리를 분석해보자. ADD() 함수 분석 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 void add(List *list) { char buf[12..
utctf끝나고 참가하지 못했던 zer0ctf의 pwn도 풀어보고자 바이너리를 찾아봤다. hipwn은 기본적은 warmup 문제다.. 보호기법은 Partial RELRO에 NX가 활성화 되어있다. hipwn은 statically linked 되어있기 때문에 syscall을 통해 exploit을 진행해야 한다. 문제에서 주어진 main.c를 보면 gets함수에서 bof가 발생하는 것을 볼 수 있다. 간단하게 execve("/bin/sh", 0, 0)을 실행시키는 코드를 만들어서 실행시키면 쉘을 딸 수 있다. exploit code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ..
두번째 익스다... 첫번째 글 쓸때 쉘코드 이야기 했더니 갑자기 머리에 갑자기 쑝하고 지나가서 바로 익스플로잇을 진행했다. 왜 ret만 바꾸려고 했을까 got가 있는데.. fsb 한번에 bss영역 쓰는게 벅찰거라고 생각한건지... 아마 대략 6백만?만큼 길게 쓰는거 기다리는게 귀찮아서 더 귀찮은 방법을 선택한 것 같다....( 무엇 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 from pwn import * shellcode = "\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x6..
웹 취약점 공부하는데도 흥미가 있어서 CTF 끝나기 막바지에 한번 도전해 봤지만.. 아쉽게 이 문제는 풀지 못했다. 그래도 내가 했던데까지 정리해보고 나머지 부분은 다른 사람들의 라업을 보고 보충하기 위해 글을 쓴다. 다행히 ctf 서버가 닫혀있지 않아서 더 시도할 수 있었다. 압도적 감사! 먼저 내가 시도한 것을 써보고자 한다. 채팅과 비슷한 환경이 주어져 있길래 HI alert(1) 이렇게 입력을 했는데 뒤에 태그가 사라지는 것을 보고 XSS인것을 직감했다. 그리고 쿠키를 보면 secret이라는 쿠키가 있는데 이 부분이 수상하게 느껴졌다. 그래서 stored XSS를 통해 bratt의 cookie의 값을 가져오고자 하여 GCP에 접속하여 다음과 같이 코드를 짰다. aaaa.php 세션을 실행시키고 접..
오랜만에 tcache 재밌게 풀게해준 문제.. 문제가 2.27 버전이길래 Ubuntu 18.04에서 풀었다. 보호기법은 전부 걸려있다. IDA로 바이너리를 분석해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 int __cdecl main(int argc, const char **argv, const char **envp) { __int64 v3; // rax int v5; // [rsp+14h] [rbp-Ch] setup(argc, argv, envp); v5 = 0; while ( !v5 ) { prompt(); v3 = get_long(); if ( v3 == 1 ) { add_person(); } else if ( ..
이래저래 고민을 좀 많이한 문제다... 마땅히 생각이 나지않아 노가다(?) 방식으로 쉘을 땄는데.. 다른 방법이 있는지는 찾아봐야겠다. 일단 이 글에서 사용한 방법은 return2csu방법을 사용했다. 보호기법은 Partial RELRO만 걸려있고 전부 꺼져있다. 바이너리를 분석해보자. 먼저 main을 보면 1 2 3 4 5 6 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { welcome(); while ( 1 ) do_move(); } welcome()함수를 호출하고 while로 do_move()함수를 무한으로 호출하는 것을 볼 수 있다. welcome함수는 그냥 puts함수이므로 넘어가고, do_move()함..
보호기법은 Partial RELRO와 NX만 걸려있는 매우 간단한 문제이다. IDA를 열어서 main을 보면 1 2 3 4 5 6 7 8 9 int __cdecl main(int argc, const char **argv, const char **envp) { char v4; // [rsp+0h] [rbp-70h] puts("I really like strings! Please give me a good one!"); gets(&v4, argv); puts("Thanks for the string"); return 1; } gets 함수에서 BOF가 터지는 것을 볼 수 있고, 이것을 이용해서 쉘을 따면 된다. 익스플로잇을 하기 전에 바이너리 함수를 보다보면 다음과 같은 함수를 찾을 수 있다 1 2 3 4..
보호기법은 다음과 같다. 문제 자체는 몇몇 조건을 우회해서 쉘코드를 실행시키기만 하면 된다. 바이너리를 까보면 main 함수 분석 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 __int64 __fastcall main(__int64 a1, char **a2, char **a3) { _BYTE *v3; // rsi char *s; // [rsp+30h] [rbp-20h] void *dest; // [rsp+48h] [rbp-8h] sub_170F(); dest = (void *)sub_1695(128LL); v3 = calloc(0x80uLL, 1uLL); read(0, v3, 0x80uLL); byte_4088 = v3[127..