본문 바로가기
카테고리 없음

[6주차]웹해킹 문제풀이

by jwk818 2023. 11. 15.

<Dreamhack csrf-1>

https://dreamhack.io/wargame/challenges/26

 

csrf-1

여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. 문제 수정 내역 2023.07.18 css, html 제공 및 read_url() 코드 일부가 변경되었습니다. Referen

dreamhack.io

들어가자마자 보이는 화면인데 지난번 ctf 문제와 비슷하게 vuln 페이지에서 힌트를 얻고 메모 페이지를 통해 flag 값을 노출시키는 것 같다. flag 페이지는 flag 값을 입력하는 곳이다. 문제 이름인 csrf는 공격자가 피해자의 인증된 세션을 이용하여 웹 서버에 악의적인 요청을 보내는 공격이다.

 

 

메모 페이지 주소창에 memo=swlug라고 썼더니 그대로 메모 내용에 입력되었다. 

 

 

주소창의 내용을 보니 이 페이지를 통해 flag값을 얻어야 한다. 따라서 로컬 호스트에서 /admin/notice_flag?userid=admin으로 접근해야 한다. 이것을 수행하게 해주는 페이지가 /flag이다. 

 

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

 

 

다시 메모 페이지에 가보면 flag 값이 적혀있다.

 

 

 

<Dreamhack csrf-2>

https://dreamhack.io/wargame/challenges/269

 

csrf-2

여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. 문제 수정 내역 2023.07.18 css, html 제공 및 read_url() 코드 일부가 변경되었습니다. Referen

dreamhack.io

 

 

들어가자마자 보면 로그인을 하라고 나와있다. 아마 admin으로 로그인 하면 flag 값을 볼 수 있을 것 같다. 

 

아무 아이디나 입력하니 wrong password라고 떴다. 

 

login.html

 

#루트 페이지

#admin 계정으로 로그인할 경우 /index.html에서 flag값 확인

@app.route("/")

def index(): session_id = request.cookies.get('sessionid',

None) try: username = session_storage[session_id] except KeyError: return render_template('index.html', text='please login') return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not an admin"}')

 

guest 계정으로 로그인하면 세션도 guest 세션으로 유지된다. 소스코드를 확인해보니 비밀번호를 변경할 수 있고, 경로는 /change_password이다. 이것을 링크로 요청하면 변경할 수 있다.

 

/change_password?pw=1234

로 변경해보았다.

 

 

 

<img src="/change_password?pw=1234" />

 

로그인 후, 이번에도 flag 페이지에 입력해주면 된다.

 

 

 

 

 

 

 

<Dreamhack XSS Filtering Bypass>

https://dreamhack.io/wargame/challenges/433

 

XSS Filtering Bypass

Description Exercise: XSS Filtering Bypass에서 실습하는 문제입니다. 문제 수정 내역 2023.08.04 Dockerfile 제공

dreamhack.io

 

이번에도 아까 문제와 비슷해 보인다. 문제풀이에 앞서 xss 공격과 필터링에 대해 알아봤다.

 

XSS 공격은 공격자가 악성 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행되게 함으로써 발생한다. 이를 통해 공격자는 사용자의 세션 쿠키를 훔치거나 다양한 악의적인 행동을 수행할 수 있다.

XSS 필터링은 웹 애플리케이션에서 사용자가 입력한 데이터에서 악성 스크립트를 필터링하여 방지하는 기술 또는 메커니즘을 의미한다. 이를 통해 애플리케이션은 사용자의 입력을 신뢰할 수 있도록 하고, 악성 스크립트를 실행하지 않도록 보호한다.

이번에는 vul 페이지에 사진이 뜬다. 

그리고 필터링되는 문자열과 치환되는 문자열이다. 따라서 해당 문자열을 우회하여 flag 값을 획득해야 한다.

필터링 되는 script, on, window, self, this, document, location, (,), &#

 

<iframe src="javas cript:locatio n.href='/memo?memo='+do cument.cookie"> 

tab키로 필터링을 피한 코드를 입력해준다. 

 

 

 

 

 

 

<webhacking.kr old 23>

https://webhacking.kr/challenge/bonus-3/

 

Challenge 23

 

webhacking.kr

 

문제를 읽어보니  <script>alert(1);</script> 를 삽입하면 풀린다. 

 

 

그대로 입력하니 no hack이라는 문구가 뜬다.

 

좀 찾아보다가 이 문제의 url을 살펴보니 get 방식으로 code를 받는 것을 확인할 수 있다.

 

 

 

그래서 코드 뒤에 swlug라고 입력하니 no hack이라고 뜨고, s라고 입력하니 화면에 출력되었다.

 

확인해보니 영어 알파벳이 두개 이상 연속으로 붙어있으면 no hack이라고 뜨며 필터링한다. 그러므로 영어 문자 사이에 null 값을 넣어 우회하는 것이 좋다. null의 인코딩 값인 %00을 알파벳 사이에 넣어준다.