모의해킹 (163) 썸네일형 리스트형 리눅스 커널 해킹 (배경 지식) • 리눅스 커널 개론 - 컴퓨터의 가장 기본적인 자원들을 관리하고 통제하기 위한, 운영체제의 핵심이 되는 소프트웨어 - 커널 내부는 태스크 관리자, 메모리 관리자, 파일 시스템, 네트워크 관리자, 디바이스 드라이버 관리자 등으로 구분됨 - 가상 메모리 구조상 스택의 윗 영역에 존재 - 가상 메모리의 3~4GB 구간에 존재하는 커널 영역은 모든 태스크들의 공통 영역으로 사용됨 - 가상 메모리 주소와 물리 메모리 주소를 변환하기 위해 커널 내부에는 페이징 기법이 구현되어 있음 1. 유저 모드 / 커널 모드란? - 하나의 프로세스가 실수로 다른 프로세스에 입출력 작업을 하는 등의 보안적 이슈르 방지하기 위해, 유저가 컴퓨터의 자원에 함부로 접근할 수 없도록 모드를 나누어 둔 것 - 유저 모드 : 접근할 수 있.. XS-Search [WEB LEVEL1] XS-Search 공격은 다른 오리진의 비밀 정보를 SOP를 우회하여 쿼리 형태로 한 글자씩 유출하는 형태의 공격이다. 로컬호스트에서만 접근할 수 있는 플래그에 접근하여 한글자씩 유출하는 것이다. 이건 소스코드를 확인을 안하면 못 풀꺼같은 문제이다... if 문을 보면 private가 True이고 remote_addr이 127.0.0.1이 아니고 headers 부분 중 HOST의 값이 127.0.0.1:8000이 아니면 continue로 가는 거 같다. if 문을 빠져나가기 위해서는 HOST 부분에 127.0.0.1:8000을 주면 빠져나오는 거 같다. 버프를 사용해 HOST 값을 127.0.0.1:8000로 수정을 해주고 요청을 보내니까 응답값에 flag 값이 출력이 된다. simple-web-request [WEB LEVEL1] STEP 1부터 한 단계씩 풀어가는 문제이다. param1의 값이 getget 그리고 param2의 값이 rerequest 값이 되면 step2로 넘어가는 소스코드이다. param에 getget , param2에는 rerequest을 입력하면 STEP2로 넘어가진다. /step2 페이지의 소스코드에는 flag에 대한 얻을 정보는 존재하지않는다. /flag 페이지를 보면 prm1 값이 pooost 이고 prm2는 requeeest이다. 소스코드에서 본 값을 param에는 pooost 값을 넣고 param2에는 requeeest값을 넣는다. ex-reg-ex [WEB LEVEL1] input_val 값이랑 'dr\w {5,7} w\d+am@[a-z]{3,7}\.\w+'로 되어 있는 정규화 표현식 와 비교하여 일치하며 flag 값을 출력해 주는 소스코드이다. 정규화식을 해석하면 dr+영숫자 5~7개+e+숫자1개+am+@+소문자 3~7개+.+영숫자 1개이다. 정규화식에 맞는 이메일 값을 넣으면 flag 값이 출력이 된다. post방식으로 작성한 페이로드 import requests url = 'http://host3.dreamhack.games:18603/' data = {'input_val':'dr12345e1am@acd.4'} req = requests.post(url,data=data) print(req.text) out of money [WEB LEVLE1] admin을 입력하니 admin이름으로 코인을 거래하는 페이지로 이동이 된다. flag을 구매하기 위해서는 드핵코인이 필요하다. 소스코드를 보면 드핵코인(DHH)가 1000 이상 있으면 flag을 구매할 수 있다. 문제 풀이 : 무담보 대출로 1000을 받는다. -> 드핵코인 1000을 담보로 넘기고 드멍코인을 2000까지 받는다. -> 그다음 드멍코인을 드핵코인으로 바꾸고 드핵코인 대출 1000을 갚는다. -> 드핵코인 1000이 남아 flag을 구매할 수 있다. type confusion [WEB LEVEL1] type confusion 취약점은 객체의 인스턴스가 타입을 혼동하여 생기는 취약점이다. 문제의 소스코드를 확인해 보자. json_decode($POST ['json'] 은 POST 방식으로 json 데이터를 받아서 저장한다. php소스에서 == 가 같은 비교문은 느슨한 비교를 한다. 개발자 모드를 통해 js 파일을 확인했을 때, submit 함수에서 JSON.stringify() 함수로 자바스크립트의 값을 JSON문자열로 변환시켜 준다. JSON.stringfy({key: key}) 값을 JSON 문자열로 반환을 해주고, PHP에서 해당 값을 json_decode를 해준다. PHP 소스에서 if(json -> key == key)에서 key값을 true을 만들면 flag 값을 얻을 수 있다. 즉, js.. 시스템 해킹 기본 지식 • 프로세스의 메모리 구조 프로세스의 메모리를 5가지의 세그먼트로 구분하고, 운영체제가 메모리를 용도별로 나누며 각 용도에 맞게 적절한 권한을 부여한다(읽기, 쓰기, 실행) -> CPU가 메모리에 대해 권한이 부여된 행위만 할 수 있다. 1. 코드 세그먼트 - 실행 가능한 기계 코드가 위치하는 영역으로 텍스트 세그먼트라고 불린다. - 프로그램이 동작하려면 코드를 실행(읽기, 실행 권한) => 쓰기 권한은 공격자가 악의적인 코드를 삽입하기가 쉬워져 제거한다 - main() 등의 함수 코드 2. 데이터 세그먼트 - 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치한다. - CPU가 데이터 세그먼트를 읽을 수 있어야 하므로, 읽기 권한이 부여된다. - data 세그먼트 : 전역 변수와 같이 프로그램.. NoSQL-CouchDB [WEB LEVEL1] CouchDB : 문서기반의 데이터베이스이다. 키와 값이 하나의 쌍을 이루는 데이터를 저장하며, JSON 객체 형탱인 도쿠먼트를 저장한다. HTTP 기반의 서버로 동작하며 REST API형식으로 HTTP메소드를 사용해 요청을 받고 처리한다. 로그인페이지에서 uid와 upw 를 입력을 해서 flag값을 없는거 같다. 소스코드를 보면 /auth에서 인증과정을 거칠때, upw값이 같으면 flag값을 출력해주는 코드이다. 즉, 계정정보를 알아야지 풀리는 문제이다. uid에 "admin" 을 넣고 upw에 "aaa" 넣었을 때의 페이로드이다. import requests url = 'http://host3.dreamhack.games:11764/auth' data = { "uid":"_all_docs" } req.. 이전 1 ··· 10 11 12 13 14 15 16 ··· 21 다음