[+] Security [+]/CrackUs
-
[CrackUs] LEVEL 20[+] Security [+]/CrackUs 2020. 7. 21. 02:03
LEVEL 20! 이제 마지막 문제다. 두근두근 코드를 살펴보자! 더보기 동일한 SQL Injection 문제지만 여러가지를 막아놓았다. 우선 length! 이는 like '_ _ _ _' 로 길이를 알아낼수 있을 것이다. substr 또한 mid로 우회하면 된다. 좋아! 그럼 뚫어보자! 하지만 도무지 이해가지 않는 부분이 있다. 아래의 쿼리는 4초 정도 지연되는 것을 보아 재대로 동작하지만.. 이는 그렇지 못하다.. 동작을 안한다.. 한시간동안 삽질의 삽질 끝에 문득 든 생각이, 혹시 데이터베이스에 id = admin 계정이 없는 것이 아닐까? 그러고 보니 ID 변수는 UNION 필터링이 없다. union을 이용한 칼럼 부르트 포싱으로 풀어야 할 것같다. (이게 맞는 풀인지 모르겠다..) 테이블명(pl..
-
[CrackUs] LEVEL 19[+] Security [+]/CrackUs 2020. 7. 20. 22:46
19번 문제! 더보기 이번 문제는 쿼리로 no를 입력받는 문제다. play_sql19번 테이블은 계정이 1번부터 30번까지 총 30개 있는듯 하다. if( '인젝션 쿼리' , no=1,1) 로 Blind SQL Injeciton 을 수행할 수 있을 듯 하다. 테이블에 pw길이가 9 인 계정이 있음은 자명하다. 다만... 그게 어떤 계정인지 불확실 하다. 아마 lengh(pw)가 9인 계정을 여러개 파놓을 수도 있다. 선배님께서 말씀하신 함정이 이게 아닐까 싶다. 그렇다면 length(pw)가 9 인 계정을 정확히 짚고 Blind SQL Injection을 가할 필요가 있다. 이로서 no = 1 의 length(pw)가 9 임을 정확히 알았다. 이제는 이전까지 해왔던 방법과 동일하다. 가즈아! 하지만 길이..
-
[CrackUs] LEVEL 18[+] Security [+]/CrackUs 2020. 7. 20. 21:48
두근두근 18번 문제! 더보기 참 흥미로운 문제다 9e307 * N (N은 2 이상의 수)는 에러를 발생하는 전형적인 쿼리다. 9e308과 같게끔 만들어야 하는데, 미친듯이 필터링 해놓아서 챙겨갈만한게 뭐가있을지도 잘 감이 안잡힌다. 으음... 한번 살펴보니, ||와 &&는 살아있다. 적극적으로 사용해야겠다. 그리고 -- 주석이 살아있는 듯하다. 좋아 이것으로 SQl Injection의 방향이 보인다. 또한 정확한 pw를 입력받아야하는 Blind SQL Injection을 요하지는 않는 문제로 보인다. 엇! 혹시나 하고 시도해 보았지만 풀려버렸다. -- 주석을 잘 안사용하는 경향이 있는데 이를 일깨워준 문제가 아닐가 싶다. 이번에도 이전 문제와 동일하게 Post 방식으로 Injection을 진행한다. 다..
-
[CrackUs] LEVEL 17[+] Security [+]/CrackUs 2020. 7. 20. 21:39
LEVEL 17! SQL Injection 교재에서는 16번 문제까지만 다루지만 업데이트되면서 20번까지 늘어났다! 선배님께서 말씀하시길 함정을 많이 파놓았다는데... 한번 시도는 해보자. 더보기 이번에는 sleep을 막아놓으셨다. 이전처럼 Good J0b :) 같은 후크도 없고 무엇을 기준으로 비밀번호를 알아내야할까. 이번에도 여전히 Time base! sleep은 시간을 늦춰주는 함수지만 sleep이 아니더라도 시간을 지연시킬 방법은 있다! sleep 함수 대채제 Benchmark() : 해당 명령어를 특정 횟수만큼 반복시킨다. count(*) from Table.columns: 테이블에 있는 모든 쿼리를 조회한후 숫자를 더해서 반환. 테이블의 칼럼 수에 따라 수행시간이 다르다. (CrackUs사이트..
-
[CrackUs] LEVEL 16[+] Security [+]/CrackUs 2020. 7. 19. 00:28
LEVEL 16 아이스크림 문제! 코드를 살펴보자. 우선 필터링이 많다. 1차적으로 union \ or 0x 를 필터링하고 쿼리를 실행한다. 그 이후에는 substr mid left if sleep ; # 등등 이것저것 많이 막혀있지만 두번째 필터링은 아무래도 상관없다. 우리는 첫번째 쿼리가 실행될때 Time Based Blind SQL Injection으로 비밀번호를 찾아낼 수 있으니까! 그리고 이전까지는 ord를 사용했지만 or가 필터링되는 바람에 ord까지 같이 못쓰게 됬다. 본인은 ascii함수를 이용하여 우회하였다. 클리어!
-
[CrackUs] LEVEL 15[+] Security [+]/CrackUs 2020. 7. 18. 23:34
LEVEL 15!! 이전까지의 Blind SQL Injection은 쿼리실행시 마다 Good J0b :D 과 같은 텍스트를 기준으로 진위를 판단했다. 하지만 이젠 텍스트가 없다. MySQL 에서 잘못된 쿼리가 실행됬을때 에러를 체크해 반환하는데 이를 기반으로 Blind SQL Injection을 해야한다. 이름하야 Error Based Blind SQL Injection! id = 'admin' and length(pw)=11 이 맞다면 오류를 발생시켜! 라는 의미의 쿼리를 삽입한다.
-
[CrackUs] LEVEL 13[+] Security [+]/CrackUs 2020. 7. 18. 20:59
LEVEL 13 $result['pw']==$_GET['pw'] 를 보니 이번에도 Blind SQL Injection 문제다. 하지만 이번엔 조금 다른 것이 substr을 필터링 해놓았다. 이전에 풀었던 or 필터링 문제에서 설명해 놓은 것 처럼 or 와 || 를 둘다 필터링 해놓지 않으면 무의미하다. substr또한 마찬가지다, mid, left right 로 대체가 가능하다. substr이 mid로 대체된다는 점을 알기만하면 LEVEL 11 문제와 별반 다르지않다고 생각했다 음...? 왜 안풀리지...? 문제는 $result['pw']==$_GET['pw'] 의 의미는 데이터베이스에서 가져온 pw와 URL쿼리에 삽입한 pw가 정확히 일치해야한다. 대소구분을 하지않는 mysql특성상 'AbCd' 와 '..