일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포맷스트링버그
- 백트래킹
- 브루트 포스
- 큐
- 분할 정복
- heap
- 동적 계획법
- fsb
- DFS
- 완전 탐색
- BFS
- 스택
- syscall
- 투 포인터
- House of Orange
- ROP
- tcache
- 스위핑 알고리즘
- 문자열 처리
- RTL
- 수학
- 이분 탐색
- 에라토스테네스의 체
- 다이나믹 프로그래밍
- 이진 탐색
- BOF
- 연결리스트
- off by one
- OOB
- 이진트리
- Today
- Total
목록write-up/pwnable (43)
SDJ( 수돈재 아님 ㅎ )
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호기법은 그린벨트를 이루고 있다 바이너리를 분석해보자. int __cdecl main(int argc, const char **argv, const char **envp) { char v4[64]; // [rsp+0h] [rbp-58h] unsigned __int64 v5; // [rsp+48h] [rbp-10h] v5 = __readfsqword(0x28u); *v4 = 0LL; *&v4[16] = 0LL; *&v4[32] = 0LL; *&v4[48] = 0LL; while ( readline(v4, 0x40) ) { __printf_chk(1LL, v4); _IO_putc(0xA, _bss_start); } return 0; } 간단하게 main에서 readline(v4, 0x40)을 호출하고 리턴..
보호되어 있는 글입니다.
재밌는 문제였다. 2등을 한 문제. ( 만약에 잠 안잤으면 퍼블 먹었을 듯 TT ) 다만 현재 Ubuntu 19.04가 날라가서 코드만 가지고 있는 상태이다. 그래서 우분투 화면은 찍지는 못했는데 일단 익스 코드만 올려둔다. 취약점은 OOB가 되겠다.( OOB arbitrary write ? ) 우리가 할당하는 위치를 조절할 수 있기 때문에 allocated_count < 0으로 조작해서 stack[allocated_count]의 위치가 &allocated_count가 되게 만들어 준다음 할당을 시도하면 allocated_count에 heap address가 남게 되서 heap leak이 가능해진다. 그리고 tcache bins의 0x3f0 위치에 arbitray write를 통해 bss_stdout -..
보호되어 있는 글입니다.
사용한 기법 : house of orange 자신이 작성한 Testimonial와 로그인 한 유저의 Testimonial를 구분하는데 오류가있다. 예를들어 A가 B의 Testimonial를 4개 쓰고 C의 Testimonial를 4개 썼다 하고 B가 자신의 Testimonial 4개를 전부 지우면 B는 자신의 Testimonial가 뜨지 않지만 A에게서는 B의 Testimonial가 뜨면서 수정할 수 있다. ( free됐지만 접근할 수 있음 ) 그래서 나는 fd와 bk를 잘 조작하여 chunk를 overlap 시킨 뒤 topchunk를 조져서 house of orange를 실행시켰다. from pwn import * server = 0 if server: p = remote("tukro.pwn2.win"..
파일 다운로드 보호기법을 보면 다음과 같다. 바이너리를 분석해보자. 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;..
파일 다운로드 으아 피곤하다 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..