-
[Webhacking.kr] 48번 풀이Wargame/webhacking.kr (old) 2019. 5. 8. 20:58
파일을 업로드 할 수 있고, 아래는 올려진 파일들인 것 같다.
파일 업로드 취약점으로 생각하고 문제를 풀어보았다.
test.txt 를 업로드하면서 글도 써야하는 것 같아 a를 작성하고 업로드를 시도하였다.
파일명은 3글자를 넘어갈 수 없다고 한다...
3글자의 이름을 가진 파일을 만들어 다시 업로드하였다.
올.. 올라갔다.
upload file을 눌러보니 /upload/aaa라는 파일에 접근한다.
분명 나는 aaa파일에 웹 쉘을 생각하고 아래와 같이 php 코드를 작성해 두었는데,,
내용은 null이다.
흠..
/upload 디렉터리에 접근해보았더니 접근 권한이 없었다.
다시 돌아가 Delete를 눌러보았다.
파일이 삭제되면서 get 방식으로 mode와 time의 값이 전송되었다.
다른 사람의 파일을 삭제할 수 있지 않을까 싶어 1521615745의 시간을 알아보니 2018-03-21 07:02:25 였다.
내가 파일을 업로드한 시간은 2018-03-21 16:02:25인데 9시간의 차이가 있다.
다른 사람이 업로드한 시간에서 9시간을 뺀 timestamp의 값으로 14:00:42에 올린 파일의 삭제를 시도해보았다.
2018-03-21 05:00:42 == 1521608442
삭제되지 않는다.
다른 방법으로 문제를 풀어야하는 것 같다. 소스를 봐도 아무것도 얻지 못했다.
얻은거라곤,,
파일 이름 3글자 제한,,,,
주어진거라곤,,
파일업로드, 업로드된 파일로 접근, 파일 삭제 기능,,,
주어진 기능들이 어떻게 구현되어 있을지 생각해보다보니 Delete 기능에 눈이 간다.
Delete를 누르면 서버에서 rm 명령어를 사용하여 삭제하고 있는 것은 아닐까?
그렇다면 Command Injection이 가능하다.
Command Injection이란?
웹 상에서 시스템 명령어를 사용할 수 있는 취약점을 이용하여 내부 시스템 명령어를
외부에서 실행하도록 하는 공격
[ Command Injection ] https://www.owasp.org/index.php/Command_Injection
[ 대응 방안 ] https://blog.naver.com/limjongmin15/40186347714
[ 다중 명령어 사용법 ]
; && | ||
[ Linux 다중 명령어 ] https://brownbears.tistory.com/205
파일 명으로 명령어를 넣어주게 되면 rm 명령어는 완료되지 않아 에러가 난다.
따라서 앞의 명령어가 에러가 나도 뒤의 명령어를 실행하는 ;를 사용해주어야 한다.
파일명 ;ls
업로드 후 Delete를 눌러 파일을 삭제해 주었더니 ls 명령어가 실행되어 존재하는 파일 리스트가 출력되었다.
rm ;ls
누가봐도 의심스러운 zwitter_admin.php로 접근하면 문제가 풀린다.
'Wargame > webhacking.kr (old)' 카테고리의 다른 글
[Webhacking.kr] 51번 풀이 (0) 2019.05.08 [Webhacking.kr] 49번 풀이 (0) 2019.05.08 [Webhacking.kr] 47번 풀이 (0) 2019.05.08 [Webhacking.kr] 46번 풀이 (0) 2019.05.08 [Webhacking.kr] 45번 풀이 (0) 2019.05.08 댓글