우리가 사용하는 웹 HTTP 프로토콜은 Connectionless와 Stateless하다. 즉, 하나의 요청에 하나의 응답만 하고(Connectionless) 상태를 계속 저장하지 못한다.(Stateless) 그래서 웹 서버는 수많은 클라이언트 등을 구별하기 위해 Cookie와 Session을 사용한다. 1. Cookie (쿠키) 쿠키는 Key와 Value로 이뤄진 일종의 단위로, 서버가 클라이언트에게 쿠키를 발급하면 클라이언트는 서버에 요청을 보낼 때 쿠키를 같이 전송한다. 예를 들어, 드림핵 서버에서 로그인을 해본 후 개발자도구로 확인하 cookie에 sessionid가 추가된 걸 볼 수 있다. 서버는 저 sessionid 쿠키 값을 기반으로 사용자를 인증할 것이다. 이 쿠키값을 그대로 복사해서 다른..
웹 해킹 문제를 풀다보면 preg_match 함수로 일부 키워드들을 필터링 한 문제들이 많이 보인다. preg_match("/admin|0x|#|hex|char|select/i",$_POST['phone']); '|'로 필터링하는 단어들을 구분하고 뒤에 i 옵션을 이용해 대소문자 구분을 하지 않는다. *정규식 참고하기 따로 알아낸 정규식들 정리 \d => 모든 숫자 \x20 => 스페이스 \& => 리터럴로 변환 즉, &문자 사용 불가능 preg_match("/or|union|admin|\||\&|\d|-|\\\\|\x09|\x0b|\x0c|\x0d|\x20|\//",$t) 이렇게 하면 %09같은거 못
이 글은 화이트 해커를 위한 웹 해킹의 기술_최봉환 책의 내용을 바탕으로 작성하였습니다. 칼리 리눅스에는 여러가지 해킹 툴이 마련되어있는데 책에서 배운 내용을 바탕으로 가상 웹을 해킹해보려 한다. 가상 웹은 https://pentesterlab.com/exercies/from_sqli_to_shell 에서 다운 받은 파일로 실습했다. 먼저 웹 해킹의 첫번째 단계는 정보 획득이다. nikto명령어를 통해 웹사이트의 정보를 가져왔다. 여러 디렉토리 및 버전 등의 정보들이 나타난다. 그리고 웹 사이트 곳곳을 확인하기 위해 버프 스위트의 target기능을 활용해줬다. 웹 사이트의 여러 페이지를 볼 수 있는데 이 중 /cat.php?id=1인 곳을 먼저 확인해줬다. 1. sql injection & XSS sql..
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-- 이렇게 -- 주석 뒤에 띄어쓰기를 한 칸 해주면 오류가 나지않는다. 결론 : --주석 뒤에 띄어쓰기 한칸을 해주자.