본문 바로가기

wargame

[hackCTF]pwnable 내 버퍼가 흘러넘친다!! 내 버퍼가 흘러넘친다!! 4번 문제 이전과 같이 문제를 다운 받고 실행 권한을 준다. 마찬가지로 아이다로 확인해보자. main함수 외에는 기본적으로 주어진 함수이다. main 함수 내에서 문제를 해결해야 한다. setvbuf(stdout, 0, 2, 0); 은 버퍼를 없앤다고 한다. 자세한 건 구글링ㄱ read함수는 stdin으로 받은 값을 name에 저장하고 gets함수는 stdin으로 받은 값을 s에 저장한다. checksec으로 보호기법을 확인해보자. 이전 문제와 다르게 NX가 disabled 되었음을 확인할 수 있다. 이는 stack에 실행(x) 권한이 존재한다는 의미이므로 쉘코드를 삽입하여 문제를 해결하자. read를 통해 name에 쉘코드를 삽입하고 gets를 통해 main함수의 ret을 na..
[hackCTF]pwnable Baisc_BOF #2 Baisc_BOF #2 2번 문제 이전과 같이 다운 받고 실행 권한을 준다. 아이다로 확인해보자. Function window를 보면 이전과는 달리 두 개의 함수가 더 추가된 것을 확인할 수 있다. 우선 main함수를 살펴보자. v5는 함수포인터이다. 자세한 건 구글링ㄱㄱ 중요한 건 함수를 가리키는 포인터이기 때문에 6번째 줄때문에 sup을 가리킨다는 것이다. 이걸로는 문제를 해결할 수 없다. 다른 함수를 살펴보자. sup함수는 다음과 같다. 별 건 없고 s의 값을 화면에 출력한다. shell함수를 살펴보자. 이걸로 쉘을 딸 수 있다! 정리해보자. 우리는 shell()을 실행시키면 문제를 해결할 수 있다. main함수에서 v5를 실행하는데 v5가 sup을 가리키는 대신 shell을 가리키면 된다. 이는 ..
[hackCTF]pwnable Basic_BOF #1 Basic_BOF #1 파일을 다운받을 수 있는 링크와 원격 접속 포트를 알 수 있다. 문제를 풀어 얻은 flag 값을 제출하는 형식이다. wget 명령어로 파일을 다운로드 받는다. chmod 명령어로 실행 권한을 주면 준비가 끝난다. gdb를 이용해 어셈블리 코드를 확인하는 방법도 있지만 그냥 아이다로 편하게 확인하자. (F5를 눌러 수도코드로 확인하자) 왼쪽 Functions window를 확인하면 main 함수 이외에는 딱히 생성한 함수는 없는 것 같다. fgets함수를 이용해 stdin으로부터 45바이트를 받아 s에 저장하는데 v5가 0xDEADBEEF이면 쉘을 딸 수 있다. 쉘에서 플래그를 탈취할 수 있다. NX가 enabled 되어 있으므로 쉘코드를 삽입하여 문제를 해결할 수 없다. 그러니 v..
[LOB]03 cobolt cobolt 다음 문제를 풀어보자. 디렉터리를 살펴보자. tmp 디렉터리를 만들고 goblin.c를 복사해서 내가 디버깅할 수 있는 goblin을 만들었다. (여기서 실수를 했음) goblin.c를 살펴보자. strcpy가 gets로 변환한 걸 제외하면 동일하다. gets는 strcpy와 달리 잘 모르니까 gets가 메모리에 어떻게 적용되는지 살펴보자. A로 buffer의 16바이트를 채우려고 했다.(실제로는 환경변수를 채웠기 때문에 착각임) 어셈블리 코드를 보면 *main+18 현재, sfp - (현재 ebp 위치) - buf(16바이트) - (현재 esp 위치)임을 예상할 수 있다. $esp에서 매우 떨어진 위치에 A가 들어간 걸 보면 알 수 있듯이 "A" 16개는 main함수의 범위 위, 환경변수 ..
[LOB]02 COBOLT cobolt +) sfp, ebp 개념 혼동하여 작성함. 나중에 수정할 수도 있고 이전 문제에서 얻은 비밀번호로 다음 문제를 풀어보자. 디렉터리를 확인해보자. cobolt.c는 gremlin.c와 거의 동일하지만 buffer의 크기가 다르다. 이전과는 달리 풀어야 할 것 같다. 이전과 같이 쉘에 바로 코드를 삽입하면 쉘코드가 버퍼를 오버하여 저장하는데 그럼 strcpy 함수가 끝난 후 ret을 통해 main함수로 돌아가는 데 쉘코드가 삽입되기 때문이다. ret에는 쉘코드가 아니라 쉘코드가 시작하기 전의 위치의 주소가 들어가야 한다. 가장 먼저 생각 난 방법은 환경변수에 쉘코드를 넣은다음 ret에 환경변수의 주소를 넣는 방법이다. 1. 환경변수에 쉘코드를 넣는다 2. ret에게 환경변수의 주소를 넣으면 쉘..
[LOB]01 GREMLIN gremlin +) sfp, ebp 개념 혼동하여 작성함. 나중에 수정할 수도 있고 기본적인 설정을 마치고 문제를 풀어보기로 했다. login : gate / password : gate로 접속할 수 있다. 접속하면 gremlin.c와 그 실행파일이 있다. gremlin.c의 내용을 확인할 수 있다. 이제 한 번 문제를 해결해보자. gremlin을 실행시키면 권한이 허용되지 않았다는 말과 함께 실행되지 않는다. root 권한으로 실행하면 문제가 없다고 한다(출처) 권한을 다시 설정할 필요가 있다. tmp 디렉터리를 만들어 gremlin을 새로 생성했다. 이제 파일은 내 소유이므로 실행가능하다. 여기는 c 코드가 있어 확인할 필요는 없는데 어셈블리어에 익숙해질 겸 한 번 해보았다. 어셈블리 코드 push ..
[XXE]를 위한 속성 XML 공부 모든 포스트 목록 XXE (XML External Entity) injection XML 문서에서 동적으로 외부 URI의 리소스를 포함시킬 수 있는 external entity를 사용하여 서버의 로컬파일 열람, DoS(denial of service) 등을 유발할 수 있는 취약점으로 XML Request를 파싱하는 페이지에서 발생한다. +) URI : 인터넷에 있는 자원을 나타내는 유일한 주소로, URL과 URN으로 구성된다. XML언어와 DTD에 포함된 exeternal entity를 공부해보자 XML XML XML(Extensible MArkup Language)은 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다. 다른 종류의 시스템, 특히 인터넷에 연결된 ..
XXE 문제 보호되어 있는 글입니다.