목록Information security (35)
nemo의 이야기
서버를 만들기에 앞서 nfs에 대한 정의를 알아보자 nfs란 네트워크에 파일을 저장하는 메커니즘이다. 사용자가 원격 컴퓨터에 있는 파일 및 디렉토리에 엑세스할 수 있고 해당 파일 및 디렉토리가 로컬에 있는 것 처럼 처리하도록 허용하는 분산 파일 시스템이다. 즉, 디렉토리를 공유함으로 써 서버 컴퓨터의 자원을 공유하는 메커니즘이다. 테스트 환경은 SULinux2.0 버전이다. 테스트하기 위해 우선 iptables을 끄고 작업을 시작해보자 서버에서 공유 폴더를 생성하고 /etc/exports파일을 생성하여 포트를 잡아주자 상위 디렉토리에 nfs 공유할 디렉토리를 생성하고 /etc/exports파일에 위와 같은 설정을 입력한다. /nfs 192.168.64.136 (rw, sync) 1 2 3 1 : 공유 디..
위 소스 코드를 확인해보면 ret부분에 strcpy 함수의 인지를 확인 한다. 먼저 여기서 strcpy주소 인지 체크하는 부분은 plt에 있는 참조 주소이다. 이 plt의 strcpy의 참조 주소를 이요해 RTL로 문제를 풀면 될 것이다. PLT는 허출하려는 함수와 GOT를 연결하는 것이고 GOT는 실제 라이브러리 함수의 주소이고 함수가 처음 호출 될 떄 주소가 계산된다(PTL) 리눅스는 윈도우와 다르게 실행할 경우 주소가 정해진다. 우선 strcpy의 PTL주소를 확인을 하자 strcpy : 8048410 이제 조건에 건너뛰는지 확인하기 위해서 strcpy주소를 제대로 넣고 더미로 공격을 한다. $(python -c 'print "A" *44 + "\x10\x84\x04\x08" + "BBBB" +"C..
소스를 확인 해보면 1. argv[1]에서 라이브러리 함수를 사용하지 못한다. 2. RET에는 DO함수 주소가 있어야된다. 3. RET이후 100byte 사용 가능 이를 해결하기 위해서는 DO GYE GUL YUT MO 순으로 호출해야된다. 그리고 마지막에 호출되는 함수에 인자를 사용하여 공격을 해야된다. 즉 마지막 인자에 bash라는 문자열을 집어 넣으면 공격에 성공한다. 우선 각 함수의 주소를 확인해야 된다. DO : 80487ec, GYE : 80487bc, YUT : 804875c, MO : 8048724 buffer : bffffaa0 여기서 /bin/sh가 위치하는 곳은 bffffae4이다 이제 RET에 DO에 주소를 입력하고 순서대로 주소를 입력하고 마지막에는 /bin/sh가 위치한 주소를 ..
소스 코드를 확인하면 1. 스택 메모리를 사용할 수 없다. 2. 라이브러리 메모리를 사용할 수 없다. 이를 공격하기 위해 Fake Ebp를 사용할 것 이다. 우선 system 주소와 exit 주소와 /bin/sh와 buffer주소와 leave주소를 확인해보자 /bin/sh : 400fbff9 system : 40058ae0, exit : 400391e0 buffer : bffffaa0 이제 공격코드를 작성해보자 우선 더미(4) + system(4) + exit(4) + /bin/sh(4) + 더미(24) + buffer(4) + leave(4) $(python -c 'print "AAAA" + "\xe0\x8a\x05\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" +..