목록Wargame Writeups/wargame.kr (26)
White Security
wargame.kr 사이트의 마지막 웹 문제입니다. SQL 인젝션 문제입니다 접속하자마자 소스가 표시되는데 pw, flags 값이 사전 계산된 값과 동일하면 플래그를 출력하고 그렇지 않은경우 id 컬럼만 표시하고 있네요. id 컬럼 출력 부분을 활용해서 정보를 가져올 수 있을 것으로 보입니다. http://wargame.kr:8080/adm1nkyj/?id=admin&pw='+and+0+union+select+1,@@version,3,4,5--+- http://wargame.kr:8080/adm1nkyj/?id='+or+1+order+by+5--+- id 파라미터에 order by 절을 사용해 findflag_2 테이블의 컬럼이 5개라는 것을 알 수 있었습니다. http://wargame.kr:8080/..
wargame.kr 사이트의 30번째 문제입니다. Error based SQLi Challenge 링크에 접속하면 로그인 화면을 볼 수 있습니다.ID는 본인 아이피로 고정되어 있으며변경하여도 서버에서 검증하기에 의미가 없습니다. 모든 파라미터는mysql_real_escape_string 함수를 거쳐 사용되며유일하게 type 파라미터만이 쿼트가 없습니다. 따라서 type 뒤에 or으로 조건식을덧붙여주면 로그인이 가능합니다. 하지만 Flag를 얻으려면실제 ps 파라미터가 검증되어야 하므로우리는 ps 값을 알아낼 필요가 있습니다. extractvalue 함수를 사용해서error based sql injection을 시도해 보았지만t_user 는 임시테이블이기에 다중 접속이 불가하고all_user_account..
wargame.kr 사이트의 29번째 문제입니다. 쉬어가는 문제입니다찾아보니 jff3는 CTF 이름이네요. 링크에 접속하면 alert이 반겨줍고 있습니다. 아직 개발이 완료되지 않았다며 자바스크립트를 통해 이전 페이지로 돌아갑니다. 좌측에 멤버 목록으로 Cd80 Orange Comma 가 있고 우측에는 로그인 폼이 존재합니다. 로그인을 시도할 시에 비밀번호 해시값을 보여주는데 이를 통해 해시 타입을 유추해 볼 수 있었습니다. 위는 haval 128,5 해시입니다. 자바스크립트를 차단하고 멤버 목록을 선택해 보면 이름이 나타납니다. 여기서 no 인자값을 0으로 바꾸어보면 유저명이 admin 으로 나타납니다. 인젝션을 시도하면 거의 모든 구문들이 차단되어 있는 것을 확인할 수 있습니다. if 함수는 차단되었..
wargame.kr 사이트의 28번째 문제입니다. sucker_enc 너무 짜증나요.로그인을 할 수 있을까요? 본 문제는 오버플로우 문제입니다. mysql_query에 너무 긴 쿼리가 주어지면스택 오버플로우가 일어나서 false가 리턴된다는 점을 이용합니다. admin 계정으로 로그인하면 될 것 같군요. init 함수 내에 admin 계정의 ssn 기록되어 있지만작동하지 않습니다. mcrypt 모듈을 이용해 암호화 하는 것을 볼 수 있는데요.따라서 ssn 인자 길이에 따라 sucker_enc($ssn) 의 길이을조절하는 것이 가능합니다. ssn 값이 너무 길다면위처럼 쿼리문을 전달하기도 전에 php에서오버플로우가 일어나니 적절히 조절할 필요가 있습니다. 길이를 적절히 맞추면mysql_query에서 fal..
wargame.kr 사이트의 27번째 문제입니다. 패딩 오라클 취약점을 알고 계신가요? 다소 생소할 수 있는 padding oracle 취약점에 대해 다루는 문제입니다. php의 mcrypt 모듈로 생성가능한 암호문인데 자세한 내용은 https://laughfool.tistory.com/31 위 링크의 문서를 참고하면 좋을 것 같습니다. 페이지에 미리 입력된 그대로 로그인하면 위와 같은 메시지를 확인할 수 있습니다. admin 계정으로 로그인하면 풀리는 문제인 것 같네요. guest로 로그인 시에 설정되는 쿠키값이 눈에 띕니다. URI 디코딩 과정을 거치면 위와 같이 변하는데 두 개의 '=' 문자로 보아 두 부분으로 쪼개진 base64 암호문으로 보입니다. 복호화를 거치면 각 8바이트 값을 띄고 있습니다..
wargame.kr 사이트의 25번째 문제입니다. Time based SQL Injection 문제 INSERT 쿼리 실행결과를 확인할 수 없더라도 SQL Injection 공격은 할 수 있습니다. 링크에 접속하면 자바스크립트로 효과를 넣어둔 텍스트 효과가 눈에 띕니다. 상단에 메뉴가 4개 존재하는데 조작이 가능한 곳은 맨우측의 JSMaster 페이지 뿐입니다. 관리자에게 보낼 메시지를 적을 수 있도록 되어 있는데 작성하고 send를 누르면 테이블에 저장이 되는 모양입니다. 전송하고 나면 쿼리의 실행 완료 메시지를 받아볼 수 있습니다. type 파라미터 sleep 함수를 끼워넣으니 잘 작동합니다. 내부에 if문으로 둘러서 응답에 1초 이상이 걸린다면 조건식 결과가 참이라는 것을 확인할 수 있겠네요. fr..
wargame.kr 사이트의 24번째 문제입니다. SQL injection 문제입니다! 링크에 접속하니 게시글 목록을 확인할 수 있었습니다. 검색창의 우측에 존재하는 or, and는검색 기준을 다수 지정했을 경우에 where subject like '%keyword%' or content like '%keyword%'와 같이 where 절 내에 삽입되는 용도로 쓰입니다. 소스에서는 상단에 위치한parse_str($_SERVER['QUERY_STRING']) 이라는 부분이눈에 띕니다. 이는 GET또는 POST로 전달되는 인자들을php 변수로 변환해주는 일을 합니다. 만약 php내에서 사용되는 변수명을 예측할 수 있다면예기치 못한 동작을 유발시킬 가능성이 있는 취약 코드입니다. 만약 col 에서 정규식 (s..
wargame.kr 사이트의 21번째 문제입니다. Blind SQL Injection 문제입니다. order by 내에서 Injection을 할 수 있나요? 링크에 접속하면 테이블이 하나 나오고 우측 상단의 reg_single을 클릭하면 정렬 방법을 변경할 수 있습니다. 기본 정렬 방법은 asc이며 클릭시 [ asc desc ]로 교차변경 됩니다. 이번에도 식은 간단하며 POST방식으로 sort 변수를 전송하면 쿼리 뒷부분에 붙어야 할 asc, desc 뒤에 표현식을 써넣는 것으로 블라인드 인젝션을 시도할 수 있습니다. order by [ column | column_number, ... ]의 형식을 취하는 order by절은 정렬기준을 다수로 지정할 수 있는데 기존에 존재하는 reg_data colum..