본문 바로가기
728x90

분류 전체보기215

Webhacking.kr Challenge old-9 문제 풀이 문제에 접속해 보면 1, 2, 3이 있고 각 번호를 누르면 url을 보면 no파라미터로 번호를 받고 있고 no=3을 들어갔을 때 컬럼과 3번의 id가 password라고 출력되는 걸 확인할 수 있다. 우선 코드가 공개되어 있지 않지만 sql injection인 게 유력하므로 쿼리문을 유추해 보면 mysqli_fetch_array(mysqli_query($db,"select id, no from chall9 where no=? ”));일것으로 예상된다. sql injection 시도해 본 결과 필터링 목록 : union, select, ‘, =, -,+,%, , char, PROCEDURE, or, and, ||, 공백을 확인했고 더 많은 필터링이 존재할 것이다. 처음에 컬럼값을 확인해야 하므로 union.. 2024. 3. 15.
Webhacking.kr Challenge old-45 문제 풀이 sql injection 문제이고 코드를 보면 id와 pw 둘 다 addslashes함수와 admin, select, limit, pw, =, 가 필터링되어 있으며 쿼리 출력값이 id=admin일 때 문제가 풀린다. 이 문제는 보자마자 멀티바이트 문제인걸 알 수 있다. $_GET['id'] = mb_convert_encoding($_GET['id'],'utf-8','euc-kr'); id만 euc-kr에서 utf-8로 인코딩하는 코드가 있는데 addslases는 이렇게 멀티바이트를 사용하는 언어로 인코딩 될 때 우회할 수 있다. 멀티바이트란? - 아스키 문자 코드에다가 다른 문자(2byte)들을 포함한 문자 집합이다. 어떤 문자는 1byte이고, 어떤 문자는 2byte이다. 예를 들어 우리가 싱글쿼터('.. 2024. 3. 14.
Webhacking.kr Challenge old-4 문제 풀이 이번 문제는 암호화된 문자열이 출력되고 password 제출칸이 존재한다. 코드를 보면 brute force 방지용 sleep함수가 있고 10000000~99999999의 랜덤 한 숫자와 "salt_for_you" 문자열이 hash라는 변수에 초기화되고 그 값은 $_SESSION['chall4']에도 초기화된다. 그리고 hash값을 sha1으로 500번 암호화를 하여 출력된 값이 문제에서 나타난 문자열이다. 문제는 우리가 입력한 password값과 $_SESSION['chall4'] 즉, 초기 hash값과 같으면 문제가 풀린다. 그러면 우리는 문제에 나타나는 문자열을 500번 복호화하여야 되는데 sha1은 단방향 암호화로 복호하가 불가능하다. 처음에는 파이썬 코드로 암호화된 hash를 계속 출력하여 문제.. 2024. 3. 7.
Webhacking.kr Challenge old-46 문제 풀이 이번 문제는 sql injection문제인데 49번 문제와 방식은 똑같고 필터링에 차이가 있다. 코드를 보면 addslashes함수와 공백, /, *, %, select, 0x, limit, cash가 필터링되어 있어 49번에서 사용했던 헥스값 0x를 이용한 방법은 사용하지 못한다. 우리는 문제를 풀어보면서 싱글쿼터(')의 필터링을 많이 다뤄봤는데 그중 하나가 char함수가 있다. https://jh-hack.tistory.com/16 2024. 3. 5.
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.
Dreamhack - level 2 - filestorage 이번 문제는 새로운 개념인 프로토타입 폴루션을 배우게된 문제였고 2단계라 하더라도 새로운 개념을 익혀야되니 어렵기도 했다. 2024. 2. 26.
Dreamhack - level 6 - Guest book v0.2 이번 문제는 선배님이 6단계 문제 한번 풀어보라고 추천해 주셔서 시도해 봤다. 처음엔 내가 6단계를 풀 수 있을까 막연하게 시도했는데 들어보지 못한 기법들을 찾아보며 하나하나 배워가는 게 아직 내가 모르는 게 너무 많다ㅋㅋㅋㅋ 처음 접해보는 방식의 문제였고 기본 기법들과 섞어서 공격을 해보니 신기했다. 2024. 2. 23.
Webhacking.kr Challenge old-56 문제 풀이 문제에 들어가 보면 검색기능과 게시판들이 보인다. 아마 sql injection으로 보인다. 먼저 admin으로 작성된 글을 읽으려 하면 접근이 거부된 걸 볼 수 있고 guest로 작성된 글은 hello~라는 글이 적힌 걸 볼 수 있다. 이제 검색 기능을 통해 admin에 적힌 글을 읽으면 해답을 찾을 수 있을 것 같다. 검색 기능을 이용해 보니 각각 hello와 guest를 적었을 때 차이점이 보이는 걸로 보아 검색기능은 글의 내용을 바탕으로 이루어지는 것 같다. 우선 다른 문제들과 다르게 소스코드가 없고 문제가 풀리는 조건이 없는 걸로 보아 flag를 제출하는 문제 같은데 flag제출 예시를 보면 FLAG {~~~} 형식으로 이루어지는 걸 알 수 있다. 이걸 토대로 FLAG를 검색해 보면 admin .. 2024. 2. 19.
728x90