일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- linux
- libpcap
- Find
- vi
- Network
- Overwatch League SaberMetrics
- 인터럽트
- #MINT64 #Sqix
- libtins
- Sqix
- #
- vi 외부 명령어
- #Best of the Best #OS #MINT64 #Sqix
- KASAN
- ftz
- BEST of the BEST
- vim
- FTZ 레벨2
- 오버워치 세이버메트릭스
- 오버워치
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- C++11
- #IntelManual
- #Qt Creator
- >
- command
- Today
- Total
목록Wargame (31)
Sqix
보호기법에 Full RELRO, NX가 켜져 있네요. .got부분이 READ ONLY가 되고, NX로 인해서 실행공간이 제약됩니다. Main 부분을 봅시다. 0x804a008(0x539)와 eax를 비교해서 값이 다르다면 exit(1)을 호출해 주네요. 이후 eax값을 1 증가시켜줍니다. setvbuf(stdout, 0, 2, 0)을 호출해서 stdout을 line 단위로 취급하도록 합니다. 이후 puts("Try your best :");를 호출하고, read(0, buf, 0x40); 을 호출하고 메인을 종료합니다. 여기서 buf 크기는 0x28인데 들어오는 최대 입력은 0x40이므로 24바이트의 오버플로우가 일어날 수 있습니다. 보호기법과 취약점에서 나온 정보를 종합해 보면, ROP를 사용해야 하는..
simple rop 문제입니다. 문제를 풀 때 다른 문제처럼 system 함수를 이용해서 풀려고 해 봤으나, 되지 않아서 왜 그런지 고민해본 결과 statically linked 되어있기 때문에 system 함수를 libc에서 끌어와서 푸는 형식이 아니라, shellcode를 bss에 올린 후 bss에 실행 권한을 주어 쉘코드가 실행하도록 하여야 합니다. 이것만 빼면 무난하게 풀 수 있습니다. 일단 어셈으로 코드를 유추해 보면 main() { char buf[20]; puts("ROP is easy is'nt it ?"); printf("Your input :"); fflush(stdout); read(0, buf, 100); return ; } 정도인 것 같습니다. 취약점은 read에서 버퍼가 20바이..
이번에는 Lab04 : Return to libc 문제를 풀어보겠습니다. Return to libc 문제는 말 그대로 libc로 돌아가겠다! 는 의미인데요, NX라는 보호 기법을 우회하기 위해서 공유 라이브러리의 함수 주소로 Return Address값을 변경해 libc라이브러리 안에서 offset을 이용해 함수를 호출하는 기법입니다. 바로 gdb를 이용해 실행 흐름을 확인해보겠습니다. (ida를 쓸 수 없는 환경이라 gdb로만 보겠습니다.) puts를 이용해서 4줄을 출력합니다. 이후 printf를 이용해서 다시 1줄을 출력하네요. ############################### Do you know return to library ? ############################### ..
lab03 ret2sc 문제입니다. Return to shellcode 기법은 return address를 shellcode 시작 주소로 덮어주는 기법입니다. 실행을 해 보니, Name: 를 통해서 이름을, Try your best: 를 통해서 문자열을 받아오고 프로그램이 종료됩니다. 실행 파일을 gdb에 올려서 어셈블러 코드를 보도록 하겠습니다. 간략히 어셈을 해석해 보면 main(){ char buf[48] //sub 0x30 setvbuf(0x804a040, 0x0, 0x2, 0x0); printf(0x80485d0); read(0, 0x804a060, 0x32); printf(0x80485d6); gets(buf); return; } 정도인것 같습니다. read에서 0x32를 받고, gets에서는..
문제 이름부터 shellcraft를 사용해서 문제를 풀라고 하는 듯 하네요. Shellcraft 매뉴얼 링크부터 알아봅시다. http://docs.pwntools.com/en/stable/shellcraft/i386.html - i386 http://docs.pwntools.com/en/stable/shellcraft/amd64.html - amd64 저희가 풀 환경은 i386이므로 위의 매뉴얼을 참고합시다. 이제 문제에 대해서 파악을 해 보면, lab02에 접근하면 실행 가능한 ELF 파일인 orw.bin 파일이 있습니다. 원래는 training.pwnable.tw:11002에 원격으로 붙어서 해야 하나 본데, 서버가 죽었는지 붙어도 반응이 없네요. 로컬에서 풀 수 있게 파일을 하나 만들어 보도록 합시..
군 입대 이후 오버워치 리그 워싱턴 저스티스 쪽에서 코칭 어시스턴트로 일하다 다시 제대로 보안을 잡아보고자 합니다. 그 첫걸음을 Hitcon Training으로 시작하게 되었네요. Sysmagic 풀이 다시 시작해보겠습니다. sysmagic.c 코드와 sysmagic 파일을 제공합니다. c코드를 보면 key와 cipher가 있고, /dev/urandom 함수를 이용해서 난수를 받아온 후 이것과 사용자 입력 패스워드가 일치하면 cipher과 key를 xor하여 flag를 제공해 줍니다. flag를 받기 위해선 urandom에서 주어지는 password를 입력해 분기문 조건을 강제로 맞춰서 바로 cipher과 key가 xor연산을 하여 flag를 뱉어내도록 하면 될 것 같습니다. 그러기 위해선 cmp eax..
https://github.com/scwuaptx/HITCON-Training Hitcon Training Github로 이동해서 git clone https://github.com/scwuaptx/HITCON-Training.git ~/ cd HITCON-Training && chmod u+x ./env_setup.sh && ./env_setup.sh명령어를 입력합니다. apt-get install docker docker.io그 후 docker.sh 실행을 위해 docker를 설치해 줍니다 ./docker.sh마지막으로 docker.sh를 실행해주면 완료됩니다.
FTZ를 전부 클리어했습니다. 이제 LOB / Fedora Castle을 풀고, Pwnable.kr , Pwnable.tw, HITCON Training을 풀며 포스팅하려고 합니다.
RTL 문제가 나왔습니다. 그런데 여기엔 setreuid가 없네요? dummy가 20 bytes이니 총 44bytes(SFP)를 A로 덮고 RET는 system으로 덮고 RET + 4를 다시 A로 덮고(RET 이후 돌아갈 함수의 주소, ebp + 4), RET + 8을 /bin/sh로 넣어 주면(arg00) /bin/sh을 구하는 RTL을 할 수 있습니다.stack 구조 [ buf 20 ] [ dummy 20 ] [ SFP 4 ] [ RET 4 ] [ FUNC ADDR 4 ] [ ARGV00 ] [ ARGV01 ] ... exploit : (python -c 'print "A" * 44 + "\xa4\x7e\x12\x42" + "A" * 4 + "\xc0\xf2\x03\x42"'; cat) | ./att..
소스코드가 꽤 긴데, 여기서는 fd를 이용해서 input을 받아왔습니다. 크게 어려울 건 없네요. fd_set 구조체를 FD_ZERO 매크로로 초기화하고 FD_SET을 이용해서 STDIN_FILENO(0) 소켓번호를 fds에 추가합니다. select 함수를 이용해서 fds를 감시하도록 하였고(FD_SETSIZE, &fds만 argument로 있으므로, io stream 다중화라기보단 fds 감시 목적인 것 같습니다) FD_ISSET(fileno(stdin),&fds)을 통해서 fds가 표준입력으로 정의된 경우에만 read함수를 이용해서 사용자 입력을 받도록 하였습니다. 즉, exploit을 짤 때 C 소스에 대해서 크게 고민할 필요 없이 표준입력을 넣으면 되는 상황입니다. 결국 untrusted inpu..