37번 화면이다. 페이지를 세로고침하거나 파일을 선택하여 제출하면 새로운 텍스트가 추가된다.
소스코드를 확인하자.
<코드정리>
데이터베이스와 연결하여 flag를 select한다.
select한 flag는 $flag에 배열형태로 있다.
time() 함수를 이용하여 /tmp-[time()] 형식으로 파일을 연다.
해당 파일에 127.0.0.1을 write한다.
파일을 선택하여 업로드 한 경우 해당 파일의 이름을 필터링 한다.
필터링 한 파일에 접속한 ip를 write 한다.
scandir 함수를 이용하여 /tmp 디렉토리의 목록들을 배열화 시킨다.
tmp/tmp-{$time} 에서 파일 컨텐츠('127.0.0.1')을 가져온다.
request 변수에 flag와 host정보를 저장한다.
socket을 오픈하여 host(127.0.0.1)의 7777포트로 request를 보낸다.
문제를 해결할려면 바로 이 request변수(flag)를 받아야한다.
flag를 127.0.0.1로 가는게아닌 우리 컴퓨터의 ip로 request를 보내도록 burp suite를 이용하자.
또한 포트포워딩을 통해서 외부에서 들어오는 요청을 지정하자.
내 공유기의 설정화면으로 들어가서 포트 포워딩 설정으로 들어간다.
내 컴퓨터의 ip를 설정하고 7777포트로 들어오도록 포트포워딩한다.
포트 포워딩 설정을 완료했으면 이제 데이터가 외부로 들어왔을때 내가 열어둔 포트쪽으로 출력을 해주는
nc 명령어를 이용한다. 일단 포트만 열어놓는다.
윈도우에서 nc 프로그램은 바이러스로 간주하므로 각종 보안 장치들을 일시적으로 해제해야 한다.
burpsuite를 이용하여 임의의 .text파일을 제출한다. 제출을 하면 파일 이름과 context가 나온다. filename을 미래의 현재시간을 예상하여 tmp-[] 로 수정하고 context를 내 컴퓨터 아이피로 수정한다.
위와 같이 파일이름, 내용을 바꿔준다. tmp-미래의 시간으로 현재 시간과 비교하여 타이밍에 맞게 패킷을 요청한다.
한번한번 타이밍 맞추기 어려움으로 오른쪽 마우스를 클릭하여 send to repeater를 누른다.
send to repeater를 누르면 여러번 request를 편하게 할 수 있다.
시간에 알맞게 request를 했다면 nc로 열어둔 포트에 flag가 출력된다.
위에서 봤던 코드에서 request와 host가 넘어와 출력이 되는 것이다. 해당 flag를 auth에 입력하여 문제를 풀면된다.
문제핵심
1.php코드 해석
2.socket 통신과 nc 명령어
3.burp suite를 이용한 패킷 변조
'웹 > 웹 해킹 문제 풀이' 카테고리의 다른 글
webhacking.kr 43번 문제풀이 (0) | 2023.01.07 |
---|---|
webhacking.kr 41번 문제풀이 (0) | 2023.01.07 |
webhacking.kr 21번 문제풀이 (0) | 2023.01.03 |
webhacking.kr 12번 문제풀이 (0) | 2023.01.02 |
webhacking.kr 6번 write up (0) | 2023.01.01 |