webhacking 41번
포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
41번 문제이다.
파일 업로드 취약점 문제이다.
소스코드를 보자.
php 언어를 잘 모르지만 기존과는 다른 게 하나 있다.
error_reporting(E_ALL); 구문이 있다.
ini_set() 구문에서는 php설정을 바꾸는 것이며, 에러를 보여준다는 뜻이다.
해킹에서는 이런 오류 메시지 하나하나가 큰 도움을 주는 경우가 있다,
fn변수는., <, >, / 를 필터링한다.
cp변수는 서버의 임시저장소에 파일을 저장한다.
서버의 임시저장소에 있는 파일을 $upload_dir와 $fn의 변수 이름 형식으로 복사시킨 후 쓰기 전용으로 파일을 열어
flag를 작성한다.
우리가 찾는 flag는 저 경로에 저장되어 있으니, 해당 경로를 찾아내어 열면 된다.
일단 아무 파일을 업로드해보자.
정상적으로 업로드되는 모습을 볼 수 있다.
아무 파일도 올리지 않고 업로드해보자.
역시 에러 메시지와 함께, Done~가 출력된다.
아마 Done~는 그냥 출력되는 것 같다.
아까 전에 알아낸 에러 메시지 출력 부분을 이용해 $upload_dir 부분을 알아내 보자.
이를 위해선 burpsuite를 사용하여 파일 이름 길이 초과 에러를 이용해 알아낼 수 있다.
파일 이름 길이 오류는 255글자가 넘으면 발생한다고 한다.
정상적으로 오류가 표출되며, $upload_dir 부분에 해당하는 값을 얻을 수 있었다.
아까 전에 포스팅. txt 파일을 올렸으니 해당 경로로 접근해보자.
음...?
아까 전에. 을 필터링한다는 걸 깜빡했다.
이번엔 정확히 나왔다.
문제 해결
시행착오
1. 이제부터는 php 언어도 정확히 알아야 할 것 같아서 한번 본건 바로바로 공부해야겠다.
ㄴ$_files: 폼 데이터에 접근하는 용도로 사용한다.(페이지에 변경된 내용이 다른 페이지로 넘어갈 때 접근하는 데이터)
ㄴ$_files ['폼의 이름']['여러 가지 이름들']
ㄴ1. type -> 업로드한 파일의 유형
2. tmp_name -> 파일이 저장된 서버의 임시저장 위치
3. size -> 파일의 크기
4. error -> 파일 업로드 시 발생한 에러코드(0이 성공, 나머지는 실패)
ㄴ copy('원본 파일 전체 경로', '복사된 파일 전체 경로') // 특정 파일을 복사해서 사용함
https://mm89.tistory.com/entry/php-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C
php 파일 업로드
//fileupload.php화면을 통해 파일을 업로드하고 제출을 하게 되면 upload_ok.php로 데이터가 넘어가게 된다. PHP로 파일 업로드 하기 fileupload.php FILE UPLOAD upload_ok.php <? header("Content-type:..
mm89.tistory.com
[참고 블로그]