정보보안 스터디 - 5주차 7일 - LOS 1단계, gremlin
처음에 나오는 페이지가 php코드여서
LOS 로그인페이지에서 sql문 주입을 하라는건지 어떻게 하라는건지 헷갈렸습니다.
답답한 마음에 공략을 볼까 생각도 했지만,
이것 또한 임무 중에 하나다 라는 마인드로
코드 보는 것부터 시작했습니다.
알고있는 SQL 코드와 다른 생소한 부분이 있기 때문에
같은 기능이지만 다르게 코딩한 것을 이해할 줄 알아야합니다.
모르는 생소한 부분을 검색을 통해 찾아봅니다.
몰랐던 부분
'/prob|_|\.|\(\)/i' :
'//'와 마찬가지로 '//i' 도 포함된 기호를 찾는 기능입니다.
prob _ . ( ) 이 기호들이 들어가 있다면 실행시키지 않고 no hack 을 띄웁니다.
{} : 쿼리 실행할 떄는 제외되서 나오는 부분입니다.
@ : 에러를 띄우지 않고 실행합니다.
highlight_file(__FILE__) : 현재 코드를 색상을 입혀서 페이지에 echo합니다.
단서
GET방식으로 아이디와 비밀번호를 전달 받는데 로그인 페이지가 없습니다.
현재 디렉토리에서 config.php가 있으니, 들어가봅니다.
로그인 폼 등 아무것도 나와있지 않습니다.
그러니 그냥 GET방식으로 주소창에 아이디와 비밀번호 변수를 입력합니다.
select문을 실행해서 불러온 id값만 있으면 됩니다.
그러므로
select id from prob_gremline where 참
이기만 하면 문제가 풀립니다.
페이로드를 입력할 때는
그냥 Visual 코드를 쓰기 보다는
확실하게 구분해야 헷갈리지 않기 때문에
반전색깔로 공격 구문를 입력해보는 것이 좋습니다.
예상가능한 방법
1. ' or 1=1 #
2. 뒤에 형식 같게 맞추기
>> 'or 또는 union select 1로 주입
1번 방법이 된다면 뒤에 부분이 주석 처리되기 때문에 가장 쉽습니다.
하지만 이상하게도 #이 생략이 됩니다.
무조건 뒤에 형식에 맞춰서 '식'='식'의 구조를 만들어야 합니다.
따옴표 갯수가 홀수라면 SQL에 오류가 나버리기 때문에 짝수로 맞춰야 합니다.
형식을 같게 합니다.
페이로드:
페이로드를 만들었습니다.
주소창에 입력합니다.
크... 이게 되네요.
감격스럽습니다.