목록전체 글 (17)
starting point
해당 실습은 개인 핫스팟을 이용한 제한된 환경에서 진행되었고, 해당 실습은 공부를 목적으로 진행했음을 알립니다. ARP 프로토콜이란 LAN 상에서 데이터의 목적지의 IP주소만 알고 MAC주소를 알고 있을 때 목적지의 MAC주소를 획득할 때 사용되는 통신규약이다. 이 과정에서 발생하는 취약점을 이용하는 것이 ARP스푸핑이다. 우선 ARP 프로토콜의 동작과정을 알아보겠다. A가 B의 MAC주소를 알아내는 과정이다. A가 보내는 ARP 패킷 opcode : request Source MAC : A의 MAC 주소 Source IP : A의 IP 주소 Target MAC : 00:00:00:00:00:00 Target IP : B의 IP 주소 A는 위와 같은 ARP request 패킷을 브로드캐스트로 전송한다. ..
초기화면은 입력창과 제출 버튼이 있고, 대놓고 SQL Injection임을 보여준다. 그럼 바로 소스코드를 살펴보겠다. [사진2]를 살펴보면 no라는 이름으로 text값이 GET방식으로 전달되는 것을 확인할 수 있다. [사진3]을 살펴보면 preg_match를 통해서 특정 문자를 필터링한다. #, select, (, 공백, limit, =, 0x를 대소문자 구분 없이 필터링한다. 문제를 해결하기 위해서는 쿼리문의 결과로 나온 id값이 'admin'이면 해결된다. 수월한 문제 해결을 위해서 admin의 no값이 2라는 것을 알려준다. 그럼 위의 쿼리문을 통해 원하는 결과를 얻어내기 위해 쿼리문을 조작해보겠다. [사진4]를 통해서 guest값이 있는 레코드의 no=1 임을 알 수 있다. 위에서 알아낸 정보를..
입력창과 제출 버튼이 있는 초기화면이다. 우선 개발자 도구를 통해서 html소스를 살펴보겠다. post방식으로 문자를 전송하고 입력할 수 있는 문자열의 최대길이는 15로 제한한 것을 확인할 수 있다. 다음으로 view-source를 통해서 소스코드를 살펴보겠다. 입력된 문자열은 str_replace()함수와 substr()함수를 통해서 필터링된다. str_replace()함수부터 살펴보겠다. str_replace()함수는 특정 문자를 다른 문자로 대체하는 함수이다. 위 코드에서는 \(역슬래시)는 "(없음)"으로 대체하고, '(싱글쿼터)는 ''(싱글쿼터 2개)로 대체한다. substr()함수를 살펴보겠다. substr()함수는 선택된 문자열을 원하는 부분만 자르는 함수이다. 위 코드에서는 post방식으로 ..
url에 #뒤에 적힌 경로를 통해 gadget.js를 로드하는 것을 추측할 수 있다. 경로를 조금 바꾸니 제대로 로드가 되지 않는 것처럼 보인다. 개발자 도구를 통해 변화를 관찰해 보겠다. url의 #뒤에 적힌 경로가 그대로 적혀 외부 리소스를 가져오는 것을 알 수 있다. [사진4]의 리소스 요청은 실패한 것을 [사진5]의 콘솔창을 통해서 확인할 수 있다. 그렇다면 이 문제는 외부의 리소스를 가져와서 문제를 해결해 볼 수 있을 것이다. 하지만 외부 리소스를 이용해서 문제를 해결하려면 서버를 생성해야 하기 때문에 외부리소스를 가져오지 않고 해결하는 방법이 있다. data URL scheme이다. data:[미디어타입][;인코딩방식],의 형태를 가진다. 이러한 방식을 통해서 외부 리소스를 가져오지 않고 직접..