문제 풀이/Lord Of SQL
-
LOS - hell_fire / level 23문제 풀이/Lord Of SQL 2024. 11. 11. 20:12
문제풀이$_GET[order]로 값을 받고 있음을 확인할 수 있다. 또한, order by로 정렬을 가능함을 알 수 있다.order by 1 일때 admin이 상위로 오고 order by 3 일때 rubiya가 상위로 올라오는 것을 알 수 있다. 이를 활용하여 blind sql injection을 시도한다. case when (조건문) then 1 else 3 end을 이용하여 시도한다. case when ( id='admin' and length(email) > 1) then 1 else 3 end 만약 참일 경우 admin이 상위로, 아닐경우 rubiya가 상위로 올라오게 된다. 또한, 표로 구성되어 있으므로 beautifulsoup를 활용하여 테이블을 파싱한 뒤 비교를 시도하면 된다.soup = B..
-
LOS - dark_eyes / level 22문제 풀이/Lord Of SQL 2024. 11. 7. 21:44
문제풀이if문과 case when 모두 필터링이 걸려있으므로 iron_golem처럼 해결할 수 없다. 하지만 똑같이 error based + blind를 수행해야 한다. 이 문제를 해결하기 위해서는 2가지의 개념을 알아야 한다. 1. SQL union select는 중복된 값을 제거하고 출력 (union all select는 중복 허용)2. True => 1 / False => 0 이를 활용하면 blind sql injection이 가능해진다. ?pw=a' || (select 1 union select 1=1)#union select 1=1은 true이고 이는 1로 인식을 하게 되며 select 1과 중복값이므로 1개의 행만 반환하게 된다. ?pw=a' || (select 1 union select 1=..
-
LOS - iron_golem / level 21문제 풀이/Lord Of SQL 2024. 11. 7. 20:38
문제풀이pw에 사용자의 입력이 들어가며 결과값을 도출하는 부분이 없다. 하지만 if(mysql_error($db)) exit(mysqli_error($db)); 를 통해 db error를 사용자에게 보여주고 있다. 처음에는 error based injection을 활용하여 extractvalue 함수를 사용해서 접근을 시도하였지만 실패 ?pw=a' || extractvalue('1', concat(0x3a, 'hi'))#이런식으로 concat(0x3a, "실행할 sql 구문") 을 이용하여 공격을 시도하였으나 '_' 필터링으로 인한 schema 탈취 불가 그래서 다른 방식으로 접근을 시도하였다. if 문의 참•거짓을 활용하여 error based + blind sql injection을 활용한다. ?pw..
-
LOS - dragon / level 20문제 풀이/Lord Of SQL 2024. 11. 7. 20:18
문제풀이query : select id from prob_dragon where id='guest'# and pw='' 으로 구성되어 있으며 pw에 값을 대입할 수 있다. 하지만 pw 앞에 주석처리의 의미인 # 이 붙어있어 pw의 입력값이 생략됨을 알 수 있다. 이를 해결하기 위해서는 줄넘김 기법을 사용해서 이를 우회한다. %0a / 줄넘김(\n)%0b / 수직 텝 정답더보기?pw='%0aor%201%20limit%201,1%23
-
LOS - xavis / level 19문제 풀이/Lord Of SQL 2024. 7. 9. 21:15
문제풀이 과정해당 문제는 2가지의 풀이 방법이 존재한다 1. Blind SQL Injection2. Union Based 1. Blind SQL Injection?pw=%27%20and%201%20or%20id=%27admin%27%20and%20ascii(substr(pw,1,1))%20%26%201%20=%200%23해당 방식으로 substr을 통해 한글자 씩 가져오고 ascii 비트 마스킹을 통하여 비밀번호를 찾을 수 있다 물론 이 방식도 효율적이지만 해당 문제에서는 Union Based 방식을 사용하면 더 쉽게 해결할 수 있다 2. Union Based Mysql 에서 변수를 지정할 수 있다 이를 활용하여 pw의 값을 변수에 넣고 Union을 사용하여 붙이면 해결 된다 select와 set에 사..
-
LOS - nightmare / level 18문제 풀이/Lord Of SQL 2024. 7. 9. 20:32
문제풀이 과정if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~"); if(strlen($_GET[pw])>6) exit("No Hack ~_~"); pw의 값이 다음과 같이 필터링이 걸려있고, 6글자를 초과하면 필터링에 걸림을 알 수 있다 고려사항은 다음과 같다1. 문자열이 아무것도 없을 시 DB에서 False값으로 받는 것을 이용한다2. 주석 처리를 하는 #이 필터링이 걸려있으므로 --나 ;%00으로 우회한다3. 문자열의 길이를 조심할 것정답더보기?pw=%27)=0;%00
-
LOS - zombie_assassin / level 17문제 풀이/Lord Of SQL 2024. 7. 9. 20:10
문제풀이 과정 $_GET['id'] = strrev(addslashes($_GET['id'])); $_GET['pw'] = strrev(addslashes($_GET['pw'])); id 와 pw값에 addslashes가 적용되는 것을 알 수 있다 addslashes 함수는 ' " Null 값에 대해 \를 붙혀 문자열로 바꿔주는 함수이다 예를 들어 id='를 입력하면 \'로 입력이 됨을 알 수 있다 또한, strrev는 들어온 값을 뒤집어 들어가게 된다 즉, id=a'&pw=b를 입력하면 다음과 같은 결과가 나오게 된다 addslashes 함수를 이용하여 싱글쿼터를 문자화 시켜 빠져나온 뒤 b에 injection을 시도하면 된다 즉, 싱글쿼터인 ' 뿐만 아니라 더블쿼터 " 도 역슬래쉬가 붙기 때문에 ..
-
LOS - succubus / level 16문제 풀이/Lord Of SQL 2024. 7. 1. 19:24
문제 풀이 과정 if(preg_match('/\'/',$_GET[id])) exit("HeHe"); if(preg_match('/\'/',$_GET[pw])) exit("HeHe"); $query = "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 여기서 id와 pw에서 싱글쿼터를 필터링 하고 있어 id와 pw를 자체적으로 나올 수는 없다 하지만 여기서 id와 pw를 연속적으로 받고 있으므로 \ 를 통해 우회할 수 있다 ?id=\&pw=a select id from prob_succubus where id = '\' and pw='a' 이런식으로 \'으로 인해 싱글쿼터가 문자열로 인식을 하게 되어 'and pw..