일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프랑스교환학생
- 해킹
- 해커스쿨
- rootme
- Linux
- web
- 프랑스 교환학생
- 리눅스
- wargame
- network
- EPITA
- 프랑스송금
- Gentoo
- pwnable
- 모인유럽서포터즈
- 해외송금
- 포너블
- 모인해외송금
- 루트미
- client
- 보안
- FTZ
- 웹해킹
- pwnable.kr
- 모인유럽송금
- 유로송금
- Challenge
- WebHacking
- 네트워크해킹
- 백도어
- Today
- Total
목록IT/Linux (18)
Securing Keys
쉘에 접속해보니 마찬가지로 실행파일과 소스코드가 존재했다. 소스코드를 확인해보니 rand() 함수를 통해 받은 랜덤값과, 입력값을 xor 한 결과가 0xdeadbeef일 경우, 플래그값을 출력해주는 것으로 확인된다. gdb를 통해 rand() 함수의 리턴값이 무엇인지를 확인해보고자 rand() 실행 직후 *main+18에 브레이크를 걸었다. 랜덤값은 1804289383이었고, 0xdeadbeef와 xor한 값은 3039230856이므로, 입력값으로 3039230856을 넣어주면 플래그값을 확인할 수 있겠다.
pwnable.kr 다섯번째 단계: passcode 풀이를 시작하겠다. 문제에서 제공한 쉘에 접속해보니 앞선 문제들과 마찬가지로 소스코드와 실행파일 그리고 플래그값이 존재하는 파일이 있었다. 소스코드를 보면, passcode1과 passcode2를 scanf를 통해 입력값으로 받아들이는데, 입력값을 각 변수의 주소값에 저장하고, 이들은 초기화되어 있지 않기 때문에 문제에서 제시한 것과 같이 오류가 날 수 밖에 없다. welcome() 함수를 확인해보면 기존에 이름을 입력받는 scanf는 -0x70(%ebp)에 입력값을 저장하고 있고, login() 함수를 살펴보면 passcode1을 입력받는 scanf는 -0x10(%ebp)에 입력값을 저장하고 있음을 알 수 있다. -0x70(%ebp) 에서 -0x10(..
pwnable.kr 4단계: flag 풀이를 하도록 하겠다. 이번에는 flag 바이너리만 갖고 리버싱하는 문제이다. IDA를 통해 flag 바이너리를 열어서 strings 확인을 해보니 확인되는 문자열이 위와 같았고, //upx.sf.net $\n 을 통해 UPX 패킹이 되어 있지 않을까 하는 추측을 해볼 수 있었다. 위와 같이 언패킹하였다. 이 상태로 gdb를 통해 디스어셈블 해보니 메인 함수를 확인할 수 있었고, 힌트로써 I will malloc() and strcpy the flag there. take it. 이라고 출력해주는 것 또한 확인 가능했다. 코드를 확인해보면 100byte만큼 malloc하고 있고, strcpy로 추측되는 함수가 호출되고 있다. 0x6c2070이 가리키고있는 곳을 확인하..
pwnable.kr 세번째 단계: bof 를 풀어보도록 하겠다. 이번 문제는 Buffer Overflow에 관한 문제인 것으로 보인다. 우선 실행파일 bof와 이에 대한 코드인 bof.c 를 다운로드 받는다. 코드는 위와 같고, bof 실행파일은 다운로드 받아서 실행 및 디스어셈블할 준비를 마쳤다. 코드를 확인해보니 func() 내에서 gets() 함수로 값을 받아들이는데, func()의 인자값이 0xcafebabe와 동일한지 확인함으로써 쉘을 실행해줌을 확인할 수 있다. 따라서 gets()를 오버플로우시켜서 key에 0xcafebabe를 overwrite 하면 쉘을 실행할 수 있을 것이다. bof 실행파일을 다운로드 받았으니 이를 디스어셈블하여 key에 도달하기까지 얼만큼의 바이트가 필요한지 확인할 것..
이번엔 두번째 단계: collision을 풀어보도록 하겠다. 문제를 확인해보면 위와 같다. MD5 Hash collision 에 관한 문제임을 힌트로써 얻을 수 있었다. Collision Attack In cryptography, a collision attack on a cryptographic hash tries to find two inputs producing the same hash value, i.e. a hash collision. This is in contrast to a preimage attack where a specific target hash value is specified. There are roughly two types of collision attacks: Classic..
현생에 집중하느라 여태껏 미뤄왔던 개인 공부를 시작하기 위해 제일 접근하기 쉬운 워게임부터 풀어보고자 한다 pwnable.kr 의 첫번째 단계: fd 를 풀어보도록 하겠다 첫번째 단계인 fd를 클릭하면 위와 같이 문제가 표시된다 File Descriptor In Unix and Unix-like computer operating systems, a file descriptor (FD, less frequently fildes) is a unique identifier (handle) for a file or other input/output resource, such as a pipe or network socket. File descriptors typically have non-negative int..
Linux 운영체제에서 터미널 사용을 주로 하는 사용자라면, 필연적으로 vim 툴을 이용하게 된다. vim은 리눅스의 텍스트 편집기 (Text Editor) 중 하나로, 가장 대표적인 텍스트 에디터라고 볼 수 있다. 그렇기 때문에 *nix (유닉스 기반 운영체제) 사용자이거나 관리자이거나 혹은 개발자라면 vim을 계속해서 사용할 수 밖에 없다. vim을 계속 사용할 예정이라면, 당연히 우리 입맛에 맞게 설정을 해놓아야 한다. vim의 환경설정은 .vimrc 파일에서 할 수 있는데, 처음부터 .vimrc 파일이 존재하는 것은 아니기 때문에 이를 생성하고 거기에 설정값을 넣는 방식으로 초기 설정을 진행해야 한다. vim의 환경설정 파일인 .vimrc 파일은 반드시 사용자의 홈디렉토리에 존재해야 한다. 따라서..
이번에도 역시 level4로 로그인 하자마자 홈 디렉터리를 확인했다 이번 힌트는 /etc/xinetd.d/에 백도어가 존재한다는 힌트였고, 실제로 확인해보니, GID가 level4인 backdoor 파일이 존재하였다 /etc/xinetd.d 내에 있는 백도어라면 로컬이 아닌 다른 네트워크를 이용하는 서비스 포트와 관련되어 원격에서도 사용이 가능할 백도어일 것이다 소스코드를 확인해보니 위와 같았다 finger라는 서비스를 이용하는데 (disable = no) 이 서비스는 활성화되어 있고 (flags = REUSE) flag는 재사용하며 (socket_type = stream) 스트림 기반 데이터 전송을 하고 (wait = no) xinetd는 연결이 된 경우에 서비스 요청을 받으며 (user = level..
level3에서 level4의 비밀번호를 얻는 방법은 저번 포스팅을 참고하시면 됩니다 https://secure-key.tistory.com/50 [FTZ] Level 3: SUID가 걸린 함수에 인자 전달로 명령 실행 level3로서 로그인 후 홈 디렉토리를 확인해보니 역시 hint 파일이 존재한다 이를 확인해보니 autodig의 소스코드를 보여주고 있는데 이를 이용하여 level4의 권한을 얻어야한다고 한다 추가 힌트를 �� secure-key.tistory.com 이번에는 저번 포스팅과는 달리 my-pass 명령어가 아니라 계속해서 level4로서 명령어를 실행할 수 있는 쉘을 실행시켜보았다 그러나 매번 autodig를 통해서 level4의 권한을 얻기보다는 백도어 쉘을 생성하여 언제든 level4..
level3로서 로그인 후 홈 디렉토리를 확인해보니 역시 hint 파일이 존재한다 이를 확인해보니 autodig의 소스코드를 보여주고 있는데 이를 이용하여 level4의 권한을 얻어야한다고 한다 추가 힌트를 확인해보니 동시에 여러 명령어를 사용하는데 이때 문자열 형태로 명령어를 전달해야할 듯 하다 소스코드를 확인해보니, dig 명령어를 사용하는 프로그램이다 dig 명령어는 리눅스에서 네임서버로부터 정보를 가져오는 명령어로, DNS 질의응답이 잘 이뤄지는지 확인하는 것이다 $dig @[문자열] version.bind chaos txt 즉 autodig가 실행되면 위와 같은 명령어가 실행된다 [문자열] 서버로 nslookup을 실행하는 것이나 마찬가지인데 뒤에 옵션은 굳이 알아보지 않아도 될 듯 하다 aut..