#HTML 변조

 

2) Try it yourself

 

#개발자도구

 - 정상적인 웹사이트는 데이터 검증을 하지만, 이 사이트는 하지 않는다.

 - total을 찾아서 값을 변조해봤지만, 화면상에서만 바뀌고 오답이 출력된다.

 - 조금 더 밑을 보니, type이 hidden인 숨겨진 태그가 보인다. 

  -> 0을 대입하고 checkout을 누르니 해결.

 

client side에서만 검증을 받게되면 이러한 취약점이 발생한다.

그러므로, server side에서도 검증을 받아야 한다.

#서버가 직접 권한을 검사해서 모든 클라이언트한테 출력을 다르게 하거나,

 클라이언트쪽에서 검사해서 접근은 할 수 있지만 출력값이 달라지게 할 수 있는데,

 후자를 이용한 사이트의 취약점(메모리 or 캐시 등엔 기록됌.)

 

2) Salary manager

 

 

#개발자도구 - network

 - network는 로드되는 모든 응답들을 보여주는데, 아무 것이나 조회하면 userid=101으로 뿌려지는 응답들이

  보인다.

 

 

#end

 

 

3) 돈을 안내고 살 수 있게 코드입력하기

 

 

#2번문제처럼 network를 검사.

 - 버튼들을 입력하다 보면 coupons/ 가 보이는데, 안에 있는 쿠폰 중, get_it_for_free를 입력하면 0원이 된다.

 

 

#end

 

#Client side attack : 서버에게 전달되기 전에, 프론트엔드에서 변조.

 

2) Fied Restrictions

 - select field with two possible values : 두 가지밖에 고르지 못한다.

 - Radio button with two possible values : 라디오 버튼 두 가지 밖에 고르지 못한다

 - Checkbox values either on or off : on 혹은 off인 체크박스

 - Input restricted to max 5 characters : 5글자밖에 쓰지 못한다.

 

 모든 제한된 것들에서 다른 것을 할 수 있어야 한다.

  ex) 두 가지 제한 --> 세 가지의 선택지

 

 

#개발자도구 사용

 - 모든 제한 사항을 넘치거나, 바꾸면 된다.

 

1. 옵션 2개제한

 -> 옵션쪽에서 우클릭 한 다음, edit as HTML 을 누르면 HTML 코드를 수정할 수 있게 되는데,

     <option value="option2">Option 2</option> 줄을 복사하고 붙여넣은 다음, 3으로 바꿔주면 된다.

 

2. 2가지의 라디오 버튼

 -> 라디오버튼을 1번과 마찬가지로 하나 복사해서 넣고, input type을 checkbox로 바꿔주고, 기존의 라디오 버튼 하나       도 마찬가지로 checkbox로 바꿔준다.

   라디오버튼 3개로 제출하니까 오답이 났었다. --> 문제에 라디오버튼이라고 명시해서 그런 것 같다.

 

3. on과 off가 가능한 체크박스

 -> input type을 text로 바꿔서 텍스트박스로 만들어버리자.

 

4. 5글자밖에 쓰지 못한다.

 -> maxlength="5" 부분을 6으로 바꾸고 value를 6자리로 바꿔주자.

 

#end

 

 

3) Validation

 - 모든 정규식에 맞지않는 값을 보내야 한다.

 

 

#특수문자를 모두 넣었지만 잘못되었다고 에러를 출력한다.

 

 

#버프슈트로 검사

 - 필드 7개가 에러를 출력했는데, error가 7이므로 0으로 바꿔서 request를 전송한다. --> error=0

 

 

#end

 - 개발자도구에서 이벤트 리스너를 지워주면 풀리기도한다.

#File Inclusion

 - PHP 기반 웹 어플리케이션에서 클라이언트(사용자)가 직접 파일을 업로드 할 수 있을 때 발생하는 취약점.

 - RFI (Remote FIle Inclusion)과 LFI (Local File Inclusion)으로 나뉘어져 있다.

 

 

(1)#RFI : Remote File Inclusion -> 원격 파일 실행 (include나 requir같은 함수에서 URL전달값을 검사하지 못할 때)

 - php파일들이 업로드 되어 있는 것을 확인하였다.

 

 

#게시글 업로드가 없으니 내부적으로 파일을 생성하여 넣어보겠다.

 - /etc/passwd 파일을 위에서부터 5줄 출력

 

#end

 

 

(2)#LFI : Local File Inclusion -> 내부적 파일 실행 (시스템에 이미 존재하는 파일이 include함수로 들어갈 때)

 - /etc 디렉터리에 hi라는 파일안에 Hello?라는 메세지를 넣었다.

 

#url 조작

 - ../ : 한 단계 상위 디렉터리로 이동.

 

 - etc폴더의 hi파일이 출력되는 것을 볼 수 있다.

'Web > Dvwa' 카테고리의 다른 글

