본문 바로가기

전체 글

(39)
[Lord of SQLInjection] golem or, and, substr(, = 이 필터링 되어있다. 우회하는 방법 or -> || and -> && substr('문자',몇 번째, 1) -> right(left('문자',몇 번째),1) = -> like 입력받은 pw 값과 쿼리 결과로 출력된 pw 값이 같다면 풀리는 문제이다. 즉 admin의 pw를 정확히 알아내야 하는 것이다. 현재 첫 번째 쿼리에 입력되어있는 id의 값은 guest 이기 때문에 id 값을 다시 지정해줘야하고 pw를 알아내기 위해서 length 함수를 이용해 pw 길이부터 알아내보자. pw=' || id like 'admin' && length(pw) like 1# 입력해주기 빠른 결과 확인을 위해 burp의 intruder 사용해보자. 아는 내용일테니 빠르게 넘어가겠습니다. ..
[Lord of SQLInjection] skeleton 쿼리 출력결과 id 값이 admin이면 풀리는 문제다. 소스코드를 보면, 쿼리의 id 값은 guest로 되어있고 and 1=0으로 되어있다. and 1=0 부분을 지워주기 위해서는 뒤에 주석을 달아주면 될 것이다. 앞에서 풀었던 문제들을 종합하면 쉽게 풀 수 있다. 성공! 다음 단계로 넘어가자.
[Lord of SQLInjection] vampire 싱글 쿼터를 필터링하고있다. id 입력 값을 모두 소문자로 변환하고 admin은 공백으로 치환한다. id 값이 admin이어야 풀리는 문제기 때문에 다른 우회방법을 생각해봐야 한다. admin을 공백으로 치환한다면, adadminmin 입력 시 admin이 될 것이라 생각했다. 입력해보자. 성공! 다음 단계로 넘어가자.
[Lord of SQLInjection] troll 싱글쿼터와 admin을 필터링하고있다. 쿼리 결과 id 값이 admin이면 문제가 해결된다. admin을 필터링하고있지만 대문자는 따로 검증하고있지 않기 때문에 ADMIN으로 작성하여 실행해보자. 성공! 다음 단계로 넘어가자.
[Lord of SQLInjection] orge 이 문제도 or 와 and 에 필터링이 적용되어있다. pw 우회도 안돼서 직접 admin의 pw까지 알아내야한다! 먼저 blind sql injection을 이용하여 pw의 길이부터 알아내보자. pw 길이를 빨리 알아내기 위해 burpsuite의 intruder를 사용해보자 Start attack! pw 길이가 8인 것을 알았기 때문에 substr 함수를 사용하여 무작위 대입 공격을 진행하고 한 글자씩 알아내도록 하자. Attack type을 Cluster bomb로 변경해주고 값을 변경하여 실행할 곳을 Add를 선택하여 추가해준다. simple list에는 숫자와 알파벳을 지정해주었다! Start attack! pw 값을 확인하였으니, 쿼리에 삽입하여 확인해보자. 성공! 다음 단계로 넘어가자.
[Lord of SQLInjection] darkelf 쿼리 결과 id 값이 admin이면 풀리는 문제이다. 이 문제는 or 과 and 에 필터링이 적용되어있다. or -> || and -> && 하지만 위와 같이 우회할 수 있기 때문에 위의 기호를 사용하여 풀어보자. 성공! 다음 단계로 넘어가자.
[Lord of SQLInjection] wolfman 이 문제는 id가 admin일 때 로그인 우회를 하면 성공하는 문제이다. 추가로 위의 코드를 보면 공백을 입력받지 않게 되어있다. pw 값에 공백을 포함하여 '1 '을 입력해보았더니, preg_match 함수에 의해 'No whitespace'가 출력된 것을 확인했다. 우선 id값이 현재 guest로 입력되어있기 때문에, pw 입력은 싱글쿼터를 사용해 종료해주고 id=admin 으로 재 설정해준다. 공백문자의 경우 %0a (\n의 url encoding) 를 사용하여 우회해보도록 하자. 성공! 다음 단계로 넘어가자.
[Lord of SQLInjection] orc 두 번째 쿼리에서 출력된 pw 값과 GET으로 입력된 pw의 값이 같아야 풀리는 문제이다. 즉, 다른 문제들과는 다르게 pw 값을 알아내야 한다. id 값은 지금 admin으로 이미 입력된 상태이기 때문에 pw 값만 알아내면 된다. pw 값을 알아내기 위해 blind sql injection을 이용하여 pw 길이부터 알아내보자. 우선 pw를 모르기 때문에 '(싱글쿼터)를 사용하여 입력을 마무리해주고 or을 사용해주면 뒤의 쿼리 결과에 따라 출력값이 변경될 것이다. pw의 길이가 참일 때 'Hello admin'이 출력될 것이다. burp를 사용하여 빠르게 결과 값을 확인해보자. 바꿔줘야할 값을 선택하여 Add를 적용해주고 Payloads 메뉴에서 Payload type은 Numbers를 선택해주고 1~1..