2017-10-26 1 views
0

저는 buffe roverflow attack이라는 주제로 시스템 보안 프로젝트를 진행하고 있습니다. 나는 root 권한을 얻어야하는 프로그램과 소스 코드를 가지고있다.버퍼 오버플로 공격, 무작위 카나리아 재생성이 가능합니까?

srand(time(NULL)^(getpid() << 16)); 

나중에 카나리아에

canary = rand(); 

내 질문에 의해 설정됩니다 : 내가 처음에, 임의의 카나리아에 의해 발생이 문제는 난수 생성기를 초기화 프로그램 오티인가 카나리아를 재생할 수 있습니까? 나는 소금을 다시 생성하고 싶습니다. (time (NULL)은 1970 년부터 초를 반환하고 pid는 프로그램이 시작될 때마다 일정합니다.) 그리고 rand()를 호출하여 카나리아를 얻고 싶습니다. 저는 스크립트 언어에 익숙하지 않고 많은 리눅스 경험이 없으므로 절대로 작동하지 않는 해결책으로 시간을 낭비하지 않기 바랍니다. 미리 감사드립니다. :)

답변

0

예, 가능합니다. 프로그램 시작 시간과 프로세스 ID 만 알아야합니다. ps -eo pid,cmd,lstart | grep «program-name»을 입력하여 명령 줄에서이 정보를 얻을 수 있습니다. 예를 들어,라고 관심있는 프로그램을 가정 test :

$ ps -eo pid,cmd,lstart | grep test 
    26798 ./test      Thu Oct 26 22:03:52 2017 

출력 라인의 시작에 수는 프로세스 ID,이 프로세스가 시작되는 시간은의 끝에 선. 이것을 Unix 타임 스탬프로 쉽게 변환 할 수 있습니다 :

$ date --date='Thu Oct 26 22:03:52 2017' '+%s' 
1509055432 

마지막으로 확인한 PHP는 여전히 동일한 난수 생성 프로그램을 사용하고 있습니다. 그래서 당신은 카나리아 계산하기 위해 PHP를 사용할 수 있습니다. (당신이 PHP가없는 경우, 당신은 쉽게 당신이 계산을 할 수있는 자신의 C 응용 프로그램을 롤 수)

$ php -r 'srand(1509055432^(26798 << 16)); echo rand()."\n";' 
1670313680 

그것은해야합니다 아주 추측하기 어려운 값을 생성하려는 경우 srand(time(NULL))은 아무 쓸모가 없습니다. 더 나은 방법은 \dev\urandom에서 바이트를 가져 오는 것입니다.

+0

php와 c가 동일한 rand-generator를 사용하고 있는지 확인해 주시겠습니까? 필자가 작성한 C 애플리케이션으로 시도해도 PHP에서는 작동하지 않는다. – C4ptainC4mp

+0

'rand()'의 구현은 플랫폼에 따라 다르게 보인다. 데비안에서는 C와 PHP로 동일한 결과를 얻습니다. OS X에서 C 프로그램은 다른 결과를 제공합니다. 대상 응용 프로그램과 동일한 라이브러리로 프로그램을 컴파일하는 한 괜찮습니다. –