본문 바로가기
CTF/webhacking.kr

[CTF] webhacking.kr 23번 Write-Up

by spareone 2022. 10. 18.

webhacking.kr 23번 문제풀이 Write Up 입니다.

[그림 1] Level 23 페이지

접속하면 텍스트박스와 미션 설명이 있습니다. alert() 스크립트를 실행하면 된다고 합니다.

이번 문제는 XSS(Cross Site Scripting)를 성공시키면 되는 것 같습니다.

[그림 2] 관련 태그가 fitering 걸려있는 모습

이렇게 직접적으로 입력하면 핵 쓰지 말라고 합니다.

filtering이 걸려있어서 그런 것인데, 우회해서 alert()를 호출하는 방법을 생각해 봐야겠습니다.

[그림 3] <h1> 태그를 적용한 모습

<h1> 태그를 입력해 보았는데 아래 텍스트 크기가 커졌습니다.

크기가 커지니까 좀 징그럽습니다.

[그림 4] 의미없는 문자열이 filtering 되는 모습

의미없는 문자열도 2글자 이상이면 다 filtering 되는 것 같습니다.

문자열 개수 filtering을 우회해야 할 것 같습니다.

 

검색을 해보다가 php filtering 함수 중 eregi() 함수의 취약점을 발견했습니다.

eregi()는 NULL 문자를 만나면 문자열 검사가 제대로 이루어지지 않는 취약점이 있습니다.

요즘에는 여러 취약점 때문에 preg_match()를 많이 사용하지만, 일단 이 방법을 사용해보기로 했습니다.

[그림 5] NULL을 이용해 문자열을 전송한 모습

NULL문자는 URL 인코딩하면 %00입니다. 사이사이에 %00을 넣으면 정상적으로 출력되는 것을 볼 수 있습니다.

참고로 값을 입력할 때는 [그림 5]처럼 URL에 직접 입력해야 합니다.

텍스트상자에 입력하고 전송하면 %가 문자(%25)로 인식되어 버립니다.

[그림 6] NULL을 이용해 XSS를 시도하는 모습

이제 script를 실행할 것입니다. 영문자 사이사이에 %00을 넣고 접속합니다.

[그림 7, 8] XSS 성공 후 문제 해결 완료 메시지

XSS에 성공해 alert()가 실행되면 문제가 정답처리 됩니다.

'CTF > webhacking.kr' 카테고리의 다른 글

[CTF] webhacking.kr 24번 Write-Up  (0) 2022.10.18
[CTF] webhacking.kr 20번 Write-Up  (0) 2022.10.15
[CTF] webhacking.kr 19번 Write-Up  (0) 2022.10.15
[CTF] webhacking.kr 18번 Write-Up  (0) 2022.10.14
[CTF] webhacking.kr 17번 Write-Up  (0) 2022.10.14

댓글