728x90 Web88 Webhacking.kr Challenge old-43 문제 풀이 문제에 대놓고 웹쉘을 업로드하고 cat /flag를 하라고 나와있다. cat이 있는걸로 보아 cmd기능의 웹쉘을 업로드하라는 것 같다. 간단하게 haha.php라는 웹쉘파일을 만들어주고 업로드를 해보면 잘못된 타입이라고 업로드 되지 않는다. 아마 타입에 대한 필터링이 존재하는것 같다. Accept헤더를 참고해 Content-Type을 바꿔준 뒤 업로드를 시도하면 정상적으로 올라가고 고맙게도 경로까지 출력된다. 그럼 이제 upload/haha.php로 이동해 cmd파리미터로 명령어만 전달해 주면 된다. ls명령어로 다른사람들이 올린 파일도 볼 수 있으니 파일 올리는 거에 주의하도록 하자 2024. 3. 3. [개념정리] case mapping collision 워게임을 풀다가 알게 된 취약점에 대해 정리한 내용이다. Unicode 먼저 Unicode란? 유니코드는 플랫폼, 프로그램 또는 언어에 관계없이 전 세계 쓰기 시스템에서 사용되는 모든 문자에 고유한 숫자 값(코드 포인트)을 제공하는 것을 목표로 하는 문자 인코딩 표준이다. 기본적인 ASCII 범위를 벗어나 전 세계 언어를 표현하기 위해 Unicode를 많이 사용한다. 이로 인해 ASCII로 표현이 불가능했던 문자를 unicode로 표현이 가능해졌다. 이로 인해 예상치 못한 취약점이 발생하곤 하는데 이에 대해 설명하고자 한다. case mapping collision 우선 Java, Python, Ruby등의 언어에서 소문자 → 대문자, 대문자 → 소문자로 변경하는 함수들이 있을것이다. (ex. toLow.. 2024. 2. 29. Webhacking.kr Challenge old-10 문제 풀이 이번 문제는 무슨 문제인지 잘 모르겠다ㅋㅋㅋㅋㅋㅋ 들어가면 O과 결승선이 보이는데 뭔가 해서 구성 코드를 확인했더니 마우스를 O에 올리면 yOu로 바뀌고 클릭하면 오른쪽으로 1픽셀씩 움직인다. 그냥 클릭해서 저 결승선을 넘을 때까지 옮겨주면 되는데 마냥 클릭하기에는 너무 귀찮으므로 그냥 코드를 변경해 위치를 옮겨버렸다. 그러고 몇번 클릭해 주면 문제가 풀린다. 이게 뭔 문제지.... 2024. 2. 27. Webhacking.kr Challenge old-56 문제 풀이 문제에 들어가 보면 검색기능과 게시판들이 보인다. 아마 sql injection으로 보인다. 먼저 admin으로 작성된 글을 읽으려 하면 접근이 거부된 걸 볼 수 있고 guest로 작성된 글은 hello~라는 글이 적힌 걸 볼 수 있다. 이제 검색 기능을 통해 admin에 적힌 글을 읽으면 해답을 찾을 수 있을 것 같다. 검색 기능을 이용해 보니 각각 hello와 guest를 적었을 때 차이점이 보이는 걸로 보아 검색기능은 글의 내용을 바탕으로 이루어지는 것 같다. 우선 다른 문제들과 다르게 소스코드가 없고 문제가 풀리는 조건이 없는 걸로 보아 flag를 제출하는 문제 같은데 flag제출 예시를 보면 FLAG {~~~} 형식으로 이루어지는 걸 알 수 있다. 이걸 토대로 FLAG를 검색해 보면 admin .. 2024. 2. 19. Webhacking.kr Challenge old-60 문제 풀이 이번 문제는 접속 시 내 idx값이 출력되고 있다. 소스코드를 보면 $_COOKIE['PHPSESSID']값이 숫자로 되어 있지 않을 시 해당 코드가 종료되고 숫자일시 mode파라미터값이 auth면 $_SESSION['idx'].txt파일을 불러와 내 $_SESSION ['idx'] 값이랑 같을 시 문제가 풀린다. 하지만 아래 코드를 보면 로컬ip가 아닐 시 1초의 딜레이 후 $_SESSION['idx'].txt가 삭제되는어 불러올 수 없다. 학교 선배님이 말씀하신게 항상 문제를 코드분석을 할 때 굳이?라는 기능의 코드가 있으면 거기에 취약점이 있을 가능성이 있다 하셨다. 위에 코드에서 굳이 있어야 될까 라는 코드는 sleep(1)이라 생각이 되어 보면 드림핵 login-1과 비슷한 문제임을 알 수 있다.. 2024. 2. 16. Webhacking.kr Challenge old-11 문제 풀이 문제에 접속하면 Wrong이라는 단어가 출력되고 있다. 코드를 보면 val 파라미터를 get으로 받고 preg_match함수를 이용해 pat변수에 저장된 정규식으로 검사하고 있다. val을 정규식 형식에 맞게 넘겨주면 문제가 풀리므로 이번 문제는 쉽게 풀 수 있다. 먼저 정규식 해석부터 하면 [1-3] -> 1~3중 한 가지 숫자 [a-f]{5} -> a~f 중 한 가지 문자를 5번 반복 . -> 줄 바꿈 (\n)을 제외한 모든 문자 * -> 앞에 문자를 0 이상 반복 ex) ca*t -> ct , cat , caat , caaat , caaaat.... $_SERVER[REMOTE_ADDR] -> 현재 페이지를 보고 있는 사용자의 IP 주소를 담은 PHP 환경변수 즉, 내 IP주소를 입력하면 된다. \.. 2024. 2. 8. Webhacking.kr Challenge old-41 문제 풀이 문제를 보면 파일 업로드 기능이 있다. 먼저 소스코드부터 살펴보자 코드를 보면 파일 이름을 받아 ., , /을 필터링 하고 있고 ./{$upload_dir}/{$fn}경로로 내가 올린 파일을 복사해 flag값을 넣어주고 있다. 즉, {$upload_dir} 값을 알면 flag값을 알 수 있을 것이다. error_reporting(E_ALL); ini_set("display_errors", 1); 소스코드에 위와 같은 코드가 있는데 이는 에러메시지를 출력해 주는 코드이다. 이게 무슨 취약점을 가지냐면 만약 에러가 발생할 경우 해당 디렉토리 경로까지 같이 출력되어 사용자에게 경로가 노출될 수 있다. 고로 배포 단계에서는 이 코드를 변경하여 에러메시지가 출력되지 않게 하는게 안전하지만 이 문제에서는 에러메세지.. 2024. 2. 6. Webhacking.kr Challenge old-12 문제 풀이 일단 문제에 들어가 보면 javascript challenge라는 단어가 나와있고 코드를 보면 엄청 많은 이모티콘들로 이루어져 있다. 저번에 jsfuck을 이용한 디코딩을 할 때 봤던 유형인데 aaencode로 디코딩할 수 있다. 디코딩을 하면 정상적인 js코드를 확인할 수 있고 코드를 해석해 보면 https://blog.naver.com/diceworld/220175224345 자바스크립트 아스키코드 변환하기 (charCodeAt / fromCharCode) - charCodeAt / fromCharCode 란? charCodeAt 은 문자열... blog.naver.com 문자를 아스키코드로 아스키코드를 문자로 변경하는 연산을 통해 ck가 해당값이 되면 =값을 빼주고 location 시켜주는 방식이다.. 2024. 2. 5. Webhacking.kr Challenge old-49 문제 풀이 이번 문제는 sql injection으로 level에 맞는 id를 출력해 준다. 코드를 보면 select, or, and, (, ), limit, 공백( ) 등등 많은 공격 기법들이 막혀있다 또한 level 숫자를 바꿔도 admin은 출력되지 않으므로 12' or id='admin'# 형식을 넣어 admin이 출력되게 해야 될 것이다. (쿼리문을 참으로 만들기 위해서는 lv가 존재하지 않는 값을 넣어야 된다.) 그럼 이것을 어떻게 필터링을 우회하여 작성하냐가 문제인데 지금까지 했던 것을 조합하면 쉽게 풀 수 있다. 우선 lv는 정수형태이므로 싱글쿼터(')로 닫아줄 필요가 없고 공백과 or는 ||를 사용하여 우회하면 된다. 또한 'admin'은 0x61646d696e로 hex값을 이용하여 문자열로 표현할 .. 2024. 2. 2. Webhacking.kr Challenge old-51 문제 풀이 오랜만에 webhacking.kr! 이번 문제는 admin page라 쓰여있는 것으로 보아 admin으로 로그인하는 문제인가 보다 중요 코드를 보면 id와 pw를 받아 id는 addslashes함수로 방어하고 pw는 md5로 암호화하는 걸 볼 수 있다. 그러고 id의 반환값이 있으면 문제가 풀린다. 처음엔 addslashes를 멀티바이트로 우회하는 문제인가 했는데 addslashes함수 이외에 다른 부분은 보이지 않아 pw 쪽으로 눈을 돌렸다. pw는 md5로 암호화되며 md5는 단방향 암호화로 암호화된 내용을 다시 복호화할 수는 없다. 고로 md5 자체를 우회 할 수는 없다. 그런데 보통 md5함수를 사용할때 md5(string) 형식으로 하는 건 봤어도 md5(string, true)로 true 속성.. 2024. 1. 31. 이전 1 2 3 4 5 6 ··· 9 다음 728x90