SQL injection/webhacking

webhacking 41번

ys.k 2022. 8. 3. 18:01

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

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

[참고 블로그]