web hacking 17

[Dreamhack] csrf-1

목표 : CSRF를 통해 관리자 계정으로 특정 기능을 실행시키기 /vuln - 이용자가 입력한 param 파라미터 값을 출력함 - 이 때, 이용자의 파라미터에 frame, script, on 세 가지의 악성 키워드가 포함되어 있으면 *로 치환함 -> XSS가 발생할 수 있는 키워드를 필터링함 -> 취약점) 하지만, 필터링 키워드 이외의 꺽쇠 를 포함한 다른 키워드와 태그는 사용 가능하므로 CSRF 공격 가능 /memo - 이용자가 메모를 남길 수 있으며, 작성한 메모를 출력함 - 이용자가 전달한 memo 파라미터 값을 기록하고, render_template 함수를 통해 출력함 /admin/notice_flag - 메모에 FLAG를 작성하는 기능. - 이 기능은 로컬호스트(127.0.0.1)에서 접속해야 ..

Web 2022.02.13

[Dreamhack] Web Hacking STAGE 5 (CSRF)

ClientSide : CSRF 서명을 신중하게 관리 = 중요한 웹 서비스의 쿠키를 잘 보관 Cross Site Request Forgery (사이트 간 요청 위조, CSRF) - 이용자의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격 - 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점 ex) 웹 페이지를 만들어 이용자의 입력을 유도한 후, 이용자가 값을 입력하면 이를 중요 사이트 등으로 전송하여 마치 이용자가 동의한 것 같은 요청을 발생시킴 ↑ CSRF 취약점이 존재하는 예제 코드 ↑ - 송금 과정에서 계좌 비밀번호, OTP 등을 사용하지 않았음. CSRF 공격 성공 조건 공격자가 작성한 악성 스크립트를 이용자가 실행해야 한다. -> 메일이나, ..

Web 2022.02.07

[Dreamhack] xss-2

xss-1 문제와 유사해보이지만, vuln(xss) page를 확인해보면, xss-1과 달리 파라미터에 전달된 script가 실행되지 않는다. xss-1과 비교해보면, xss-2에서는 render_template을 사용하고 있어 XSS가 발생하지 않는다는 것을 알 수 있다. memo 페이지는 xss-1과 다른 점이 없어 보인다. flag 페이지도 xss-1과 다른 점이 없어 보인다. 따라서, XSS를 우회할 수 있는 방법을 찾아야 한다. 와 같은 방법이 있는데, 우선 vuln(xss) page를 우회해보자. 태그가 아닌 를 사용한 결과, 우회할 수 있었다. 를 사용하여 아래와 같은 익스플로잇 코드를 입력한 결과, 플래그를 얻을 수 있었다. 참고 https://lrtk.tistory.com/63?categ..

Web 2022.02.06

[Webhacking.kr] old-05

Login 버튼을 누르면 아래와 같이 이동하고, 어떻게든 login 해보려고 해도 Wrong password 라는 문구만 뜨게 된다. Join 버튼을 누르면 아래와 같은 경고창이 뜬다. 위에서 본 각각의 페이지 소스를 확인해봐도 별로 눈에 띄는 건 없었다. URL로 접근하기 위해 아까 전에 확인한 로그인 페이지의 URL을 살펴보았다. 뒷부분의 login.php 를 지우고 URL 접속을 시도해본 결과, 가능했다 !! 아까 경고창만 뜨고 접속하지 못한 join.php 를 클릭해보았다. 그 결과, access_denied 라는 경고창과 함께 빈 화면이 나왔고, 페이지 소스를 확인해보았다. 아래와 같이 복잡해보이는 소스코드를 볼 수 있었다. 우선, 무작정 콘솔 창에 몇 개의 변수를 확인해봤고, 대충 쿠키 값이 ..

Web/wargame 2022.01.16

[Dreamhack] Web Hacking STAGE 2

