반응형
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 |