해킹/SQL Injection3 Lord of SQLInjection 2번(cobolt) 문제 위 코드를 보면 prob, _ , ., ()를 필터링하고 GET으로 받은 아이디값 그리고 md5로 해시한 비밀번호로 인증과 식별을 한다. 그리고 식별한 id값이 admin이면 slove("cobolt")함수가 실행되서 문제가 풀리게 된다. 이 문제는 아이디가 "admin"이어야지 해결되기 때문에 id 파라미터 값으로 admin'을 주고 그리고 비밀번호값을 다 무시하기 위해서 #으로 주석처리 하면 간단하게 풀린다. 하지만 여기서 url창에 직접 #을 적으면 값으로 인식 안하기 때문에 #의 URL인코더 값인 %23을 집어 넣어줘야한다. 2022. 10. 29. 로그인 Case 별 SQL Injection 1. 인증과 식별 동시에 처리 - Id에 guest' # 을 넣고 pass에 1234를 넣어서 우회한다. SELECT id,pass FROM user WHERE id = 'guest' #' AND pass = '1234' 위 구문을 삽입해서 #이하의 부분이 주석처리 된다. 그러면서 DB에 guest라는 아이디가 있으면 로그인에 성공하게 된다. 2. 인증과 식별 분리해서 처리 - Id에 ' UNION SELECT 'test','1234' # 을 넣어서 인증을 우회한다. SELECT id,pass FROM user WHERE id = '' UNION SELECT 'test','1234' #' UNION을 삽임함으로써 다음과 같은 결과가 나온다. id pass test 1234 이유를 보자면 id 부분에 아무.. 2022. 10. 26. Lord of SQLInjection 1번(gremlin) 문제 $_GET이란 함수로 위 URL창에 파라미터로 id와 pw를 받아오고 그것을 preg_match() 함수로 prob, . , () 이런 문자들이 없는지 체크한다. 없으면 sql 문으로 아이디와 페스워드를 이용하여 인증하고 인증되면 slove()함수로 문제가 해결되는 코드이다. 아이디를 모르니 " ' or 1 = 1 # " 값을 id 파라미터로 집어넣었지만 URL 인코딩 과정에서 문제가 생기는 건지 #을 인코딩하지 못하고 아예 가져오지를 못한다. 그래서 #의 URL인코딩 값인 %23을 직접 넣어줘서 뒤의 pw부분을 주석처리하였고 값을 가져오는 것에 성공해서 인증을 우회하는데 성공했다. 2022. 10. 25. 이전 1 다음