STAGE 2. Background: HTTP/HTTPS 인코딩 표준 1) 아스키 - 알파벳과 특수 문자 등을 표현함 ex) 1000001을 아스키로 변환하면 A가 됨 2) 유니코드 - 모든 언어의 문자를 하나의 표준에 담겠다는 목표로 제정되었음 - 한 문자는 최대 32비트로 표현되어 약 42억개를 표현 가능함 - 최근에는 각종 이모지들도 유니코드에 포함되고 있음 프로토콜 - 규격화된 상호작용에 적용되는 약속 - 각 통신 주체가 교환하는 데이터를 명확히 해석할 수 있도록 문법(syntax)을 포함함 - 표준 통신 프로토콜의 예) TCP/IP, HTTP, FTP 등 HTTP(Hyper Text Transfer Protocol) - 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜 - ..

Web 2022.01.15

[Webhacking.kr] old-24

view-source 를 확인해보자. extract() 배열 속의 키 값들을 변수화 시키는 함수 $_SERVER 와 $_COOKIE 값을 변수화 $REMOTE_ADDR 클라이언트의 IP를 가져오는 PHP의 환경변수 $REMOTE_ADDR 값을 $ip 에 저장 $HTTP_USER_AGENT 클라이언트의 접속 환경 정보를 가져오는 PHP의 환경변수 $HTTP_USER_AGENT 값을 $agent 에 저장 htmlspecialchars() 특수 문자를 HTML 엔티티로 변환해주는 함수. 특정 문자는 HTML에서 특별한 의미가 있으며, 의미를 보존하려면 HTML 엔티티로 표시해야 함. ex) & -> & / " -> " / ' -> ' / &lt / > -> &gt $REMOTE_ADDR 값이..

Web/wargame 2021.11.21

[Webhacking.kr] old-01

user_lv 쿠키가 존재하지 않으면 SetCookie() 로 쿠키를 설정 is_numeric(파라미터) 지정한 파라미터가 숫자인지 아닌지 확인해주는 함수. 반환값은 bool, 숫자인 경우 true, 아닌 경우 false user_lv 쿠키 값이 숫자가 아니면 1로 설정 user_lv 쿠키 값이 4 이상이면 1로 설정 user_lv 쿠키 값이 3보다 크면 solve(1) 실행 즉, user_lv 쿠키 값을 3 초과 4 미만의 값으로 설정하면 문제가 해결될 것 같다. 개발자 도구로 user_lv 쿠키를 확인할 수 있다. user_lv 쿠키 값을 3.5로 변경하고, 새로고침 해주면 해결!

Web/wargame 2021.11.21

[Webhacking.kr] old-12

부분을 자세히 보면, 이렇게 이모티콘으로 난독화 되어 있는 걸 볼 수 있다. 이는 자바스크립트문을 이모티콘으로 인코딩하는 aaencode 기법이라고 한다. 디코딩 사이트를 통해 디코딩해보자! 복호화 사이트 https://cat-in-136.github.io/2010/12/aadecode-decode-encoded-as-aaencode.html aadecode - Decode encoded-as-aaencode JavaScript program. ['_'] aadecode - Decode encoded-as-aaencode JavaScript program. (゚Д゚) ['_'] Enter ... cat-in-136.github.io 위의 디코딩된 코드를 좀 정리해서 보면, var enco=''; var ..

Web/wargame 2021.11.11

[Webhacking.kr] old-26

GET 방식으로 id 값이 admin이면 문제가 해결되는 것 같다. 하지만 preg_match()로 admin을 필터링하고 있어서 no!라는 경고만 뜨게 된다. 코드를 다시 보면, GET 방식으로 전달받은 id 값을 urldecode()를 통해 다시 id 값에 대입하는 것을 알 수 있다. 그래서, 반대로 admin을 인코딩해준 값인 %61%64%6d%69%6e를 다시 id 값으로 전달해보면 자동으로 admin으로 디코딩이 되고, 이전과 같이 no!라는 경고만 뜨는 것을 알 수 있다. 따라서, admin을 2번 인코딩한 값인 %2561%2564%256d%2569%256e를 다시 전달해보면 해결!

Web/wargame 2021.11.07