일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 포너블
- node.js
- 백준
- 네트워크
- 웹해킹
- Baekjoon
- 프로그래머스
- sequelize
- gcp ci/cd
- 사이버보안
- Batch
- 스프링 배치
- Python
- hackctf
- programmers
- 리버싱
- nodejs
- cloud run
- webhacking.kr
- pwnable.xyz
- 시스템 해킹
- docker
- 보안
- 회고
- gcp
- 파이썬
- kotest
- 웹보안
- spring Batch
- gcp cloud build
uju's Tech
7. Webhacking.kr 41번 본문
<본 포스팅은 공부 목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>
41번은 250점짜리 문제이다.
41번 문제를 들어가보자.
위의 사진과 같이 파일을 업로드하는 것이 나온다.
크롬 개발자 도구(shift+i)를 살펴보겠다.
코드를 보니 index.phps파일이 존재한다는 것을 알 수 있다.
기본url/index.phps를 쳐서 ㄴ들어가 보자.
<index.phps파일 코드>
위와 같은 코드가 나온다.
코드를 보면 fn에 업로드한 파일의 이름을 저장한다.
str_replace는 문자열 치환 함수로 "."을 ""로 바꾼다는 코드이다.
eregi는 문자열 필터링 함수이다.
if조건문을 살펴보면 eregi함수가 쓰여있는데 해석해보면
fn에 "/", "\.", "htaccess", ". htaccess"가 포함된 경우 no를 출력하면서 종료한다.
여기서 htaccess를 필터링하는 이유는 htaccess를 통해 사용자가 서버 설정 변경을 할 수 있다.
fn의 길이가 10을 초과할 경우 no를 출력하면서 종료한다.
fn의 ">"와 "<"을 ""로 바꾼다.(null값이 된다.)
변수 cp에 임시파일의 이름을 저장하고 cp라는 파일을 hidden_dir에 필터링이 된 파일명으로 복사한다.
복사한 파일을 쓰기 모드로 열고 pw를 기록한다.
여기서 hidden_dir을 알아내야 하는데 경로를 모르니 함수에서 에러를 내볼 것이다.
fn이 null값이 되면 copy에서 복사할 대상 파일이 존재하지 않아 에러가 발생할 수 있다고 추측해보자.
이를 확인하기 위해 시도를 해보았다.
먼저 파일을 넣지 않고 업로드해보면 no가 나온다.
burpsuite로 파일을 업로드할 때의 패킷을 잡아보았다.
<업로드 할 때의 패킷>
여기서 filename을 임의로 수정해보겠다.
index.phps에서 <와 >이 null값이 됨을 알았으므로 <>을 넣어보자.
넣어보면
에러가 뜬다. hidden_dir경로를 찾았다.
기존 url//dkanehdkftndjqtsmsdlfmadmlvhfejzzzzzzzzzkkkkkkkkggggggggg/필터링되지않은 파일 명
을 작성해준다.
필자는
기존url/dkanehdkftndjqtsmsdlfmadmlvhfejzzzzzzzzzkkkkkkkkggggggggg/sy34으로 해주었다.
짠 패스워드가 뜬다.
위의 pw를 auth에 입력해주면 clear!
끝!
'Security > Webhacking.kr' 카테고리의 다른 글
8.Webhacking.kr 5번 (0) | 2020.06.13 |
---|---|
6. Webhacking.kr 58번 (0) | 2020.06.13 |
5. Webhacking.kr 32번 (0) | 2020.06.13 |
4. webhacking.kr 24번 (0) | 2020.06.13 |
3. webhacking.kr 18번 (0) | 2020.06.13 |