일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어 알고리즘
- c언어
- 보안
- 인공지능
- 정보보안
- 딥러닝파이썬
- C알고리즘
- 머신러닝
- 달고나bof
- C언어알고리즘
- 백준
- 버퍼오버플로우
- 8086CPU레지스터
- 활성화함수파이썬
- BOJ
- 딥러닝
- 신경망파이썬
- 스트림암호
- 소프트맥스함수
- 파이썬
- 신경망구현
- 백준알고리즘
- 항등함수
- FTZlevel10
- 알고리즘
- 신경망
- 밑바닥부터시작하는딥러닝
- BOF
- 파이썬신경망
- 신경망 학습
- Today
- Total
목록<CTF> (95)
HeeJ's
소스 코드를 보아도 별 다른 함수도 없는 것을 보아 notice 게시판에 직접 글을 써봐야 할 것 같다. 그래서 main으로 가서 notice 게시판을 보았더니 글을 작성할 수 있는 버튼이 없었다. 비교해보기 위해 다른 게시판으로 가보았다. free 게시판인데 이 곳에서는 write 버튼이 있었다. 일단 글을 쓰기 위해 들어가 보았다. URL에 free/write 라고 적혀있었다. 이 free 부분을 notice로 바꾼다면 notice 게시판에 글을 작성할 수 있을 것 같다. 이렇게 하고 아무렇게나 글을 입력해 주었더니 Authkey 를 얻을 수 있었다.
소스코드를 바로 살펴보았다. id와 pw가 같으면 can't join이라는 alert 창과 함께 문제를 해결할 수 없다. 그래서 아무 다른 값을 넣어 보았더니 아무 일도 일어나지 않았다. hint 부분에서 id와 pw가 같아야 한다는 것을 보니, 스크립트를 우회하는 방식을 사용해야 할 것 같다. 개발자 도구에서 콘솔을 이용해 else문에 있는 document.web02.submit();를 실행시켜 준다면? 우선 실행시키기 전, Hint에서 보이는 것과 같이 id와 pw 폼에 같은 값을 아무거나 입력해준다. join을 누르지 않고, 그대로 개발자 도구의 콘솔에 들어간다. 그리고 아까 else문에 있던 명령어를 입력해보면 AuthKey값을 얻게 된다.
소스코드를 살펴보면 str을 받아와서 여러 문자열을 치환해주는 것 같다. Mid()함수는 처음 보았는데, mid() 함수는 문자열에서 원하는 길이만큼 빼오는 함수라고 한다. string a = "123456789"; Mid(a,1,3) // 123 Mid(a,2,5) // 2345 이렇게 사용될 수 있다. 뭔가 문자열을 대체하는 replace와 추출하는 mid를 잘 읽어보고 활용해 결과적으로 admin이라는 값을 얻으면 되는 것 같다. mid()함수를 먼저 보면 2의 값과 4~6의 값이 사용 되는 것을 알 수 있다. __ __ __ __ __ __ 1 2 3 4 5 6 ami 라는 값을 넣어주면 a가 aad로 대체되고 i가 in으로 대체되면서 a a d m i n 이라는 값을 갖게 된다. Mid()함수에..
Image n 버튼을 누르면 창이 넘어가면서 Image1, Image2, Image3을 보여준다. 이 이미지들을 이용해서 alert 문을 띄워줄 수 있을 것 같다. html 문을 살펴보면 어느 부분에 코드를 삽입해주어야 할지 알 수 있을 것이다. 이 부분에 onclick 시 chooseTab이 아닌 alert를 실행시켜주면 Image n 탭을 눌렀을 때 alert가 실행될 수 있도록 할 수 있을 것이다. 개발자 도구를 이용해 tab onclick 명령이 있는 부분을 찾아주었다. 그리고 alert 명령을 뒤에 덧붙여주었다. 그리고 Image 2 탭을 눌러주면 성공!
메세지 창(?)처럼 생긴 부분이 있었는데, 이 부분에 값을 넣어주면 메시지를 띄워준다. 그래서 스크립트 창을 이용해 값을 바로 넣어보았다. 아래 값을 넣어주니 필터링이 되는건지 NULL 값(?)이 전달되는 것을 확인할 수 있었다. 그렇다면 이 문제를 풀기 위해서는 script를 우회?하여 값을 전달해주어야 할 것이다. script 우회 태그라고 검색해보았더니, onerror라는 태그를 찾을 수 있었다. onerror 태그는 이미지가 경로에 없을 때, 대체할 이미지를 지정하는 속성이라고 한다. 대체할 이미지 대신에 명령을 넣어주어도 실행이 될 것이라고 예상하고, img 태그와 onerror를 함께 사용해보았다. 위처럼 img 태그에 경로를 지정해주지 않고, onerror 조건에 alert 문을 넣어 주었다..
LEVEL 1 이기 때문에 굉장히 간단하게 풀 수 있는 문제라고 생각한다. 폼에 넣은 값이 어떤 방식으로 전달되는지 보기 위해 임의의 값을 넣어보았다. url에서 get 방식으로 값이 들어간다. 그러면 그냥 폼에다가 alert 문을 넣어주면 alert창을 띄워줄 수 있을 것이다. script 안에 alert를 넣어서 값을 입력해주었다. 성공!
First name에 hello, Last name에 world라는 값을 넣어보았다. 넣어준 값이 그대로 출력되었다. 위의 URL을 확인해보아도 그냥 값이 그대로 전달되는 것을 확인할 수 있다. 그렇다면 위의 값을 넣는 폼에 스크립트를 넣어 페이지의 쿠키 값을 가져와보고, alert 창을 띄워볼 수 있을 것이다. First name: Last name: 성공 XSS - Reflected (POST) 문제의 경우는 스크립트가 전해지는 방식이 GET 방식이냐 POST 방식이냐 정도의 문제 차이가 있다고 볼 수 있다. 그렇기 때문에 똑같은 값을 넣어주어도 같은 결과가 출력되는 것을 확인할 수 있다.
[low] bee-box는 firefox를 기본 브라우저로 사용하는데, firefox는 .php 파일을 지원하지 않기 때문에 beebox 안에 있는 디렉터리에서 .php 파일을 확인할 수 있다. .php 파일은 /var/www/bWAPP에서 확인할 수 있다. 이번 문제와 관련된 php 파일의 이름은 ba_forgotten.php인 것 같다. cat 명령어로 ba_forgotten.php 파일을 확인해주었다. 함수를 한 번 살펴보았다. 실제 데이터 베이스에 들어있는 이메일이 검색된다는 것을 확인할 수 있다. 이메일이 검색되면, secret이라는 값이 그대로 출력되는 것을 확인할 수 있다. 서버에 저장된 이메일을 사용하는 문제이기 때문에 사이트에서 이메일을 만들어 주었다. Create User에 들어가 폼을..