인터루드

csrf-1

U.J 2022. 9. 25. 21:37

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/memo 페이지

text = request.args.get("memo", None)

-> 이용자가 전송한 memo 입력값을 가져옴.

이용자가 전달한 memo 파라미터 값을 기록하고, render_template 함수를 통해 출력함.

 

/admin/notice_flag

메모에 FLAG를 작성하는 기능.     *사이트 관리자만이 사용할 수 있음.

로컬호스트 127.0.0.1에서 접근하고, userid 파라미터가 admin일 경우 메모에 FLAG를 작성하고,

만약 조건을 만족하지 못하면 접근 제한 메세지가 출력됨.

/admin/notice_flag 페이지 자체는 누구나 접근할 수 있고, userid 파라미터에 admin 값을 넣는 것도 가능함.

But, 일반 유저가 해당 페이지에 접근할 때의 IP 주소는 조작할 수 없으므로 

이 페이지에 단순히 접근하는 것 만으로 FLAG를 획득할 수 없음.

 

/flag 페이지

Get: 이용자에게 URL을 입력받는 페이지를 제공함.

Post: param 파라미터 값을 가져와 check_csrf 함수의 인자로 넣고 호출함.

check_csrf 함수는 인자를 다시 CSRF 취약점이 발생하는 URL의 파라미터로 설정하고, read_url 함수를 이욯여 방문함.

이 때, 방문하는 URL은 127.0.0.1의 호스트로 접속함. 

 

/vuln 페이지

이용자가 전달한 param의 값 출력.

이용자의 파라미터에 세 가지 악성 키워드인 ''frame","script","on"가 포함되어 있으며, 이것을 "*"으로 치환함.

-> 입력값에서 frame, script, on 세 가지의 키워드를 필터링하기 때문에 xss 공격은 불가능.

But, 필터링 키워드 이외의 다른 키워드와 태그는 사용할 수 있어 CSRF 공격을 수행할 수 있음.

 

FLAG를 얻기 위해서는 /admin/notice_flag 페이지를 로컬호스트에서 접근해야 함.

<img src="/admin/notice_flag?userid=admin" />

이때, userid 파라미터가 admin인지 검사하는 부분이 존재해야 함.

 

답:

DH{11a230801ad0b80d52b996cbe203e83d}

'인터루드' 카테고리의 다른 글

MANGO-1  (0) 2022.09.30
Simple SQLi  (0) 2022.09.30
csrf-2  (0) 2022.09.25
XSS-2  (0) 2022.09.25
XSS-1  (0) 2022.09.25