목록Wargame Writeups (64)
White Security
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..
wargame.kr 사이트의 19번째 문제입니다. "Blind SQL Injection 문제. 아스키 코드를 날짜로 바꾸어보세요." 링크에 접속하면 접속자의 아이피가 게시판에 기록됩니다. 상단에 admin login 링크가 눈에 띄네요. 링크를 따라 들어가면 로그인 페이지가 나옵니다. 지금 할 수 있는 것은 없네요. 다시 메인페이지로 돌아와 테이블을 클릭해보면, chk.php 주소로 들어갈 수 있습니다. IP 로그가 기록된 시간이 나오네요. 메인 페이지의 소스를 확인해보니 hidden으로 숨겨진 요소가 있습니다. 자바스크립트를 이용해서 게시판을 클릭하면, 선택한 IP의 인덱스를 idx value로 넣어 post 요청을 하도록 되어 있습니다. curl을 이용해 idx값을 바꾸어가며 시도해보니 올바르지 않은..
wargame.kr 사이트의 18번째 문제입니다. "간단한 Union SQL Injection 문제입니다. 아마 스크립트를 써야 할거예요." 링크에 접속하면 4개의 게시글 목록을 확인 할 수 있으며 소스도 보여줍니다. SQL Injection은 소스를 보게 되면 난이도가 급락하는 유형이지만 SQL 쿼리문에 익숙하지 않다면, 도움이 될 수도 있을 것입니다. 게시글을 확인하자 HIT(조회수) 카운트가 하나 늘었습니다. 내용 자체에는 기대할 만한 것이 없군요. 사실 이 문제는 이전 web chatting 문제와 같은 방법으로도 해결할 수 있습니다. 하지만 학습을 위한 풀이인만큼 문제의 의도를 최대한 따라가는 편이 좋겠죠? 소스를 확인해 보겠습니다. 훌륭하게도 객체 형태로 되어 있군요. 예쁜 짜임새에 기분이 좋..