본문 바로가기

5. 방학 활동/Write UP

[2023.02.02] 워게임&CTF 스터디 1팀 문제풀이(웹)]

※ 관련 개념은 방학활동 / 개념정리를 참고해주세요 ※

 

# Dreamhack_csrf-1

 

실행화면)

 

실행화면_vuln(csrf) page)

Vuln 함수에서 script문이 *로 필터링된다는 것을 볼 수 있다.

 

실행화면_memo)

memo함수에 'hello'라는 문자열이 존재하는 것을 보아, 쿠키값이 존재한다는 것을 알 수 있다. 따라서, flag에 입력한 값이 성공하게 되면 출력되는 페이지라고 볼 수 있다.

 

실행화면_notice flag)

스크립트 언어를 기입하여, 공격하는 페이지이다.

 

실행화면_flag)

값을 제출하면 플래그 값이 보일 것으로 추정된다.

 

[코드 분석하기]

1) Cookie 생성됨

2) Domain : 127.0.0.1:8000 (local host)

→ 제공받은 주소와 포트가 다르므로 쿠키 값이 저장되어있지 않은 것을 알 수 있다.

    지정된 도메인에서 확인해야 함

 

입력한 URL을 참조한다는 것을 알 수 있다.

 

- 이 코드에서도 또한 도메인 주소가 127.0.0.1인 local host로 접근해야한다는 사실을 알 수 있다.

1) userid = admin

 

정리해보자면, notic_flag 사이트의 userid(쿠기값)는 admin이어야 하며, 포트번호는 local host여야한다는 것이다.

 

따라서 flag 페이지에는

<img src=http://localhost:8080/admin/notice_flag?userid=admin>

가 들어가야 한다.


# Dreamhack_file-download-1

 

실행화면)

 

실행화면_Home)

 

실행화면_Home_Upload)

Home 페이지에서 입력한 Filename이 들어간다.

 

실행화면_Home_Upload_filename)

입력한 Filenmae을 클릭하게 되면 Content에 작성했던 내용이 나온다.

 

[코드 분석하기]

flag.py 파일 내용 중 upload_memo 함수 부분이다.

1) 사용자가 메모를 작성하면 제목은 Filename, 내용은 content로 저장

2) POST 요청으로 전달한 Filename 파라미터 값에 상위 디렉토리 이동 명령어 '..' 탐지

3) '..'이 탐지되지 않으면 Filename 파라미터(매개변수) 명으로 파일을 생성하고, Content를 내용으로 작성

 

flag.py 파일 내용 중 read_memo 함수 부분이다.

1) 업로드 된 파일들의 디렉터리 =  filename 바로 위 디렉터리

 

따라서, 메모와 content가 보이는 마지막 화면(Home_Upload_filename)에 위 파일을 업로드 해주면 될 것이라는 예상을 할 수 있다. 

 

home_upload_filename 화면의 url을 보면(위 사진 참고), "http://host3.dreamhack.games:20467/read?name=df" 로 되어 있어서 name변수의 값이 직접 입력한 filename(df)로 되어있는 것을 알 수 있다.

 

따라서 name의 값에 파일을 올려주면 될 것이라는 판단을 할 수 있다.

업로드 된 파일들의 디렉터리는 filename 바로 위 디렉터리 이므로, 상위 디렉토리 이동 명령어인 ".."를 이용하면 된다.

"http://host3.dreamhack.games:20467/read?name=../flag.py"


# Lord of SQL injection_gremlin

 

실행화면)

gremlin문제의 첫 페이지(문제)

1) get 방식으로 url에서 변수를 받아오고, 그것을 SQL에 query로 날려보냄

2) id와 pw가 and로 연결되어있음

▷ query를 날리기 위해서는 url 맨 뒤에 '?' 를 붙여야 함

 

따라서, 이를 해결하려면 id와 pw가 참이 되도록 해야하는데, 그 방법은 바로 우선순위가 높은 'or'을 이용해야 참이 될 수 있다.

→ url : ~~.php?id=admin@pw=admin&pw=admin'or'1'='1


# Lord of SQL injection_cobolt

 

[실행화면 & php 소스 분석]

cobolt의 처음페이지(문제)

앞 문제 (Lord of SQL injection_cobolt)와 비교해보면, pw 부분이 달라졌음을 알 수 있다.

 

일단, 어떻게 query에 입력되는지 확인하기 위해 

?id=admin&pw=admin

을 넣어봤더니,  

위의 사진처럼의 결과가 나왔다. 결과를 통해 pw 검증을 우회하는 방법을 써야한다는 것을 알 수 있다.

우회하기 위해서는 주석 표시인 '#'을 사용해야 함을 알 수 있다.

→ 방법 : id=admin'# 사용

 

하지만, 이를 url에 입력해야하기 때문에 '#'을 디코딩을 한 %23 와, '을 디코딩한 %27을 삽입해야한다는 사실을 알 수 있다.

따라서 url에  ~.php?id=admin%27%23 을 입력하면 된다.


# webhacking.kr_1번

 

실행화면)

webhacking.kr 1번 처음 페이지

 

[php 소스 분석]

webjacking.kr_level 1_view source

1) 윗 부분의 php 소스; user_Iv의 쿠키 값이 존재하지 않으면 SetCookie를 이용하여 설정

2) 아랫 부분의 php 소스; user_Iv의 쿠키 값이 4이상이면 쿠키값을 다시 1로 설정 

3) user_Iv의 쿠키 값이 3보다 클 경우에는 solve(1) 실행

따라서, user_Iv의 쿠키 값은 3과 4 사이의 값으로 설정해야한다.


# Dreamhack_cookie

 

문제화면)

dreanhack_cookie문제 첫 페이지

 

[php 소스 분석]

1) users의 갯수 : 2개 (guest, admin)

 

실행화면)

 

실행화면_개발자 도구(F12))

1) 개발자 도구(F12)로 확인해보니 guest, guest로 로그인이 가능함을 알 수 있다.

 

→ 이를 이용해 로그인을 하면, 쿠키 값이 생성된다는 것을 알 수 있다.

value(쿠키값)를 users 계정 중 admin으로 수정한 후 새로고침을 하면 flag 값이 나온다.