webhacking.kr 37번 문제다. 

점수는 250point.

다음과 같이 파일 업로드가 가능하다. 일단 소스부터 확인해보자.

index.phps가 있다. 들어가보자.

소스가 살짝 양이 좀 있다.

먼저 흐름을 보면 time()함수를 통해 시간값을 저장해 이 값을 가지고 tmp/tmp-시간값 형식으로 파일을 만든다. 그 후 파일 안에 127.0.0.1이라는 ip값을 입력한다.
fck부분은 tmp/파일 밑에 파일 개수에 대해 계산을 한다.
다음으로 내가 입력한 파일명에대해 >여러 필터링 작업을 한 후 tmp/파일명 형식으로 파일을 생성하고 내 ip주소 값을 넣는다.
다음으로 scandir을 통해 tmp밑의 파일명들을 배열에 담고 전부 출력한다.

그 후 $ck에 파일 내부에 있는 첫번째 라인의 문자열인 127.0.01을 저장한다.

다음으로 $request에는 소켓통신에 필요한 값들이 들어가는데 이떄 Host: $ck에 127.0.0.1 값이 들어가게 된다. 그리고 이 ip주소로 7777번 포트로 소켓 연결을 시도한다.

뒤부분에 파일개수가 30개가 넘어가면 초기화를 하는데 이는 크게 중요한 작업은 아니다.

그렇다면 우리가 할 일은 127.0.0.1로 된 부분을 내 공인ip로 바뀔 수 있도록 하면 된다.

현재 새로고침을 할때마다 tmp-time()값인 파일이 생성되고 그 파일의 내부에 있는 ip인 127.0.0.1로 소켓 연결이 시도되고 있다. 그렇다면 이 time()값을 몇십초 정도후에 실행될 값으로 지정한 후 그 시간에 딱 업로드가 된다면 time()으로 인해 생성된 값이 그 후에 생기는 같은 이름의 파일인 내가 업로드한 파일로 인해 오버라이트 되면서 내 아이피 값이 $ck에 저장되게 될 것이다.

대충 보면 조금 헷갈릴 수 있지만 천천히 분석하시면서 보면 크게 어렵지 않을거라 생각한다.

그럼이제 실제로 동작을 하는지 실행해보자.
burp suit Repeater 기능으로 열심히 아직 발생되지 않은 시간값을 보내봤다.

 

외부에서 7777포트로 들어와야 되므로 칼리의 사설ip로 포트를 열어줬다. ( 우리집은 외부 포트포워딩이 안되는 공유기라 DMZ기능을 켰다.)

대기하고 있던 칼리쪽으로 키 값을 쏴준다.

성공!


'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 39번  (0) 2018.01.15
webhacking.kr 38번  (0) 2018.01.15
webhacking.kr 36번  (0) 2018.01.15
webhacking.kr 35번  (0) 2018.01.15
webhacking.kr 34번  (0) 2018.01.14
블로그 이미지

JeonYoungSin

메모 기록용 공간

,