안녕하세요
베비온입니다.
포스팅을 위해 여러번 SQL Injection을 실습 해봤는데 잘 안되서 머리가 터질거같네요
가장 먼저 login 페이지를 우회하여 들어가보도록 하겠습니다.
정상적인 로그인입니다.
정상적으로 한 로그인이 완료된 것을 볼 수 있습니다.
이번엔 root를 우회해서 들어가보겠습니다.
1.주석처리
ID 에 root' -- ' 를 적었습니다.
패스워드를 입력 안해도 제대로 작동된 모습입니다.
--는 mysql에서 한줄 주석 구문입니다. 즉 --뒤에 나오는 것들은 다 주석처리되어
실질적으로 처리가 안되게 하는 공격입니다.
root' -- '를 입력함으로써 로그인하는 sql 쿼리문은
$sql=select logid,email from member where logid='root' -- '' && logpw='';
*위에 나온 ' 들은 모두 작은따옴표 입니다.
주의 하셔야 하는건 -- 뒤에 띄어쓰기를 한개 넣어주셔야 합니다.
의미는 id가 root이면 통과.(패스워드는 주석처리가 되었기 때문에 비교를 하지 않음)
2. blind SQL Injection사용
이번엔 ID는 root 정상적으로,
PW는 ' or '1'='1
을 삽입하여 로그인 시켰습니다.
쿼리를 살펴보면
select logid,email from member where logid='root' && logpw='' or '1'='1' 가 됩니다.
붉은 부분이 입력 부분입니다.
''와 1=1 둘 중 한개만 참이어도 login이 되는 것을 확인 하실 수 있습니다.
부계정인 asdf로도 해보겠습니다.
1.주석사용
로그인이 asdf로 된 것을 보실 수 있습니다.
이번엔 ID에 asdf' --
를 입력했습니다. 마지막에 띄어쓰기 한개가 들어가있습니다.
pw는 아무거나 입력해주시면 됩니다
쿼리는
select logid,email from member where logid='asdf' -- logpw=''
입니다.
-- 뒤에를 전부 주석처리합니다.
2. Blind SQL Injection
ID는 asdf
PW=' or '1'='1
을 넣었습니다.
근데 이상한 점이 한개 있지요??
root로 로그인 된 것을 보실 수 있습니다.
?!?!
이유를 설명해 드리겠습니다.
쿼리를 먼저 보시면
select logid, email from member where logid='asdf' && logpw='' or '1'='1'
이 됩니다.
조건이 총 세개가 있습니다.
연산자는 총 두개로 and와 or가 있습니다
뒤에서 or '1'='1'로 참을 만들어 주어서 저 전제 자체가 모두 참이 되어버렸습니다.
따라서 첫번째로 나온 root로 로그인이 되어버렸습니다.
이걸 이용해볼까요??
ID는 asdf
PW는 ' or 1=1 and idx='2
를 써서 idx가 두번째인 second에 들어왔습니다.사용하기 위해선 필드명을 알아야합니다.
쿼리는
select logid, email from member where logid='asdf' && logpw='' or 1=1 and idx='2'
가 됐습니다.
차례대로 비교하는 sql이 세번째 1=1까지했을땐 참이 나왔고 그중 idx=2인 것만(and) 를 했습니다.
sql로 한 번 볼까요?
이번엔 반대로 1=1을 제일 마지막에 넣는다면..?
마지막 or 1=1로 인해서 결과가 참이 나오고 그로 인해 전체값이 나왔습니다.
이렇게 해서 로그인 페이지를 우회했습니다.
실습하면서 많은 것을 배웠네요 ㅎㅎ 포스팅을 보시는 분들에게 도움이 됐으면 좋겠네요
'Hacking > SQL Injection' 카테고리의 다른 글
4. 게시판의 컬럼 갯수 알아내기 (0) | 2017.04.27 |
---|---|
2.SQL Injection의 종류 (0) | 2017.04.24 |
1. SQL Injection이란? (0) | 2017.04.24 |