본문 바로가기

wargame/los

(14)
giant 이번 문제는 공백을 어떻게 우회하는지에 대한 문제입니다. 저한테는 재미있는 문제여서 기억에 많이 남습니다. 1글자로 공백을 우회해야 합니다. 아래는 아스키코드표에 있는 일부분 입니다. 파란색으로 표시된 부분은 공백을 나타내는 아스키 코드입니다. 즉 우리가 and를 우회하기 위해 &(%26)을 사용하는 것과 같이 사용하는 거라고 보시면 됩니다. 이번 문제에서는 %0b와 %0c로 공백을 우회 할 수 있었습니다.
los bugbear los bugbear 풀이를 하겠습니다. 일단 소스코드는 아래와 같습니다. 인자값으로는 pw 와 no 두개가 있는데요일단 pw 에는 싱글쿼터를 필터링 해서 pw를 이용하여 injection을 하는 것을 불가능 할 것 같습니다. no도 싱글쿼터를 필터링 해서 pw에 \로 우회 시킨다고 해도 싱글쿼터를 사용하지 못하므로 최종적으로 pw는 사용하지 못합니다. 그러면 no를 이용하여 injection을 해야합니다. or and 는 || 와 %26(&)으로 우회를 하면 됩니다.공백도 필터링이 걸려있습니다. 그러면 %0a~%0d 를 이용해서 우회를 해도 되고 /**/를 이용해서 우회 해도 됩니다. substr을 막아 놨네요마지막 if문을 보면 blind입니다. 비밀번호를 알아내야하므로 left,right를 이용하여..
los darkknight los darkknight 풀이 필터를 보면은 일단 pw 와 id 에는 싱글 쿼터를 사용하지 못합니다. 그러므로 쉽게 no 에서 injection을 수행 할 것입니다. no의 필터링을 보면 싱글쿼터가 필터링 되어 있지만. "을 사용하여 싱글 쿼터를 대신 할 수 있습니다. 블라인드 인젝션이므로 like를 사용 하겠습니다.like 에 대한 설명은 golem 글에서 적어 놨습니다. 예를 들어 no= 1 or id like "admin" and pw like "1%" 비밀번호의 글자의 길이는 8입니다. python 으로 간단하게 툴을 짜서 쉽게 비밀번호를 추출 할 수 있습니다.이번 경우에는 비밀번호가 숫자와 영어의 조합입니다. 그러므로 손으로 직접 해도 상관 없습니다. python3 입니다.제가 직접 작성한거라..
los golem GOLEM 풀이 입니다. 쿼리를 보면 pw 에 = 와 or and substr 필터링이 걸려있습니다.or은 || 를 이용해서 우회 and 는 && 를 이요하면 되는데 url 에서 & 는 다른 get 을 넘길 때 사용하므로 %26으로 바꾸셔서 우회하시면 됩니다.%26은 쿼리 단으로 들어가서 mysql 에서 핵스를 자동적으로 해석 하기 때문에 상관 없습니다. ?pw=1' || id like 'admin' # ?pw=1' || id like 'admin' %26%26 pw like '8%' # like 함수를 이용해서 블라인드 인젝션을 수행할 것입니다.like 함수는 특별하게 정규식이 사용 가능합니다. 예를 들면 pw like '1%' 이런 식으로 사용하면 pw 에서 1글자만 비교합니다. 계속 해서 '1a%'..
los SKELETON los 10번 (SKELETION) 풀이 뒤에 쿼리가 ' and 1=0이 붙어 있습니다. 하지만 %23 (#)이 필터링이 되지 않는 것을 확인 할 수있습니다. 그러므로 우리는 %23 을 사용하여 뒤에 and 1=0을 주석 처리 하면 됩니다. pw=1' or id='admin' %23 이렇게 입력 해주면 해결 할 수 있습니다.
los vampire los 9번 (vampire) 풀이 8번과 매우 유사한 문제입니다. 이번에는 소문자 admin 이라는 단어가 나오면 ""로 치환해줍니다. 소문자 admin 만 필터링 하므로 아래와 같이 Admin 이라던가ADMIN 으로 우회 해주시면 됩니다. (대문자가 되는 이유는 php 단에서는 admin 과 Admin을 다르게 인식하지만 db 단에서는 동일한 단어로 인식하기 때문입니다.) ------------------------수정----------------------------- 위에서 설명한 내용은 str_replace라는 함수도 대소문자를 구분하기 때문에 admin과 Admin을 다른 문자로 해석합니다. 하지만 db 단으로 들어가면 동일한 문자로 인식하기 때문에 가능한 방법이었습니다. 추가할 내용은 str..
los troll los 8번 troll 풀이 troll 문제를 보시면 ' 와 를 필터링 합니다.admin 이라는 것을 단 순히 php ereg 에서 검사를 합니다.php에서 ereg는 대소문자를 구분하기 때문에admin과 Admin은 다른 문자로 인식합니다.db로 들어가면 admin 이나 Admin 같은 걸로 봅니다. 이렇게 Admin 이라고 입력해도 문제가 해결 됩니다. 아니면 ADMIN 이라고 입력해도 풀리네요
los orge los 7번 (oreg)풀이 입니다. 소스 코드의 필터링은 크게 or and 를 제외 하면 문제가 될 만한 것은 없습니다. 소스코드를 보면 첫번 째로 쿼리를 날려서 반환값이 참이면 해당 아이디를 출력해줍니다. 이 부분을 이용해서 blind sqlinjection을 시도하면 되겠습니다. 반환 값이 참이기 때문에 ('1') 게스트라는 아이디를 출력해 줍니다. (or 우회 ||) 앞의 (id='guest' and pw='1') 을거짓으로 판단하게하고 || 을 수행하는 쿼리문 입니다. 블라인드 인젝션의 한 방법으로 %를 이용 했습니다. 이렇게 한글자씩 유추해 가면서 pw를 찾으면 됩니다. 참고로 (pw는 8글자 입니다.) pw 8글자를 다 찾으셨으면 pw=에 넣어주시면 됩니다.(참고로 &&를 url에 입력할 때..