분류 전체보기
-
[CrackUs] LEVEL 10[+] Security [+]/CrackUs 2020. 7. 17. 17:59
LEVEL 10 오렌지 문제! 코드를 살펴보자. 예상했던 대로 Blind SQL Injection 문제다. 우선 인자로 idx ch pw 세가지를 받는다. is_numeric 함수는 값이 숫자로만 이루어 졌는지 체크한다. 앞에 ! 가 있으니 숫자로만 이루어져 있지 않다면 False를 반환한다. isset함수는 변수에 값이 들어있는지를 체크한다. 이 역시도 값이 들어있지 않다면 exit 된다. 또한 idx 변수에는 0x 즉 헥사값을 사용하는 것을 막아놓았고, ch의 길이가 1 이상이어야 한다. 아래의 주석은 비밀번호의 길이를 알려준다. 친절하신 출제자님! 좀더 아래를 보면 흥미로운 것이 있다. 쿼리가 두개로 이루어져있다. 첫번째 쿼리는 그 안에 substr 함수를 포함하고 있어서 비밀번호 각각의 값을 알 ..
-
[CrackUs] LEVEL 9[+] Security [+]/CrackUs 2020. 7. 17. 15:36
레벨 9 사과문제! 코드를 살펴보자. 이번문제부터는 쿼리에 등호가 아닌 부등호를 사용한다. 즉 length(pw)의 길이를 알아내는 것이 우선인듯 하다. 또한 if($len == strlen($result['pw']) && $len != 0) 이 부분을 보아 num 인자를 받아 길이를 알아내고 len 을 통해 정확한 비밀번호 길이를 넘겨주면 통과할 수 있는 문제다. 교재에서 이 문제는 Blind SQL Injection 을 들어가기 앞서 개념확인 문제 정도로 쓰인다. 즉 개념을 잘 알고 숙지했다면 쉽게 해결할 수 있다! 비밀번호의 길이가 6보다 크고 && 7보다 크진 않다.
-
[CrackUs] LEVEL 8[+] Security [+]/CrackUs 2020. 7. 17. 15:24
다음 8번 문제! 코드를 살펴보자. 우선 쿼리를 살펴보면 id를 받지 않는다. 하지만 id 값이 admin 이어야 통과할 수 있다. 필터링 되어있는 것을 살펴보면 공백을 막아놓았다. 즉 묻는 것은 자명하다. 공백을 우회하고 id = admin 쿼리를 추가로 생성하라! %0a : Line Feed (\n) %0b, %0c %0d : carracarriage return (\r) %09 : Tap 을 이용하여 공백을 대체할 수 있다. 비슷한 유형의 다른 문제 [Lord of SQLInjection] #5 wolfman 드디어 5번 문제! if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 절을 보아 공백을 필터링해놓은 듯하다! 즉! 공백우회 문제! 해..
-
[CrackUs] LEVEL 7[+] Security [+]/CrackUs 2020. 7. 17. 15:07
다음문제 LEVEL 7! 두둥! 필자는 처음 CrackUs에 접했을때 7번 문제에서 몇일동안이나 잡혀있었던 적이 있다. 그러던중 에라 모르겠다 하는 심정으로 1 부터 10000까지 무차별적으로 대입하다가 5045 에서 문제가 풀리는 기적을 경험한 적이 있다. 아직도 잊혀지지 않는군... 5045! 우선 들어가기 앞서, 해시란 무엇일까? 암호화 기법이다. 내가 입력한 비밀번호를 서버 운영자도 모르게끔 잘 감춰놓는 수단이다. 해쉬값을 사용하면 최악의 경우 해커가 DB를 조회하더라도 원본 비밀번호를 알 수 없고 복호화하기도 어렵다. 하지만 해싱되기전 원본 비밀번호를 안다면 게임은 끝이다. 해쉬함수를 통해 그저 encypt 하기만 하면 그게 암호문일 테니까 위의 문제에서는 crackus 라는 평문을 알려주고 있..
-
[CrackUs] LEVEL 6[+] Security [+]/CrackUs 2020. 7. 16. 10:06
LEVEL 6 달걀 문제! 필자는 달걀을 몹시 좋아한다. 밥 위에 얹어도 좋고 삶아도 좋고, 많이 익히든 적게 익히든 어떻게 먹어도 맛있고, 설탕을 뿌려 먹어도 좋고 소금을 쳐서 먹어도 좋고 정말이지 달걀의 가능성은 인간의 가능성보다 더 무궁무진하다. 암 그렇고말고, 뭐 어쨌거나 문제를 살펴보자. 이번에는 if(preg_match('/\||#|;|-/i', $id)){ exit("Query is filtered :( ");} if(preg_match('/\||#|;|-/i', $pw)){ exit("Query is filtered :( ");} | # ; - 를 막아 놓았다. 이전 문제에도 언급했듯이 | 는 or 와 같이 막아놓은게 아니라면 의미없다. 즉 or 는 살았다. 그 다음은 # ; - 인데 주석..
-
[CrackUs] LEVEL 5[+] Security [+]/CrackUs 2020. 7. 16. 09:44
다음 LEVEL5 문제! 이번엔 특별히 pw를 입력받지 않는다. 또한 or admin # 이 필터링 되어있고, id 가 admin이라면 해결할 수 있다. 세상에나 admin을 필터링 해놓고 admin을 어떻게 찾아오라는 것인가! 하지만 공격 방식은 다양하게 존재한다. 우선 or는 || 로 우회할 수 있다. or 와 || 를 동시에 막아놓은게 아니라면 or 필터링은 유명무실하다. 또한 #을 막아놓았으나 #을 대체할 수 있는 주석 우회가 여럿 있다. 또 가장 중요한! 따옴표를 막아놓지 않았다. 즉 자의적으로 쿼리를 닫고 추가 생성해낼 만한 여지가 다분하다. 헥사 값을 이용하여 해결 할 수도 있고 concat을 사용하여 해결 할 수도 있다.
-
[CrackUs] LEVEL 4[+] Security [+]/CrackUs 2020. 7. 16. 08:57
다음 LEVEL 4 문제 이번에는 LEVEL 1 문제에서 if(preg_match('/\'|\"/i', $id)){ exit("Query is filtered :( ");} if(preg_match('/\'|\"/i', $pw)){ exit("Query is filtered :( ");} 이 두 부분만 추가된 형태다. 즉 따옴표를 쓰지 말 것! 아니 그럼 따옴표를 쓰지 않고 어떻게 풀어야하나!! 해답은 이스케이프! id='' and pw='' 형태의 쿼리에서 id 값에 역슬레쉬를 넣게되면 뒤에 이어지는 '(따옴표)가 문자열 안에 포함되어 진다. 즉 id는 \' and pw= 가 되는 셈이다. 정말 기발하지 않은가??? 대체 누가 처음 생각해낸건지... 이렇게 문제를 해결할 수 있다! 비슷한 유형의 다른 ..