목록Wargame Writeups (64)
White Security
los.eagle-jump.org 22번 문제입니다. 이번 문제는 21번의 진화버전입니다.쿼리 수행결과, 오류 메시지도 물론이고if case when .. 등등조건분기에 필요한 문구들을 거의 필터링 해두었기에조건식을 사용하지 않고에러를 유발시킬 수 있어야 하죠. pw='+or+exp(710*())--+- 다른 방법도 있을 수 있겠지만저는 EXP 함수를 이용하여 문제를 해결했습니다. EXP 함수는 인자값이 710을 넘어가면처리 가능한 범위를 넘겨 오류를 발생하는데요. 따라서 내의 조건문이 참이면오류가 발생하여 빈 페이지를 표시하고거짓이면 정상 페이지를 확인할 수 있습니다. from urllib import request, parse, error import ..
los.eagle-jump.org 21번 문제입니다. 첫번째 쿼리의 실행 결과를 보여주지 않는 대신에mysql_error 함수를 통해 에러 메시지를 출력해 줍니다. Error based SQL Injection 문제라는 것이죠. 그렇지만 '_' 문자가 필터링되기에흔히 사용되는 group_by, const_name 는 물론이고 Mysql 5.1 버전부터 지원되는Updatexml, Extractvalue 또한 사용이 불가능합니다. 따라서 저는Blind Error based SQL Injection 을 사용하여 문제를 해결했습니다. pw='+or+if(1=1,1,(select+1+union+select+2))--+- IF 문의 조건식이 참이면 1거짓이면 (SELECT 1 UNION SELECT 2) 을 반환하..
los.eagle-jump.org 20번 문제입니다. pw 인자의 위치가 주석문에 포함되었군요.하지만 #은 한 줄 주석이므로%0a를 사용하여 정상적으로 작동합니다. pw=%0a+and+0+or+id='admin'--+- %0a를 첨가해 준 후에 ' and 0 ' 으로guest 로그인을 막고admin 을 id 로 한정해 주면 되겠습니다.
los.eagle-jump.org 19번 문제입니다. 이번 문제의 pw 값은Extended ASCII Character 로 이루어져 있습니다.따라서 기존 0 ~ 128 까지의 값으로추정하여 인젝션을 시도하였는데성과가 없으셨다면 포스팅을 읽기 전256까지 범위를 확장하여다시 시도해 보실 것을 권합니다. pw='||id='admin'+and+length((pw))>=32--+- 중요 연산자는 모두 필터링 되지 않아사용이 가능하므로평소처럼 Blind SQL Injection을 시도하시면 되겠습니다. from urllib import request, parse, error import math, sys def check_true(response): return ( response.find(b'Hello admi..
los.eagle-jump.org 18번 문제입니다. pw의 길이가 제한되었고주석을 만들 수 있는( #, - ) 문자가 필터링 되었습니다. 여전히 널바이트 사용이 가능하므로;%00 구문을 이용하여뒷 부분을 무효화 시키면 되겠습니다. 또한 Mysql의 auto type cast기능을 이용하여야 하는데요. 알파벳으로 시작하는 문자열을다른 숫자와 연산할 시에해당 문자열은 항상 0으로 계산됩니다. pw='=1);%00pw='*1);%00pw='%1);%00 따라서 위 쿼리들은 결과적으로'' = 1 등의 형태를 취하게 되므로0을 반환합니다.그리고 pw 값과 비교하게 되니pw = ( '' = 1 ) 구문은pw = 0( '' = 1 ) = 0으로 계산되어pw 값 앞부분이 알파벳으로 시작할 경우항상 참이 되는 것이지요.
los.eagle-jump.org 17번 문제입니다 널바이트 취약점을 가진 이전 문제를 보완하여 쿼트 필터링에 preg_match 함수를 사용했습니다. 그렇지만 역슬래시를 적절히 활용하면 인젝션이 가능합니다.id 인자의 끝부분에 역슬래시를 넣어주면id 인자의 시작부분부터pw 인자의 이전부분까지모두 하나의 문자열로 인식됩니다. pw 인자에 인젝션이 가능해 지는 것이지요. https://los.eagle-jump.org/succubus.php?id=\&pw=or+1--+- 따라서 pw 앞 부분까지를 단일 문자열로 취급하여pw에 or 문을 넣어주는 것으로항상 참을 리턴하게 만들 수 있습니다.
los.eagle.jump 의 16번 문제입니다. ereg 함수를 사용해 싱글쿼트를 필터링 하고 있네요. php 7.0 부터 삭제된ereg 함수는널 바이트 이후 문자를무시해버린다는 취약점이 있습니다. https://los.eagle-jump.org/zombie_assassin.php?pw=%00'or+1--+- %00을 끼워 넣으면 이후 부분부터는쿼트를 넣을 수 있게 되므로로그인이 가능하겠습니다.
los.eagle-jump.org 의 15번 문제입니다.등호가 아닌 like 절을 사용했다는 것이 특징인데요.먼저 like 에 사용되는 메타 캐릭터를 확인하겠습니다. % 캐릭터는 리눅스 Bash 에서의 * (애스터리스크) 와 대응되고_는 . 과 대응됩니다. 따라서 % 이전에 문자열를 붙여a% b% c% ... 등을 인자로 넣어보는 것으로pw 값을 알아내는 것이 가능합니다. from urllib import request, parse import math, sys char_list = 'abcdefghijklmnopqrstuvxyz0123456789' def check_answer(response): if response.find(b'Hello admin') != -1: return 2 elif respo..