본문 바로가기

웹해킹/bee-box

(24)
Broken Auth - Insecure Login Form Broken Auth(취약한 인증) 인증 및 세션 관리와 관련된 어플리케이션 기능이 잘못 구현되어 공격자에게 취약한 암호, 키 또는 세션 토큰을 제공하여, 다른 사용자의 권한을 얻도록 착취하는 행위 Broken Auth는 2017년 OWASP TOP10에서 2번째를 차지할 만큼 위험한 공격이다. 취약한 인증 공격은 다양한 방식이 있는데 브루트 포스 공격, 딕셔너리 공격으로도 공격이 가능한만큼 누구든지 가능한 공격이다. 또한 위의 공격 외에도 비밀번호 찾기 기능을 통해 사용자의 계정정보를 알아낼 수 도 있다. 안전한지 않은 로그인 방식 - (하) Broken Auth - Insecufe Login Form 페이지를 클릭하면 다음과 같이 나오게 된다. F12(개발자 도구)를 누르게 되면 다음과 같이 나오는데..
XML/XPATH Injection(Search) Search 페이지에 들어가면 다음과 같은 화면이 나온다. search 버튼을 누르면 다음과 같이 genre와 action 변수가 get 방식으로 URL에 변수가 노출이 되어 나온다. 이제 여기에 injection 공격이 먹히는지 확인하기 위해 '를 입력한다. 다음과 같이 경고가 나온다. 또한 search를 누르게 되면 페이지는 contains 함수를 호출한다. fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean? contains 함수는 검색할 단어가 들어 있는지 검색해주는 함수인데 두 개의 변수를 받는다. 첫번째 변수 안에는 테스트할 변수, 두 번째 명령어는 검색할 명령어가 들어가게 되고 만약 검색할 변수가 테스트할 변수 안에 있으..
XML/Xpath Injection XML - W3C에서 개발한 특수한 마크업 언어를 만드는데 사용하도록 권장되는 다목적 마크업 언어 ※ 마크업 언어 - 태그등을 이용하여 문서나 데이터의 구조를 기록할 수 있는 언어 - 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템 끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어진 언어 - XML을 사용하면 메타에디어를 기술할 수 있다. XML 사용하지 않는 경우 web hacking site - 데이터 표기시 HTML에서 어느부분이 데이터명이고 어디까지 데이터 값인지 알수 없음 XML을 사용한 경우 web hacking site - 데이터명과 데이터 값처럼 데이터에 의미를 부여할 수 있다. - 이와같이 데이터에 의미를 부여하는 것을 메타데이터라고 한다. - ..
XML / XPATH 인젝션 - Login Form XML : 인터넷 웹 페이지를 만드는 HTML을 획기적으로 개선하여 만든 언어, 홈페이지 구축기능, 검색기능 등이 향상되었고, 웹 페이지의 추가와 작성이 편리해짐 XML은 데이터를 트리구조의 노드로 표현하며 사용자 정의로 데이터를 분류한다. ex) 1 matrix 다음 코드에서 최상위 노드는 'movies'이고 하위노드는 'action'이다. 'action'의 하위노드에는 'id', 'name'이 있다. 이처럼 XML 사용자는 다양한 데이터를 편의에 맞게 분류할 수 있다. Xpath : 확장 생성 언어 문서의 구조르르 통해 경로 위에 지정한 구문을 사용하여 항목을 배치하고 처리하는 방법을 기술하는 언어 Xpath는 일종의 쿼리로, XML DB 내용을 선택하고 조작하기 위하여 사용한다. XML은 트리구조로..
SQL Injection - Blind - Time Based SQL Injection - Blind - Time Based 페이지에 들어가게되면 다음과 같은 페이지가 나오게 된다. 이번 페이지는 결과값을 이메일로 보내준다고 되어있는데 이메일 주소를 적는 칸이 없다. 그러므로 이번 문제는 참, 거짓의 결과를 알 수가 없다. 그래서 우리는 sleep()함수를 이용하여 참, 거짓을 알아보도록 하겠다. 처음에는 이게 무슨 소리인가 했는데 값 뒤에 sleep()함수를 넣어 만약 참이면 sleep 함수가 실행되고 거짓을 경우 sleep 함수가 실행되지 않도록 하는 방식으로 참, 거짓을 구분하는 것이다. ※ sleep(시간) : 시간만큼 시간을 지연시키는 함수 먼저 항상 참인 값부터 넣어보자 ' or 1=1 and sleep(2)# 결과를 넣으면 다음과 같이 sleep함수가 ..
Blind SQL Injection - Boolean Based Blind SQL Injection SQL Injection의 결과가 참 과 거짓으로만 나오는 페이지에서 참, 거짓만으로 DB의 정보를 가지고오는 SQL Injection 공격 ˙ Blind SQL Injection 쿼리에 사용하는 함수 1. substr : 첫번째 인자로 받은 문자열을 지정한 길이만큼 출력하는데 사용하는 함수 2. ascii : 문자를 아스키코드로 변환하는데 사용하는 함수, 작은따옴표 같은 특수문자 우회할 때 사용한다. 3. limit : 문자열의 길이를 반환할 때 사용 Boolean Based Injection ˙ 참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 DB 내용을 노출하는 취약점 실습하기 1. SQL Injection - Blind - Boolean Based 찾..
SQL-Injection(Blog) 이번에는 블로그 방식의 SQL Injection을 해보도록 하겠다. 일단 SQL-Injection(Blog)를 클릭하면 다음과 같이 나온다. 이제 여기서 SQL Injection 공격이 먹히는지 확인하기 위해 '를 입력해보자 입력하면 다음과 같이 나오는데 우리는 여기서 사용하는 DB는 MYSQL이라는 점을 알 수 있다. 또한 bee')라는 것이 왜 나왔는지 의심해봐야한다. 이제 여기다 '입력후 아무 말이나 입력해보자 현재 듣고 있는 노래가 마크툽 노래여서 '마크툽이라고 입력했는데 다음과 같이 나왔다. 여기서 우리는 밑줄 친 부분을 분석해보면 '마크툽', 'bee')' 인것인데 지금 짝이 맞지 않아서 에러가 생긴것으로 추측해 볼 수 있다. 그렇다면 DB에 전송될 때는('입력내용','계정명')으로 전달한다고..
SQL-Injection - Login Form/Hero Login Form / Hero 페이지(sqli_3.php)에 들어가면 다음과 같이 나온다. 해석하면 '너의 슈퍼히어로를 입력해라' 이런 뜻이다. 처음에 나는 부모님 이름을 적었는데 안되었다. 그래서 슈퍼맨, 배트맨 등 히어로 이름을 다 적었지만 그것도 안되었다. 그래서 고민을 하다가 이 페이지가 SQL Injection 페이지인 만큼 SQL injection 공격을 수행해야 하는 것 같았다. 순서 1. 사용 중인 DB 서버 알아내기 - '(작은 따옴표) '를 입력하니 다음과 같은 에러 메시지가 나왔다. 다음 메시지를 통해 우리는 사용중인 DB가 MYSQL이라는 것을 알아 낼 수 있었다. 2. DB안에 있는 전체 내용 알아내기 - ' or 1=1# 로그인 창에(패스워드 창도 가능)에 ' or 1=1#을 ..