본문 바로가기

분류 전체보기

(111)
Lord of SQLInjection Skeleton 풀이 admin으로 로그인해야하는데 1=0이라는 조건때문에 무슨값을 입력해도 무조건 false라는 결과가 나오도록 되어있다. 하지만 pw값이 저 조건의 앞에 들어가니 만사 OK~ pw에 값을 넣지 않고 id를 admin으로 만들어주는 값(' or id='admin' -- ')을 삽입하여 풀어주면 풀린다.
Lord of SQLInjection Vampire 풀이 뭐 당연히 admin으로 로그인해야한다. 하지만 입력값을 모두 소문자로 바꾸고 admin을 없애는 코드가 있다. 하지만 저것쯤이야 adadminmin처럼 써주면 우회가 가능하다. Clear~
Lord of SQLInjection Troll 풀이 코드를 한번 훑어보았다. admin으로 로그인되면 되지만 admin이 필터링되어 입력할 수 없다. 하지만 여기서 preg_match 정규식에 /i가 없는것이 눈에 띄었다. PHP상에서 대소문자 구별을 안하고, SQL은 원래 대소문자 구별을 안하니 대문자가 포함되어 있으면 문제를 풀 수 있다는 가정을 할 수 있다. 따라서 a 한글자만 대문자로 바꿔 입력해보았더니 풀렸다.
Lord of SQLInjection Orge 풀이 문제의 목표 자체는 Darkelf 문제와 같으나, 이번에는 비밀번호가 admin의 비밀번호와 같아야 한다. 비밀번호를 받아오는 로직(글자수 체크 -> 한자리 한자리 비교하여 비밀번호 추출)이 같으므로 뭔가 Orc 문제에서 사용했던 코드를 재활용할 수 있을것 같다는 생각이 들었다. 그래서 주소와 OR, 그리고 AND만을 변경하였다. OR -> || AND -> && 이렇게 코드를 동작했더니 예상대로 비밀번호를 추출하는데 성공했다. 이 비밀번호로 인증하니 풀렸다.
Lord of SQLInjection Darkelf 풀이 뭐 이젠 당연하다. admin으로 로그인하는것이다. pw에 SQL 구문을 삽입해야한다. 하지만 or과 and가 필터링되어 포함되어 있으면 HeHe가 뜨는 페이지로 이동하게 된다. 하지만 SQL은 or은 || 와 같고, and는 && 와 같이 동작할 수 있으므로 이를 활용하여 구문을 작성하면 ' || id='admin' -- '가 된다. 가볍게 Clear~
Lord of SQLInjection Wolfman 풀이 이 문제의 목표는 admin으로 로그인하는것이다. 뭐 당연하겠거니 하고 ' or id='admin' -- '를 입력하게 되면 공백(Whitespace) 필터링때문에 걸리게 된다. Whitespace 필터링을 우회하기 위해서는 Line Feed(다음줄로), 즉 %0a를 사용하면 된다. 그럼 우리가 삽입할 SQL 구문은 '%0aor%0aid='admin'%0a--%0a'가 된다. 위 구문을 pw에 삽입하면 문제가 풀린다.
Lord of SQLInjection Orc 풀이 코드를 보자 이번에는 비밀번호(pw) 부분만 수정이 가능하다. 그래서 모두가 한번쯤 생각해봤을법한 ' or 1=1 -- ''를 대입해보았다. 이번에는 admin으로 로그인은 되었지만 문제가 풀리지는 않았다. 이유를 알아보니 입력한 값이 사용자(admin)의 비밀번호와 같은지 검증하는 절차를 거친 뒤 일치해야만 문제를 해결했다고 인정해주기 떄문이었다. 그래서 나는 비밀번호를 알아야만 했고, 경우의 수를 최대한 줄이기 위해 글자수를 먼저 구하고 비밀번호를 무차별 대입 공격을 통해 얻어내야 겠다고 생각했다. 글자수는 SQL 문법에 존재하는 length를 사용하면 되므로 length(pw)=길이 형식으로 대입하여 만약 성공한다면 Hello admin이 출력될 것이다. 글자수를 구했다면 비밀번호를 구해야했는데, ..
Lord of SQLInjection Goblin 풀이 코드를 보니 이번에는 id가 하드코딩되어있고 우리가 간섭할 수 있는 부분은 no 부분인것 같다. no에 1이라는 값이 들어가면 guest 사용자를 환영해준다. 하지만 여기에 1이 아닌 다른값이 나온다면 실행결과가 나오지 않는다. -> 여기서 우리는 잘못된 SQL 구문이라는것을 추측할 수 있게 된다. 얼추 감을 잡았겠지만 OR을 이용하여 잘못 실행된 SQL 구문을 대체할것이다. no에 2 or id='admin'을 시도하였으나 따옴표가 필터링되어 exit되었다. 여기서 작은 따옴표(')를 억음 부호(`)로 대체해 보기도 하고.. 없애보기도 하는등의 여러가지 Testcase로 시도하였으나 실패하였다. 나는 여기서 문득 SQL에서 16진수(Hex)를 문자열(String)으로 인식한다는것이 떠올랐다. 그래도 바..