목록Wargame Writeups/los.eagle-jump.org (22)
White Security
los.eagle-jump.org 의 14번 문제입니다. 이번엔 공백을 다루고 있는데요. 쿼리문 사이의 공백이 있어야 할 부분에 인자를 집어넣었으니, 도로 공백을 끼워 넣음으로서 쿼리문이 정상적으로 값을 받아올 수 있도록 해야 합니다. if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe"); 정규식으로 공백의 입력을 막고 있으니 대체가능한 다른 문자를 찾아야만 합니다. SQL에서 공백 우회법 예로 %0b %0c 이 공백을 대체할 수 있으므로 shit 에 대입해 주어 문제를 해결할 수 있습니다, https://los.eagle-jump.org/giant.php?shit=%0b
los.eagle-jump.org 의 13번 문제입니다. 이전 문제와 비슷하지만no 인자에 필터링되는 단어들이 늘어났습니다. ' : "substr : midascii : ord= : instror : ||and : &&like : instr0x : " 등으로 각각 대체 가능합니다. https://los.eagle-jump.org/bugbear.php?no=-1||1no 에 ||1 을 집어넣으면 guest 로 로그인 가능합니다. https://los.eagle-jump.org/bugbear.php?no=-1||instr(id,"admin") instr 을 통해 id를 admin 단어가 들어가는 것으로 한정하자admin으로 로그인이 가능했습니다. https://los.eagle-jump.org/bugbear..
los.eagle-jump.org 의 12번째 문제입니다.pw 와 no 두개의 인자가 존재하는데pw인자는 싱글쿼트 인젝션이 불가능하니실제로 인젝션이 가능한 것은no 인자 하나 뿐이겠군요. 첫번째 쿼리로 admin의 pw 값을찾아낸 후에 두 번째의 쿼리를 통과하는 것이문제의 목표입니다. 다만 substr, ascii, 싱글쿼트, 등호는 사용이 불가능하니substr : midascii : ord로 바꿔서 우회하거나 instr, like 절 등을 이용하여pw 와 비교하는 방법을 이용해 볼 수 있는데요. 이 포스트에서는 like를 사용해 우회해 보겠습니다. https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?no=-1||1 '||..
los.eagle-jump.org 의 11번째 문제입니다. or, and, substr, = 를 모두 차단하고 있네요. or : || and : && substr : mid = : like 등으로 우회가 가능합니다. https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw='||1--+- pw에 '||1을 넣어 항상 true를 반환하도록 만들고 --+- 를 통해 이후 나오는 쿼트를 주석화 시켰습니다. https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw='||id+like+'admin'+%26%26+1--+- 차단된 '=' 를 대신하여 like를 사용하였고..
los.eagle-jump.org 의 10번째 문제입니다.이번 문제는 pw 이후에 and 1=0 문장을 끼워넣어올바른 암호를 입력해도 로그인이 불가능 하게 되어 있습니다. 그러나 뒷 부분을 주석으로 만드는--+- 또는 #(%23)을 넣어 주면클리어가 가능합니다.
los.eagle-jump.org 의 9번째 문제입니다.이번 문제는 str_replace 함수를 통해admin 문자열을 완전히 제거하고 있다는 것이 특징입니다. 다만 case 를 고려하지 못했고중복 필터링을 수행하고 있지 않으므로의미 없는 행위라고 볼 수 있겠습니다. 따라서 admin 사이에 str_replace 를 통해삭제될 admin 문자열을 이중으로 끼워넣거나admin의 case를 변경하는 것으로 클리어가 가능했습니다.
los.eagle-jump.org 의 8번째 문제입니다.쿼트와 admin 문자열을 차단하고 있다는 점이 특징인데요. admin 문자열 점검 함수에항상 사용하던 preg_match 대신erege 함수를 사용했다는 것이 눈에 띕니다. ereg 함수는 posix 표준에 근거한정규식 확인 함수입니다. preg_match 함수와 용도는 비슷하나취약점이 문제가 되어 php 7.0 부터는완전히 삭제 되었는데요. ereg 함수는 %00 이후 문자열에대해서 점검을 하지 않고,case 점검이 preg_match 보다번거롭게 되어 있습니다. 또한 위 코드는 case 에 따른 조치가 되어 있지 않으므로일부 또는 전체를 대문자로 바꾸어 준다면간단하게 필터링을 통과할 수 있게 됩니다.
los.eagle-jump.org의 7번째 문제입니다. 이전 문제와 동일하게 or, and 를 막아두었네요. admin 계정은 addslashes를 통해 이중 점검을 수행하므로 첫번째 쿼리를 통해 admin의 pw값을 알아내는 과정이 필요할 것으로 보입니다. 정상적으로 || 연산자 사용이 가능하니 || 이후에 비교식을 넣는 것으로 Blind SQL Injection 이 가능합니다. from urllib import request, parse import math, sys def check_true(response): return (response.find(b'Hello admin') != -1); def if_query(query): url = 'https://los.eagle-jump.org/orge_..