1. CSRF? CSRF란 CSRF는 XSS를 통하여 발생하는 취약점으로 피해자의 권한으로 임의 주소에 요청을 보낼 수 있는 취약점입니다. 공격자는 XSS 취약점이 발생하는 페이지를 탐색하고, 해당 XSS페이지를 CSRF 페이로드로 디벨롭하여 피해자가 해당 페이지를 방문했을 때 원하지 않는 행동을 수행하도록 합니다. 명확히 해야 하는 부분 항상 해당 취약점을 판별할 때 판단이 어려운 부분이 있습니다. 그저 location.href 함수 등으로 해킹 사이트에 보내거나 다른 웹사이트로 보내는 것이 CSRF라고 봐야 하는가? 에 대한 판단입니다. 결론부터 말하자면 CSRF라고 보기 어렵습니다. 만약 해당 내용을 CSRF로 인정한다면 XSS가 터지는 거의 모든 부분에 CSRF가 동작할 확률이 높기 때문입니다. ..
Flutter을 개발하려고 세팅을 하다 보면 여러 가지 확장 프로그램을 설치하였음에도 불구하고 어 왜 이 기능 나만 안 되는 거지? 하는 게 있습니다. 그것들과, 초기에 세팅해야 하는 것들을 정리해야 하는 것들을 정리해 보겠습니다. 1. 확장팩 설치 VsCode를 들어가게 되면 사이드바에 네모네모 테트리스가 있는데 해당 칸을 누릅니다. 검색창에 두개를 검색합니다. 1-1) Dart 1-2) Flutter 이 두개를 검색하고 install 버튼을 눌러주면 됩니다. 2. settings.json 파일 수정 환경설정 파일이라고 생각하면 됩니다. 2-1) vscode 아무 데나 클릭하고 ctrl + e를 누르면 상단에 검색창이 하나 뜹니다. 2-2) settings.json을 검색하고 엔터를 칩니다. 2-3) ..
최근에 모바일 해킹 공부를 하면서 시장 점유율을 슥 훑어봤는데, Flutter을 처음 알았을 때보다 점유율이 상당히 높아져 있는 것을 보았습니다. 학생일 때 최대한 트렌드를 많이 따라잡자는 마인드기 때문에 차근차근 정리해 보려고 합니다. Flutter? 구글에서 개발하고 관리하는 오픈소스 모바일 앱 개발 프레임워크이고, Android와 iOS등 플랫폼의 제약을 받지 않고 동작하는 앱을 개발하기 위해 사용한다. Why Flutter? 궁금해서 조금 찾아봤는데 Android와 iOS를 모두 지원하는 것 이외에도 컴포넌트라던가 라이브러리들이 다양하고, 예쁘기 때문에 대세가 된 것 같다. 실제로 개발을 잘 할줄 몰라도 라이브러리들로 그럴듯한 앱을 만들 수 있는 장점도 있는 것 같다. (일각에서는 결국 시장에 출..
[이론] SQL Injection 태그: Basic SQL이란 Sql는 Structured Query Language의 약자로서 데이터를 관리하기 위해 설계한 특수 목적의 프로그래밍 언어입니다. Database, Table등을 생성, 수정, 삭제 할 때 사용됩니다. 1. SQL INJECTION(SQLI)에 대한 이해 SQL Injection은 웹사이트에서 SQL를 사용하는 section에서 특정 SQL query를 전송하여 공격자가 원하는 데이터베이스의 중요한 정보를 가져오는 해킹 기법입니다. 공격자가 할 수 있는 행위는 다음과 같습니다. Select (질의) 로그인 예시 코드 SELECT id FROM user_table where uid='{사용자 입력 1}' and upw='{사용자 입력 2}';..
해당 글은 답지를 보고 싶진 않지만 문제를 너무 풀고 싶은 사람들을 위한 글입니다. 필요한 기반 지식, 팁, 방향성 등을 담았습니다. 1. 문제 분석 1. 랜덤한 유저 디렉터리 생성 @app.before_request def init_session(): if session: return session['id'] = os.urandom(32).hex() os.mkdir('static/users/' + session['id']) os.urandom을 사용해서 {static/users/랜덤값} 으로 디렉터리를 생성한다. 2. QR code로 생성할 url 주소를 받음 @app.route('/qr_generator', methods=['GET', 'POST']) def qr_generator(): if requ..
워게임 글은 못풀어서 답답하지만 그렇다고 완전한 풀이를 원하지 않는 사람들을 위해 적습니다. 1. 문제 처음 들어가면 로그인과 pw를 입력하라고 나옵니다. 제공되는 소스코드에서 아이디는 guest, 비밀번호는 guestPW인 것을 알 수 있습니다. 로그인에 성공하게 되면 jwt 토큰을 auth라는 이름의 쿠키에 담아 보내줍니다. 서버는 jwt 토큰을 파싱해서 id값을 가져오고 만약 해당 id가 admin이면 flag를 보여줍니다. 2. JWT에 대한 이해 JWT JWT는 JSON WEB TOKEN으로 세션-쿠키와 비슷하게 서버에서 사용자에 대한 인가를 수행할때 사용하는 인증 토큰이라고 보시면 됩니다. 이걸 왜쓰냐? 하면 세션의 경우 서버의 메모리상에 유저 데이터를 지속적으로 관리하여야 하지만 JWT는 서..
개요 Cookie & Session 에 대한 이야기에 이어 세션에서 발생할 수 있는 취약점을 설명한다. 세션에서 발생할 수 있는 취약점은 세션 생성, 유지, 파기 과정 중 발생하며 사용자 뿐만이 아니라 관리자 세션 등이 존재할 경우 더 큰 파급력으로 이어질 수 있다. 1. 세션 토큰 생성 취약점 웹 어플리케이션에서 토큰을 만들어내는 과정에서 취약점이 발생할 수 있다. 이는 토큰 생성 패턴이나 보편적으로 사용하는 토큰(쿠키) 생성 방식에서 취약점이 발생할 경우 공격자가 세션 토큰 예측 등을 통해서 공격할 수 있다. 안전하지 않은 토큰 생성 보편적으로 웹 프레임워크에서 생성하는 토큰을 제외하고 특정 이벤트 추적이나 상태 기록을 위해서 쿠키를 사용해야 할 때가 있다. 다음은 취약할 수 있는 임의의 토큰 이다...
Header? HTTP는 수많은 헤더를 제공합니다. HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해줍니다. 헤더는 응답이나 요청 중 하나의 메시지 형식만 처리하지만, 두 가지 모두에서 사용할 수 있는 헤더도 있습니다. 예를 들어 우리가 www.naver.com 에 접속한다고 가정하면, 이러한 패킷을 보내게 됩니다. GET / HTTP/1.1 Host: www.naver.com Cookie: NNB=IKK4ONRSW77GI; nx_ssl=2; PM_CK_loc=24f2f89187a7786b0de5a94fd6138cf1a271dd91f46519757ccdf00c1568a677 Sec-Ch-Ua: Sec-Ch-Ua-Mobile: ?0 Sec-Ch-Ua-Platfor..
쿠키? 쿠키는 웹 어플리케이션이 사용자를 구분할 때 사용되는 HTTP 프로토콜의 중요한 요소이다. 쿠키는 서버가 클라이언트에게 데이터를 보내거나, 클라이언트가 서버에게 데이터를 요청할 때 사용한다. 쿠키를 사용하는 매커니즘은 다음과 같다. 쿠키 생성 및 사용 서버는 사용자에게 전달할 식별정보를 담아 Cookie를 생성한다. 서버는 Set-Cookie 헤더를 통해 클라이언트에게 전송한다. 쿠키를 받은 사용자는 서버로 보내는 요청에 쿠키 헤더를 더한다. 쿠키의 속성 쿠키 속성 명 설명 쿠키 속성 명 설명 Expires 쿠키의 유효 기간을 나타낸다. Expires는 브라우저에게 유효 기간까지만 쿠키를 사용할 수 있게 한다. Expires 속성이 없다면 현재 세션에서만 이용 가능하다 domain 쿠키를 사용할 ..
1. 쉘코드가 무엇인가 1.1 말 그대로의 의미 쉘코드는 영어로 (ShellCode) 즉 쉘을 얻기 위한 어셈블리 코드 조각을 말합니다. 쉘은 시스템에서 커널과 사용자 간의 다리역할을 하는 것으로 생각하면 됩니다. 그래서 실행중인 프로그램에서 프로그램 실행 도중 쉘을 실행시킬 수 있다면 원하는 임의의 코드를 작동시킬 수 있습니다. 1.2 주요 쉘 코드 orw ( open - read - write ) 쉘 코드 시스템에서 어떤 파일을 읽을 때 기본적으로 파일을 열고 읽거나 쓰는 동작을 수행합니다. 해당 동작 과정에서 레지스터의 값을 가지고 어떤 파일을, 어떤 방식으로, 얼마만큼 읽을지 설정하고 원하는 동작을 수행할 수 있습니다. execve 쉘 코드 execve()는 filename이 가르키는 파일을 실행..
1. 배경 1.1 pwntools? pwntools는 말 그대로 pwnable 즉 시스템 해킹을 좀더 쉽게 할 수 있도록 하는 도구를 모아놓은 파이선 라이브러리라고 생각하시면 됩니다. 등장 배경 기존에는 페이로드를 작성하려면 gdb를 이용하여 진입점에서 디버깅을 세세하게 하거나, 만약 원격으로 시스템 해킹을 해야 하는 상황이면 소켓 프로그래밍을 통해 TCP 통신을 진행, Payload를 직접 작성하여 말 그대로 날것의 바이너리를 보내야 했습니다. 하지만 pwntools 등장 이후 이런 요소들이 매우 간편해 졌습니다. 1.2 pwntools 설치 및 사용 pwntools 설치 apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev..
1. 실습에 사용할 간단한 코드 준비 1.1 간단한 코드 작성 cat > basic.c #include int main() { int sum = 0; int val1 = 1; int val2 = 2; sum = val1 + val2; printf("1 + 2 = %d\n", sum); } 1.2 컴파일 gcc -o basic basic.c -no-pie 2. gdb 사용법 기본적으로 해당 글에서는 pwngdb가 설치 되어 있다는 가정 하에 진행하도록 하겠습니다. 만약에 pwngdb가 설치되어 있지 않으신 분들은 제 글에서 시스템 105를 검색하셔서 elf, pe, pwngdb 설치 방법 등을 숙지 하시고 오시길 바랍니다. 또한 리눅스에서 gdb를 사용하는 법에 대한 글이라 elf 파일을 다룰 것 입니다...