Dvwa(Level : Low) CSRF  (0) 2021.05.16

#Missing Function Level Access Control

  - 엑세스 제어 수준 기능 누락

 -> 민감한 요청 처리기의 인증검사가 불충분하거나 존재하지 않는 경우.

  --> 권한 없는 사용자가 민감한 정보를 포함하는 URL을 액세스하거나, 권한없는 기능을 노출 가능. (OWASP 中)

 

 

(2)

 - 숨겨진 항목을 찾으라고 한다. 

  -> html에서 페이지에 출력은 안되지만 존재하게 만들 수 있다. (input type = hidden)

 

 

#개발자도구

 - network 목록에서 페이지가 처음 로드될 때 Response(응답)코드를 본다.

 

#hidden찾기

 - hidden이 여러 개 나오는데, hidden-menu가 왠지 찾고 있는 숨겨진 메뉴일 것 같다.

  -> ul(리스트)를 보니 /users로 가는 링크 "Users"와 /config으로 가는 링크 "Config"이 있다.

 

#end

 

 

 

(3)

 - SQL 삽입 취약점 같은 곳에서 데이터 덤프가 발생하지만, 제어가 부족하거나 존재하지 않아

   발생할 수 있다.

 - 댓글, 유출 된 정보에 주목하여라.

 - 다른 브라우저 또는 계정을 사용할 수 있다.

 - 이미 수집한 (숨겨진 메뉴 아이템) 사용자 목록을 가져온 다음 자신의 사용자 계정에

   '해시'를 확인하여라.

 

 

#숨겨진 메뉴 분석

 - Users 가 사용자 목록인 것 같다. a herf="/users"라는 것은

   메인 페이지("localhost/webgoat") 밑의 경로라고 볼 수 있다.

 

 

#localhost/webgoat/users 접속

 1) 서버 내부적 에러 코드 500

   -> users 파일은 찾을 수 있으나(not 404), 처리과정에서 오류가 발생

 

 2) templates/list_users.html 을 파싱하는데 실패하였다.

 

 3) TemplateEngin : 특정 데이터 모델에 따른 입력자료를 합성하여 결과문서를 출력해주는 소프트웨어

   -> 데이터가 없거나, 템플릿이 없는 경우인데.

       윗 부분에서 템플릿이 없다고 이미 오류코드를 출력했다.

 

 

#template 배제하고 데이터를 요청하기 위해 request 분석

 - Content-type : request에 실어 보내는 body의 정보를 표시

 

 

#Content-type : Application/java 추가

 - hash가 잘 출력된다.

 

 

#end

#CSRF : Cross Site Request Forgery)

 - 인터넷을 사용하는 사용자가 자신의 의지와는 무관하게 공격자(해커)가 의도한 행위(생성, 삭제, 변경) 등 을

   특정 웹사이트에게 요청하게 만드는 공격

 

 - 희생자(사용자)의 권한에 한해서 실행(공격) 가능.

 

 - 조건

  -> 요청을 전송받는 사이트(서비스)에 희생자가 연결이 맺어진 상태(로그인 중)

  -> 희생자가 해커가 만든 사이트 혹은 게시글에 접속 혹은, 파일을 실행

  -> 웹 어플리케이션에서 정상적인 경로의 요청과 비정상적인 경로의 요청을 서버가 구분하지 못해야 함.

 

#패스워드 변경을 시도하고, 요청을 전송하지 않고 프록시에 고정.

 

#변경 후 응답받은 페이지를 분석

 - <form ...> : 폼 데이터를 서버로 보낼 때, 데이터가 도착할 url(action 속성), 방식(method) 등이 포함.

 

 - action="#" : 현재 페이지에 남아 있음.

   -> 해당 페이지에서 변경을 수행.

 

#form 태그의 action속성으로 html form 파일(.html)을 하나 생성.

 - action : 작업을 수행할 경로

 - input type="hidden" : 페이지에 입력받는 곳이 보이지 않게 해줌.

 - autocomplete : 자동완성 여부 (패스워드를 브라우저에 저장함)

 - name : 적용할 대상

 - value : 적용할 값

 - tyep="submit" : 버튼 생성

 

 -> 즉, (공격자의) 지정한 비밀번호들을 (희생자가) 버튼만 누르면 자동으로 전달되어서 적용되게 변경.

 

#파일 시나리오(메일)

 

#파일 실행

 

#end 

 - 버튼을 누르니 "비밀번호가 변경되었습니다." 멘트가 뜨고,

   비밀번호 검사를 하니 지정한 비밀번호가 유효하다고 출력된다.

 

 

tip) 이 문제를 실습하다 value를 잘못 지정해서 로그인이 안된 적 있는데,

     localhost/dvwa/setup.php에서 database를 다시 생성해주면 초기화 된다.

'Web > Dvwa' 카테고리의 다른 글

Dvwa(Level : Low) File Inclusion(RFI, LFI)  (0) 2021.05.17

