전체 글(333)
-
Lord Of SQL Injection [ 15. Assassin ]
[ like 연산자 ]컬럼명 like '문자열' => 해당 문자열을 포함하는지 sql injection공격시 ' = ' 문자가 필터링되고 있을 때 연산자를 대체할 수 있는 연산자 % : mysql에서 와일드카드 1> %문자열변수가 해당 문자열로 끝난다변수 like %a: bdca 2> 문자열%변수가 해당 문자열로 시작한다변수 like a%: abcd 3> %문자열% 변수가 해당 문자열을 포함하고 있다변수 like %a%: bcdabcd => SELECT id FROM prob_assassin WHERE pw like '%문자%' : 문자열을 포함하고 있는지 확인 => d , e , 1, 2, 3, 8, 0 을 포함하고 있음이 확인되었다 => SELECT id FROM prob_assassin WHERE ..
2017.09.13 -
Lord Of SQL Injection [ 14. Giant ]
아스키코드에는 5가지의 제어문자가 존재한다 ( 수평탭, 뉴라인, 수직탭 등등 .. )해당 제어문자를 사용하면 mysql에서 공백(스페이스바)을 대체할 수 있다 \n (=%0a) , \r (=%0d) , \t (=%09) 는 필터링 되어지고 있다그럼 나머지 두개의 제어문자를 사용할 수 있다 ( 0x0b , 0x0c )
2017.09.13 -
Lord Of SQL Injection [ 13. BugBear ]
[ 개념 ] 1> mysql에서의 hex() 함수hex('a') => a는 아스키코드16진수값으로 0x61값이지만, mysql에서는 0x가 없는 61로 반환된다hex('a')=61 2> and , orand => && => %26%26or => || 3> ' ' 를 대신 " " 사용하여 문자 표현4> ' = ' 를 대신하여 not 사용5> 스페이스바를 대신하여 0x09 or 0x0a ... 사용할 수 있다 [ 비밀번호 추측하기 ] 1> 비밀번호 길이 알아내기 no=9999%0a||%0anot%0aid"admin"%0a%26%26%0anot%0alength(pw)8 => SELECT id FROM prob_bugbear WHERE id="admin" and length(pw)=8 2> 비밀번호 각 자리수 ..
2017.09.13 -
Lord Of SQL Injection [ 12. DarkNight ]
[ 풀이 요령 ] 1> ord 함수no를 입력받는 부분에 싱글쿼터가 없어서 따로 싱글쿼터를 사용할 필요가 없으며 문자가 아닌 숫자형태로 비교하면 된다 ord(): 문자열의 1byte를 10진수의 아스키코드값으로 변환시킨다ord('abcd') => a의 아스키코드값 97 2> ' = ' 대체하기' = ' 이 막혀있어서 not 과 을 이용하여 ' = ' 을 대체한다 3> 스페이스바 대체하기아스키코드표에 있는 0x09 ( Tab ) 이나 0x0a ( New line ) ... 등등 대체할 수 있는 여러가지 값들이 있음 [ 비밀번호 추측 과정 ]1> 비밀번호 길이 확인 2> 각 패스워드 자리수 별 확인 left( 문자열 , 개수 ): 문자열의 좌측에서부터 개수만큼 문자 반환right( 문자열 , 개수 ): 문자..
2017.09.13 -
Lord Of SQL Injection [ 11. Golem ]
preg_match함수로 인해 or , and , substr( , = 필터링이 걸려있다이들 함수를 대체할 수 있는 것들을 찾아보자or => ||and => %26%26 ( && )substr => substring or mid함수 or left+right= => like , , 으로 대체 [ 패스워드 추측하기 ] 1> 패스워드 길이 확인하기 URL: https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw=9999' || id like 'admin' %26%26 not length(pw) 8 %23 => SELECT id FROM prob_golem WHERE id='guest' and pw='9999' || id li..
2017.09.13 -
Lord Of SQL Injection [ 10.Skeleton ]
and 1=0 : 항상 거짓이기 때문에 SQL쿼리문을 실행시킬 수 없다URL: https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw=9999' or id='admin' %23 => SELECT id FROM prob_skeleton WHERE id='guest' and pw='9999' or id='admin' #' and 1=0
2017.09.12 -
Lord Of SQL Injection [ 7.Orge ]
preg_match 함수에서 or , and 사용을 금지하고 있고, 비밀번호를 GET방식으로 입력받고, add|ashes함수를 이용해 변환한 뒤 DB에 저장된 패스워드와 비교한다 5번 오크문제와 같은 패스워드를 유추하는 블라인드 인젝션 문제입니다 [ 패스워드 유추 과정 ] 1> 패스워드 길이를 알아낸다 URL: los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=9999' || id='admin' %26%26 length(pw)=8 %23 2>패스워드의 첫번째 글자부터 유추한다 URL: los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=9999' || id='admin' %26%..
2017.09.12 -
Lord Of SQL Injection [ 6.DarkElf ]
preg_match함수에서 or , and 사용을 막아두고있다 or와 and를 대체할 수 있는 문자를 찾아야한다 or => " || " and => " && " , &&는 URL에서 변수구분자로 사용하고 있으므로 아스키코드 26을 사용하도록 한다 => %26 URL: https://los.eagle-jump.org/darkelf_6e50323a0bfccc2f3daf4df731651f75.php?pw=9999' || id='admin' %23 => SELECT id FROM prob_darkelf WHERE ( id='guest' and pw='9999' ) || id='admin' #'
2017.09.08 -
Lord Of SQL Injection [ 5. Wolfman]
pre_match 함수에서 공백을 사용할 수 없도록 제한을 두었다 SQL문에서 공백을 대체할 수 있는 문자들이 무엇이 있는지 살펴보자 0x09: NULL ( 탭 ) 0x10: New Line ( 줄 바꿈 ) 0x11: Vertical Tab 0x12: New Page ( 프린터 용지 먹임 ,새 페이지 ) 0x13: Carrige Return ( 줄바꿈 ) 해당 문자들을 URL에서 % 기호를 이용해서 사용할 수 있고, 주석을 이용해서 문자열을 구분시킬 수 있다 URL: https://los.eagle-jump.org/wolfman_f14e72f8d97e3cb7b8fe02bef1590757.php?pw=9999'or%0did='admin'%0a%23
2017.09.08 -
Lord Of SQL injection [ 4.Orc ]
GET방식으로 pw를 입력받는다 add|ashes() 함수를 통해서 비밀번호를 변환하고 그 비밀번호에 일치하는 비밀번호를 테이블에서 찾아낸다처음 입력한 패스워드와 테이블의 패스워드를 비교하여 일치하면 문제가 풀린다=> 직접 패스워드를 알아내야 하는 블라인드 인젝션 문제이다 사용할 함수는 ascii() , length() , substring() = substr() 함수이다ascii() : 입력받은 인자를 아스키 코드 10진수로 변환한다 length( 문자열 ) : 문자열의 길이를 반환한다substring( 문자열 , 시작위치 , 길이 ) : 문자열의 시작위치에서 잘라낼 문자개수를 지정하여 반환한다=> substr( 'abcd' , 2 , 2 ) = bc [ 비밀번호 유추 과정 ]1> 패스워드의 길이를 확..
2017.09.08