본문 바로가기

#WarGame/Lord of SQLInjection

Lord of SQLInjection 1번 gremlin

반응형

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

 

Lord of SQLInjection 1번 gremlin

 

 

 

  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");


preg_match 함수 : php에서 정규표현식 패턴이 일치하는지 검색하여 반환하는 함수
                         첫번째 인수= 필터링, 두번째 인수= 검색 대상 문자열

 

id와 pw 둘다 같은 조건으로 필터링이 되어있다.

필터링 => prob  _  .  ()

 

싱글쿼터(') =와 더블쿼터("), 그리고 주석(#)이 필터링 되어 있지 않기 때문에 이걸로 문제를 해결할 수 있다.

 

 

id와 pw를 무조건 참으로 만들면 된다.

1) 첫번째 방법

 

 

  • ?id=%27or%201=1%23
  • or문은 하나라도 참이면 무조건 참이다.
  • id=''으로 따옴표를 알맞게 닫고 뒤에 or 1=1을 붙이면 false or true가 된다.
  • 1=1은 무조건 참이기 때문이다.
  • 결론적으로 id는 참이 된다.
  • 그 뒤에 주석(#)과 또다른 따옴표로 닫아주면 pw는 결국 주석처리가 되어 값을 읽지 못하게 된다.
  • url입력할 때는 주석(#)은 %23, 싱글쿼터(')는 %27로 입력한다.

 

 

 

2) 두번째 방법

  • ?id=admin&%20pw=%27or%20%271%27=%271
  • 위와 같은 방식으로 id에는 admin을 넣어주고 pw는 따옴표를 알맞게 닫은 후 or '1'='1을 적어 준다.
  • id는 admin이 맞는지 모르니까 false, pw에는 false or true가 들어가게 된다.
  • 연산 우선순위는 and가 먼저 시작하니까 false and false는 false
  • 그 다음 false or true를 연산하면 결국 true가 나오므로 결과는 참.

 

 

 

반응형

'#WarGame > Lord of SQLInjection' 카테고리의 다른 글

Lord of SQLInjection 6번 darkelf  (0) 2021.08.06
Lord of SQLInjection 5번 wolfman  (0) 2021.08.06
Lord of SQLInjection 4번 orc  (0) 2021.08.06
Lord of SQLInjection 3번 goblin  (0) 2021.08.06
Lord of SQLInjection 2번 cobolt  (0) 2021.08.06