Web Hacking

sql injection이 발생하는 주 이유는 사용자가 입력한 값을 쿼리에 그대로 대입시키기 때문이다. 그 예방책으로 쿼리문을 파라미터 쿼리로 변경하는 방법이 있다. 다음은 DVWA에서 가져온 예제 코드이다. if(is_numeric($id)) 괄호 안에 내용을 보면 prepare(), bindParam(), execute()를 각각 호출해 쿼리문을 실행하고 있다. 특히 prepare함수에 쿼리문이 담겨있는데 이를 prepared statement라고 한다. 쿼리문을 prepare함수로 준비상태로 대기시켜 놨다가 bindparam으로 id값을 바인딩한다. 그 후 execute함수로 실행시키는데 준비상태로 들어간 쿼리는 실행 전에 권한이 부여되지 않다가 실행 시킬때 권한이 확인되는 특징이 있다. 여기선 짧..
보호되어 있는 글입니다.
보통 sql injection을 사용할 때 '--' 주석을 많이들 사용한다. 예를들어 SELECT * FROM users WHERE uid='{uid}' 이런 sql 구문이 있다 그러면 uid에 ' or 1=1 -- 등을 입력 하면은 injection이 되겠지만 필자가 처음 저렇게 했을 때 오류가 나서 많이 당황했었다. 답은 띄어쓰기에 있다 ' or 1=1--이렇게 사용하면 오류가 나지만 ' or 1=1-- 이렇게 -- 주석 뒤에 띄어쓰기를 한 칸 해주면 오류가 나지않는다. 결론 : --주석 뒤에 띄어쓰기 한칸을 해주자.
blind sql은 비밀번호를 하나하나씩 알아내어 완전한 비밀번호를 찾는 sql injection 기법이다. 예를 들어 admin의 계정이 다음과 같다고 하자. username : admin password : P@ssword 그러면 평범한 blind sql injection은 다음과 같이 할 수 있다. Select * from users where username="admin" and substr(password, 1, 1)="P"; admin계정의 비밀번호 첫자리가 P이니깐 admin계정 정보가 출력될것이다. 반대로 P가 아닌 다른 문자면은 출력이 안될것이다. 이걸 이용해서 첫자리부터 끝자리까지 대입해서 확인하면 full password를 확인할 수 있다. 하지만 이걸 다 대입하기엔 문자에 숫자에 너..
보호되어 있는 글입니다.
프레딕
'Web Hacking' 카테고리의 글 목록 (21 Page)