[+] Security [+]/CrackUs
-
[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쿼리에 /를 붙..
-
[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을 사용하여 해결 할 수도 있다.