#WarGame/Lord of SQLInjection

Lord of SQLInjection 1번 gremlin

Y0u_4re_s0_5weet 2021. 8. 6. 17:06
반응형

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가 나오므로 결과는 참.

 

 

 

반응형