SQL Injection
-
[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 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 12[+] Security [+]/CrackUs 2020. 7. 18. 07:25
LEVEL 12!! 코드를 살펴보자! 오오 신기한 쿼리다. 쿼리 자체에 주석이 삽입되어 있어, 우리는 저걸 피해야한다. 피해야한다? 으음... 안 피해도 될 것 같다! ?id=admin' and pw='c0ngr@z~&pw=c0ngr@z~ 줄바꿈을 사용하지 않고도 해결할 수 있다. 그렇다면 줄바꿈을 피해야만 하는 문제는? [Lord of SQLInjection] #20 dragon 야~ 이제 20번째 문제 드래곤! 뭔가 이제 엄청난 몬스터가 나온듯 하다. 좋아! 살펴보자! 신박하게도 쿼리 자체에 주석이 삽입되어있어 우리는 저걸 피해야한다. 줄바꿈(\n %0a)로 피할 수 있다! 필� devjounal.tistory.com
-
[CrackUs] LEVEL 11[+] Security [+]/CrackUs 2020. 7. 18. 04:21
LEVEL 11 딸기 문제! 코드를 살펴보자. 특별한 필터링이나 조건을 요구하지 않지만 result[′pw′]==_GET['pw'] 이부분! 즉 get방식으로 입력한 pw와 실제 데이터베이스와 매치시켰을때 pw가 똑같아야한다. 결국은 정확한 pw 값을 알아야 문제를 해결할 수 있다. Blind SQL Injection 으로 해결해야한다. 다른 필터링이 없다. Blind SQL Injection을 사용하는 첫걸음을 위한 문제! 이를 해결하기위해 이전 문제에 사용했던 코드를 재활용한다. 문제 해결! 비슷한 유형의 다른 문제 [Lord of SQLInjection] #4 orc 이제 4번 문제!! 이전까지와 다른 점이 있다면 GET[pw]=addslashes(_GET[pw]); pw쿼리에 /를 붙..