목록Study (38)
인디안 보호구역
목적 : 지옥같은 gdb에서 벗어나기 위해 윈도우에서 Linux 프로그램을 디버깅한다. 환경 : Host(Windows 10), Guest(VM, Ubuntu 18), IDE(VisualStudio 2019) 리눅스 환경 세팅 1. VMware(or VirtualBox)를 통해 ubuntu를 설치한다. 2. ubuntu의 네트워크 환경을 브릿지로 바꾼다. (vmware나 virtualbox 네트워크 설정에 가면 있음) 3. ubuntu의 ip를 확인한다 (ifconfig) 4. ubuntu에 ssh를 설치한다 (sudo apt-get install ssh) 5. 재시작 IDE 환경 세팅 1. Visual studio -> 도구 -> 옵션 -> '플랫폼 간' -> '연결 관리자' -> 추가(ubuntu의 ..
인젝션을 통해 경고창을 띄우라는 문제이다. 인젝션 문제가 역시 그렇듯, 코드는 get 방식으로 데이터를 넘기는 것 외엔 크게 눈에 띄는 것이 없다. 혹시 모르니 를 바로 대입해봤다. no hack이라고 뜨는 것을 보아 필터링 되는 문장이 있다는 것을 알 수 있었고 우선 , / 등의 특수문자를 삽입해봤는데 전부 통과했고, 결국 script, alert 등의 문자열이 필터링 되고 있음을 알 수 있었다. 인코딩 쪽으로 눈을 돌려보았다. base64, URL 인코딩 둘 다 안되는 것을 확인했다. 아는것이 바닥나서 구글신께 '인젝션 키워드 우회'로 검색했더니, 알파벳에 %를 붙이거나 대소문자를 변경하면 된다고 나와있었다. a%l%e%r%t%281%29%3B 위와 같이 입력해보았는데도 안된다. (이유 : Mysql..
값을 입력한 뒤, check 버튼을 누르면 제출되는 형태이다. unlock이라는 변수는 이미 스크립트 상에서 선언되어있는데, 보아하니 값을 알아야할 것 같다. 패스워드를 알 수 있는 조건은 login.pw.value == unlock이다. 시간을 들이면 계산할 수 있겠지만 컴퓨터가 있는데 손으로 계산하는 바보가 되진 않으리! 콘솔 윈도우에서 해당 값을 출력하면 문제를 풀 수 있다.
문제 풀이 이번에는~ 100점짜리 문제. 스크립트 링크 외에 아무런 단서가 없기에 클릭하였다! GET method를 이용하여 변수 id에 admin 값을 집어넣어야 한다. 그러나 eregi() 함수가 “admin” 문자열을 필터링하고있기 때문에 값은 admin이지만 형태는 다른 문자열을 넣어야할 것이라고 생각했다. 의미는 같은데 형태가 다른 것.. 인코딩을 해야겠다고 생각했다. admin 입력 놉! 단호한 자식.. 2) ASCII hex로 표현 URL Encoding 0x610x640x6d0x690x6e \0x61\0x64\0x6d\0x69\0x6e \x61\x64\x6d\x69\x6e %61%64%6d%69%6e NULL은 브라우저에서 디코딩해주지 못했다. 4) Force Full + NUL Injec..
문제 풀이 base64 인코딩과 관련된 문제인가보다 하며 스크립트를 클릭! 이번에도 문제 페이지의 HTML 코드는 아무 영양가가 없었기에 바로 index.phps를 확인해보았다. 전체적인 순서는 아래와 같다. ‘인코딩 20번 -> 문자열 치환 -> 쿠키 생성 -> 문자열 치환 -> 디코딩 20번’ 그런데 처음 시작하는 if문을 살펴보면, user라는 쿠키가 없을 경우 ‘인코딩 20번 -> 문자열 치환 -> 쿠키 생성 /// 문자열 치환 -> 디코딩 20번’ 위와 같이 인코딩부터 쿠키생성까지의 과정이 생략되게 된다. 결국 페이지는 ‘문자열 치환 -> 디코딩 20번’의 과정만 실행되게 되는데 이를 통한 결과 값이 ‘admin’이 되어야 함을 알 수 있다. Base64에서 출력값 문자의 특징은 ‘a-z, A-..
문제 풀이 특정 문자열이 있는데 마지막 패딩(==)문자를 보고 base64의 출력값임을 알 수 있었다. 코드 확인 결과 딱히 단서가 있진 않아 생략한다. 별 다른 점이 발견되지 않아 바로 base64 디코딩을 시작하였다. base64란? 인코딩 기술로서 패딩 연산을 통해 ‘총 비트수%3’의 값에 따라 문자열 끝에 ‘=’문자를 남기는 것이 특징이다. 출력값으로 64개의 문자를 사용한다 (a-z, A-Z, 0-9, +, /) SHA1이란? 암호화 기술로서 해시 함수의 일종이다. 출력값은 160bit이며, 16진수 문자 40개로 이루어져있다.(0-f) c4033bff94b567a190e33faa551f411caef444f2 해당 문제의 문자열을 base 64로 디코딩했더니 위와 같은 문자열을 얻었다. 처음엔 ..
HTTPS(SNI) 차단 논란 종합 SNI 차단이란? HTTPS 통신을 하더라도 (암호화가 개시되기 이전의) 핸드셰이킹 과정에서는 에 호스트 이름, 즉 ‘목적지 URL’이 표시될 수 있음. ISP 업체는 이 정보를 이용해 사이트를 차단한다. 문제점 : ESNI(Encrypted SNI)를 이용하면 우회가 가능함. 논란이 되는 사항들 1. 감청일까? 감청 : 통신의 내용을 들여다 보는 것. ex. 편지를 뜯어서 내용을 보면 감청, 하지만 봉투 겉면에 쓰인 주소를 보는것은 감청이 아니다. SNI 차단은 내용을 보지 않으므로 감청이 아니다. 2. 사찰일까? 원론적으로는 맞다. 편지의 주소를 보는 것도 사찰이기 때문. 하지만 실질적인 사찰은 봉투에 쓰인 발신자 주소가 누구인지 개별적으로 식별하고 또 그것을 저장..
문제 풀이 문제를 클릭하니 알림창과 함께 문제 선택 페이지로 돌아가게 된다. 소스코드를 보고 싶은데 알림창이 뜬 화면에서는 띄울 수가 없었다. 버프스위트를 이용하여 소스를 확인하면 된다고 생각했다. 엥 소스 안에 플래그가 떡하니 있었다. 너무 쉽게 문제를 푼 것이 아닌가 하는 생각이 들었다. 문제라는 것이 그렇듯 출제자의 의도도 중요하니까, 띵킹 해보기로했다. 우선, url을 보니 js를 사용중이고, 알림창과 이전 페이지로 이동하는 기능 역시 전부 js일 것이니, js 기능을 끄면 되겠다는 생각이 들었다. Chrome에서는 좌측 상단의 버튼을 누르고 사이트 설정을 들어가 아래와 같이 설정할 수 있다. 허용을 차단으로 바꾼다. 2. 배운 점 비밀번호는 html 스크립트에 평문으로 적으면 안된다. 3. 참고..
문제 풀이 내 IP주소와 접속 정보가 보이고, 그 밑에는 Wrong IP라고 나오는 것으로 보아 IP를 조작해야 한다고 생각이 들었다. 아래 주석처리된 source 페이지 외에는 별다른 특이점을 발견할 수 없었기에 문제 url에 index.phps 라고 덧붙여 해당 소스 페이지에 들어갔다. (http://webhacking.kr/challenge/bonus/bonus-4/index.phps) [사전 설명] extract() 함수란? 배열을 인자로 가지며, 배열 안의 인덱스를 변수화 시킨다.(?) 예를 들어, Info[ip] = 123, Info[mac]=456 일 때, extract(Info)를 호출하면 ip=123, mac=456 이라는 두개의 변수가 생성된다. *변수 명이 충돌하면, 기존 변수를 덮어..
문제 풀이 랭킹 시스템이다. 아무것도 몰라서 1번 아이디를 클릭해봤는데 HIT가 하나 올라갔다..!! 신기해서 또 눌러보니까 ‘no!’라는 알림창만 뜰 뿐 더 이상 HIT가 올라가지 않는다. 다른 아이디를 눌러도 마찬가지였다. 처음과는 다르게 카운트가 올라가지 않는다. 맨 밑의 Join 버튼을 눌러보니 알림창으로 ‘내 아이디’가 화면에 노출되었다. 무슨 문젠지 아직 감이 안잡히므로 스크립트를 확인하기로했다. 잘 안보여서 확대해봤다. (1번 아이디의 속성) 1번부터 쭉 나열된 모든 ID들은 각각 위와 동일한 속성을 가지고 있었다. 그 중 눈에 띄는 것은 클릭 시, ‘?hit=USERID’ 의 url로 이동된다는 것. 카운트를 올리기 위해선 해당 url로 진입해야한다. 계속 거부당하고 있지만. (Join 버..