728x90 It28 [개념정리] Mysql 해킹공부를 하면서 프론트엔드, 백엔드에 대한 전반적인 개념이 부족하다는 걸 느꼈고 개념부터 잡아야 될 필요성을 느껴 개발 쪽 공부를 병행하기로 했다. 이 공부는 https://opentutorials.org/course/3161/19531 생활 코딩을 참고하여 학습했다. 데이터베이스의 목적 - 생활코딩 수업소개 데이터베이스와 스프래드쉬트의 유사점을 살펴봅니다. 이를 통해서 데이터베이스가 그렇게 낯선 것이 아니라는 것을 느끼셨으면 좋겠습니다. 또 웹애플리케이션에서 데이터베이스를 opentutorials.org 우선 Mysql을 배워보기 전에 데이터베이스에 대해 간략하게 알아보도록 하자. 데이터베이스 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임이다. 우리가 일상생활을 하면서 접하는 .. 2023. 5. 2. Lord of SQL Injection 27단계 (blue dragon) 이번에 처치할 몬스터는 blue dragon! 코드를 보면 이번 문제는 싱글쿼터(')와 백슬래시(\)가 필터링되어 있다. 처음에는 백슬리시 우회법이 있나 찾아보다가 지난 문제중에 sleep과 benchmark를 필터링해 놨던 문제들이 생각났다. blind sql injection은 error base와 time base로 나눠지는데 지금까지 우리가 자주 사용했던 게 error base다. 그러므로 문득 time base인가 해서 찾아봤더니 의외로 간단했다. 쿼리문은 if문을 통해 조건을 걸어준뒤 참일 때는 sleep을 이용해 시간차를 주고 수행시간이 시간차만큼 나는 순간을 잡아내면 된다. import time import requests url="https://los.rubiya.kr/chall/blue.. 2023. 4. 24. Lord of SQL Injection 26단계 (red dragon) 이번에 처치할 몬스터는 red dragon! 코드를 봐 보면 이번에는 id 파라미터에 들어가는 길이가 7 이하인 게 가장 까다로웠다. 그리고 새로운 필터링이 추가 되었는데 is_numeric으로 no값이 숫자인지 확인하고 아닐 시 1을 반환해 준다. 고로 no값으로는 숫자만 넣을 수 있다. no값을 그냥 brute force로 구해볼까 했는데 한참을 해도 안 나오길래 포기했다. 그래서 일단 id 파라미터에 들어갈 쿼리문을 구하기로 했다. 여기서 시간이 오래 걸렸던 게 뭘 시도할라 해도 id에 길이 제한이 걸려있어 계속 실패했다. 우선 id부분을 닫아줄 싱글쿼터(')와 or 그리고 뒤에 # 이 3가지는 필수로 들어갈 요소들이다. 여기서 or로 쓰면 양쪽에 공백을 넣어줘야 하므로 ||로 작성하여 길이를 줄여.. 2023. 4. 22. Lord of SQL Injection 25단계 (green dragon) 이번에 처치할 몬스터는 green dragon! 코드를 보면 이번엔 되게 특이한 문제다. 첫 번째 쿼리에서 id와 pw를 받고 id가 있으면 두 번째 쿼리가 작동되는 형식이다. 일단 싱글쿼터('), 더블쿼터(")가 필터링 되어 있고 첫 번째 쿼리를 보면 예전에 싱글쿼터 필터링을 우회했던 문제가 생각날 것이다. https://jh-hack.tistory.com/33?category=1091406 Lord of SQL Injection 16단계 (succubus) 이번에 처치할 몬스터는 succubus! 이번 코드를 보면 id와 pw인자를 받고 싱글쿼터(')는 둘 다 필터링되어 있다. 이걸 보고 딱 떠올린게 지난 문제에서 싱글쿼터(')가 필터링되어 있던 문제가 있어 우 jh-hack.tistory.com 그.. 2023. 4. 14. Lord of SQL Injection 24단계 (evil wizard) 이번에 처치할 몬스터는 evil wizard! 코드를 보면 이전 문제랑 코드상으로 별 다를 게 없어 보인다. 주석으로도 "마 진짜 같나? 진심이가?"라고 쓰여있는 거 보면 뭔가 다르긴 다른가보다. 그래서 테이블을 출력해 봤는데 이전문제와 다르게 id와 score 어떤 걸 기준으로 정렬해도 같은 결과가 나온다. 이번 문제는 꽤 쉬웠는데 그냥 id나 score 중 하나 기준을 정하고 오름차순 내림차순으로 차이를 주면 된다. 다들 ASC와 DESC를 들어봤을 거다 ASC가 오름차순 DESC가 내림차순이다. ?order=if(조건문,'id ASC', 'id DESC')를 써서 참일 때는 id를 기준으로 오름차순 거짓일때는 내림차순으로 테이블을 출력하면 된다. 그럼 참일때는 위에 사진처럼 출력될 테니 admin*.. 2023. 4. 12. Lord of SQL Injection 23단계 (hell_fire) 이번에 처치할 몬스터는 hell_fire! 코드를 봐보면 위에 처음 보이는 테이블이 나와있고 union은 막혀있다. 이 문제는 admin의 email값을 알아내는 문제 같다. 또한, order를 인자로 받고 있는데 여기서 order by란 데이터들을 출력할 때 어떻게 정렬할지 정하는 문법이다. 예를 들어 order by id를 하면 id를 기준으로 내림차순으로 정렬된다. order by score를 하면 score를 기준으로 내림차순으로 정렬된다. 이처럼 서로 다른 결과를 보여주는 테이블이 있으니 이를 이용하여 blind sql injection을 하면 될 것 같다. if문을 이용하여 if(조건문, 'id', 'score') 형식으로 참일 때는 id를 기준으로 거짓일 때는 score를 기준으로 정렬되게 .. 2023. 4. 11. Lord of SQL Injection 22단계 (dark_eyes) 이번에 처치할 몬스터는 dark_eyes! 코드를 봐보면 이전 문제에서 사용했던 if문과 case, when 등 조건문들이 추가로 필터링되어 있다. if문이 필터링 되어 있으므로 저번 문제처럼 조건을 걸어 union문을 실행시키는 것은 불가능하게 되었다. 또한 에러메세시도 사라져 아무 메세지도 출력되지 않게 되어있다. 조건문 필터링우회법이 있을지 검색해봤는데 이 문제에서는 우리가 사용했던 union의 성질을 이용하면 된다. union은 select문 두 개의 합쳐진 결과를 출력하는데 위 사진이 정상적으로 실행되는 이유는 select 1 union select 1 은 둘 다 1을 출력하기 때문에 결과값 출력수가 1로 하나이기 때문이다. 이를 이용하여 select 1 union select length(pw.. 2023. 4. 10. Lord of SQL Injection 21단계 (iron golem) 이번에 처치할 몬스터는 iron golem! 코드를 보면 필터링에 sleep, benchmark가 추가되었다. 처음에는 이걸 왜 필터링하였는지 몰라 검색해 봤더니 time base sql injection에 사용된다고 한다. (select * from table sleep(2) 이 쿼리문이 성공하면 2초 기다렸다가 결과가 반환된다. 실패하면 바로 반환되는 점을 이용한 blind sql injection이다.) 그다음 주의 깊게 볼 코드는 if(mysql_erroe($db) exit(mysql_error($db)); 이 부분이다. sql문에 에러가 생길 시 에러메시지를 출력하는 것인데 우리가 지난 문제들을 풀 때는 hello admin! 같이 참일 때 알림이 출력되었지만 이번 문제에서는 아무런 메시지도 출.. 2023. 4. 5. Lord of SQL Injection 20단계 (dragon) 이번에 처치할 몬스터는 dragon! 코드를 보면 딱히 신경 쓸 필터링은 없고 id가 admin이면 문제가 풀리는 것 같다고 했는데 위에 쿼리문을 보니 id 파라미터 다음에 #으로 주석처리가 되어 있었다. 일단 없던 주석이 생겼으니까 주석을 어떻게 하냐가 관건인데 기억나실지 모르겠지만 18단계에서 주석에 대해 다뤄볼 때 --, # 이 두 가지는 한 줄만 주석으로 처리한다는 특징이 있었다. 그러므로 pw부분을 개행문자 \n을 이용하여 줄 바꿈을 해주면 주석으로 처리가 안되지 않을까? 바로 실행해 봤다. ?pw=%0a and 1=0 or id='admin'%23(\n url인코딩=%0a)으로 앞에 ud='guest' 부분을 거짓으로 만들고 admin을 참으로 넣었다. 굿굿 내가 생각한 대로 바로 문제가 풀린.. 2023. 3. 31. Lord of SQL Injection 19단계 (xavis) 이번에 처치할 몬스터는 xavis! 이번 코드를 보면 처음에 보고 의심할 정도로 신경 쓸 만한 필터링이 없었다. 쿼리도 잘 들어가고 문제 유형을 보면 지금까지 풀었던 blind sql injection이랑 다를 게 없어 보여서 평소와 같이 pw의 길이를 알아보려고 당연하게 8을 입력해 봤는데 평소대로 하나하나 입력해서 길이를 찾을까 하다가 슬슬 손가락도 귀찮아져서 파이썬 코드를 써서 알아보기로 했다. 되게 길어질 줄 알았는데 12밖에 안되네..? 어차피 파이썬 코드 쓴 거 비밀번호도 빠르게 추가해서 알아보려 했는데 어라...? pw값들이 나오질 않고 있다. 파이썬 코드로 돌리는 건데 이렇게 느릴 리가 없는데... 처음엔 코드 문젠줄 알고 계속 보다가 도저히 답이 안 나와서 구글에 검색해 보니까 비밀번호가.. 2023. 3. 30. 이전 1 2 3 다음 728x90