일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 모인유럽서포터즈
- 프랑스 교환학생
- Linux
- 프랑스송금
- 포너블
- EPITA
- 해킹
- rootme
- 리눅스
- pwnable
- web
- 프랑스교환학생
- 보안
- 모인유럽송금
- 웹해킹
- WebHacking
- Gentoo
- 루트미
- 해커스쿨
- 유로송금
- wargame
- pwnable.kr
- 네트워크해킹
- client
- 모인해외송금
- 해외송금
- FTZ
- Challenge
- network
- 백도어
- Today
- Total
목록리눅스 (18)
Securing Keys
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2r0fB/btryjGgoGAU/hj6VqoCX4nVkKAKGarS4Fk/img.png)
쉘에 접속해보니 마찬가지로 실행파일과 소스코드가 존재했다. 소스코드를 확인해보니 rand() 함수를 통해 받은 랜덤값과, 입력값을 xor 한 결과가 0xdeadbeef일 경우, 플래그값을 출력해주는 것으로 확인된다. gdb를 통해 rand() 함수의 리턴값이 무엇인지를 확인해보고자 rand() 실행 직후 *main+18에 브레이크를 걸었다. 랜덤값은 1804289383이었고, 0xdeadbeef와 xor한 값은 3039230856이므로, 입력값으로 3039230856을 넣어주면 플래그값을 확인할 수 있겠다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/R50Ml/btryguus3e7/w5RAooPR0bgvuaOrWyFTt1/img.png)
pwnable.kr 다섯번째 단계: passcode 풀이를 시작하겠다. 문제에서 제공한 쉘에 접속해보니 앞선 문제들과 마찬가지로 소스코드와 실행파일 그리고 플래그값이 존재하는 파일이 있었다. 소스코드를 보면, passcode1과 passcode2를 scanf를 통해 입력값으로 받아들이는데, 입력값을 각 변수의 주소값에 저장하고, 이들은 초기화되어 있지 않기 때문에 문제에서 제시한 것과 같이 오류가 날 수 밖에 없다. welcome() 함수를 확인해보면 기존에 이름을 입력받는 scanf는 -0x70(%ebp)에 입력값을 저장하고 있고, login() 함수를 살펴보면 passcode1을 입력받는 scanf는 -0x10(%ebp)에 입력값을 저장하고 있음을 알 수 있다. -0x70(%ebp) 에서 -0x10(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RlcLE/btryeuHQMcF/CbQv1iKVNOCkwLMfDCHZfK/img.png)
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이 가리키고있는 곳을 확인하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bie8Fy/btryfj0fKmO/p8coBATOY7VmvwAtPCpkfK/img.png)
pwnable.kr 세번째 단계: bof 를 풀어보도록 하겠다. 이번 문제는 Buffer Overflow에 관한 문제인 것으로 보인다. 우선 실행파일 bof와 이에 대한 코드인 bof.c 를 다운로드 받는다. 코드는 위와 같고, bof 실행파일은 다운로드 받아서 실행 및 디스어셈블할 준비를 마쳤다. 코드를 확인해보니 func() 내에서 gets() 함수로 값을 받아들이는데, func()의 인자값이 0xcafebabe와 동일한지 확인함으로써 쉘을 실행해줌을 확인할 수 있다. 따라서 gets()를 오버플로우시켜서 key에 0xcafebabe를 overwrite 하면 쉘을 실행할 수 있을 것이다. bof 실행파일을 다운로드 받았으니 이를 디스어셈블하여 key에 도달하기까지 얼만큼의 바이트가 필요한지 확인할 것..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CJ6i6/btrygweqZxW/74CrKjSxFW8BJ1HmBabI5K/img.png)
이번엔 두번째 단계: 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ctm0pj/btrydhiIWtX/44eTBQNfGBk0hA2fojxcqK/img.png)
현생에 집중하느라 여태껏 미뤄왔던 개인 공부를 시작하기 위해 제일 접근하기 쉬운 워게임부터 풀어보고자 한다 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zgZSt/btqIhZTrezv/Ka98ZPuDuojT5sAZcRs0Lk/img.png)
Linux 운영체제에서 터미널 사용을 주로 하는 사용자라면, 필연적으로 vim 툴을 이용하게 된다. vim은 리눅스의 텍스트 편집기 (Text Editor) 중 하나로, 가장 대표적인 텍스트 에디터라고 볼 수 있다. 그렇기 때문에 *nix (유닉스 기반 운영체제) 사용자이거나 관리자이거나 혹은 개발자라면 vim을 계속해서 사용할 수 밖에 없다. vim을 계속 사용할 예정이라면, 당연히 우리 입맛에 맞게 설정을 해놓아야 한다. vim의 환경설정은 .vimrc 파일에서 할 수 있는데, 처음부터 .vimrc 파일이 존재하는 것은 아니기 때문에 이를 생성하고 거기에 설정값을 넣는 방식으로 초기 설정을 진행해야 한다. vim의 환경설정 파일인 .vimrc 파일은 반드시 사용자의 홈디렉토리에 존재해야 한다. 따라서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yWGqw/btqHy6rBOuq/ZNKSGztHXisjYIHbaR78l0/img.png)
이번에도 역시 level4로 로그인 하자마자 홈 디렉터리를 확인했다 이번 힌트는 /etc/xinetd.d/에 백도어가 존재한다는 힌트였고, 실제로 확인해보니, GID가 level4인 backdoor 파일이 존재하였다 /etc/xinetd.d 내에 있는 백도어라면 로컬이 아닌 다른 네트워크를 이용하는 서비스 포트와 관련되어 원격에서도 사용이 가능할 백도어일 것이다 소스코드를 확인해보니 위와 같았다 finger라는 서비스를 이용하는데 (disable = no) 이 서비스는 활성화되어 있고 (flags = REUSE) flag는 재사용하며 (socket_type = stream) 스트림 기반 데이터 전송을 하고 (wait = no) xinetd는 연결이 된 경우에 서비스 요청을 받으며 (user = level..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAl92a/btqHxP4QvV0/moOLqvgG7ucADUzqXk4eUk/img.png)
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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cCitDT/btqHq2X8wCD/dkgy0vdgDlABq43nUvDkiK/img.png)
level3로서 로그인 후 홈 디렉토리를 확인해보니 역시 hint 파일이 존재한다 이를 확인해보니 autodig의 소스코드를 보여주고 있는데 이를 이용하여 level4의 권한을 얻어야한다고 한다 추가 힌트를 확인해보니 동시에 여러 명령어를 사용하는데 이때 문자열 형태로 명령어를 전달해야할 듯 하다 소스코드를 확인해보니, dig 명령어를 사용하는 프로그램이다 dig 명령어는 리눅스에서 네임서버로부터 정보를 가져오는 명령어로, DNS 질의응답이 잘 이뤄지는지 확인하는 것이다 $dig @[문자열] version.bind chaos txt 즉 autodig가 실행되면 위와 같은 명령어가 실행된다 [문자열] 서버로 nslookup을 실행하는 것이나 마찬가지인데 뒤에 옵션은 굳이 알아보지 않아도 될 듯 하다 aut..