#hint : /etc/xinetd.d에 백도어가 있다고 한다.

 

#/etc/xinetd.d 디렉터리에서 backdoor파일을 열었다.

 - xinetd.d : 오픈소스 슈퍼 서버 데몬 (인터넷 기반 연결을 관리한다.)

 - finger : 사용자 계정정보 명령어

  -> user : 파일을 실행할 사용자 권한

  -> server : 서비스 파일(동작)의 경로

 

#backdoor파일 생성 후 컴파일

 - level5의 권한으로 실행할 때, 패스워드를 알아야 되므로

   패스워드를 출력하는 실행 파일을 server 경로에 "backdoor" 이름으로 만든다.

 

#finger 서비스 실행

 - finger @localhost

  -> @localhost로 현재 접속한 계정의 정보를 출력하면

      server의 서비스파일이 실행되면서 level5의 패스워드를 출력한다.

'[P]wnable&[R]eversing > [P]HackerSchool(FTZ)' 카테고리의 다른 글

HackerSchool level-3  (0) 2021.05.09
HackerSchool level-2  (0) 2021.05.09
HackerSchool level-1  (0) 2021.05.09

#hint : 프로그램 코드가 주어지고, 이를 분석하여 level4의 권한을 열어야 한다.

 - if( argc!=2){...}

  -> 인자값이 2가 아니면 printf 두줄을 출력한다.

  

 - strcpy( cmd, "dig @" );

  -> cmd에 "dig @"를 복사

  -> dig : DNS 정보 확인 명령어

 

 - strcat( cmd, argv[1] );

  -> 입력한 문자열 (argv[1])을 이어붙임

 

 - strcat( cmd, " version.bind chaos txt");

  -> " version.bind chaos txt"를 cmd에 이어붙임

 

 tip) strcpy : 문자열 복사

      strcat : 문자열 이어붙이기

 

 - system( cmd );

  -> cmd 문자열 실행

 

: "dig @(입력한 문자열) version.bind chaos txt"

 hint1 : 동시에 여러 명령어를 사용하려면?

  -> ";" 기호를 사용한다.

 hint2 : 문자열 형태로 명령어를 전달하려면?

  -> " " 로 감싸주어야 한다.

 

 즉, 입력한 문자열 부분에서 첫 번째 입력값은 dig 명령어의

 파라미터로 들어가게 되므로,

"(dig파라미터);(실행명령어) #(뒷부분 주석처리)"

" ;my-pass #"를 입력하여야 한다.

 

#autodig 파일찾고 이동.

 

#autodig " ;my-pass #"

 실제 실행 코드 : dig @ ;my-pass # version.bind chaos txt

'[P]wnable&[R]eversing > [P]HackerSchool(FTZ)' 카테고리의 다른 글

HackerSchool level-4  (0) 2021.05.09
HackerSchool level-2  (0) 2021.05.09
HackerSchool level-1  (0) 2021.05.09

#hint : 텍스트 파일 편집 중 쉘 명령 실행

 

#find : level3 setuid 권한을 가진 파일찾기

 

#vi로 열어보니 파일이 깨지므로, 경로를 이동해서 실행(=VIM)

 - 빈 파일이 나온다.

 

#:!my-pass

 - 텍스트 파일 안에서 외부 쉘 명령어를 실행하려면 esc를 눌러 명령모드로 진입한 다음,

   ":!명령어"를 입력을 하면 실행이 된다.

 

#flag

 - 파일이 level3의 권한으로 setuid가 걸려 있어서, level3의 권한으로 명령이 실행되어

   비밀번호가 출력되었다.

'[P]wnable&[R]eversing > [P]HackerSchool(FTZ)' 카테고리의 다른 글

HackerSchool level-4  (0) 2021.05.09
HackerSchool level-3  (0) 2021.05.09
HackerSchool level-1  (0) 2021.05.09

#level1 password : level1

 

#hint : level2권한으로 setuid가 걸린 파일을 찾아 야 한다.

#find 명령어 활용.

-user [username]

->유저이름

-perm -[perm number]

-> 권한 정보 (setuid4000이다.)

- 2>/dev/null

-> 표준에러 ‘2’/dev/null로 보내서 화면에

출력되지 않게 함.

 

#/bin/ExecuteMe 실행

- password를 알아야 level2로 넘어갈 수 있는데,

my-pass가 잠겨있다.

- /bin/bash를 입력하여 level2의 권한으로

쉘을 하나 실행.

 

#id, my-pass

- id를 입력하여 권한이 level2인지 확인하고

my-pass로 비밀번호를 확인한다.

'[P]wnable&[R]eversing > [P]HackerSchool(FTZ)' 카테고리의 다른 글

HackerSchool level-4  (0) 2021.05.09
HackerSchool level-3  (0) 2021.05.09
HackerSchool level-2  (0) 2021.05.09

+ Recent posts