목록hacking study/SQL Injection (7)
wonder
처음에 나오는 페이지가 php코드여서 LOS 로그인페이지에서 sql문 주입을 하라는건지 어떻게 하라는건지 헷갈렸습니다. 답답한 마음에 공략을 볼까 생각도 했지만, 이것 또한 임무 중에 하나다 라는 마인드로 코드 보는 것부터 시작했습니다. 알고있는 SQL 코드와 다른 생소한 부분이 있기 때문에 같은 기능이지만 다르게 코딩한 것을 이해할 줄 알아야합니다. 모르는 생소한 부분을 검색을 통해 찾아봅니다. 몰랐던 부분 '/prob|_|\.|\(\)/i' : '//'와 마찬가지로 '//i' 도 포함된 기호를 찾는 기능입니다. prob _ . ( ) 이 기호들이 들어가 있다면 실행시키지 않고 no hack 을 띄웁니다. {} : 쿼리 실행할 떄는 제외되서 나오는 부분입니다. @ : 에러를 띄우지 않고 실행합니다. h..
Blind Based Injection Blind based Injection은 SQL Injection이 가능한 모든 곳에서 사용 가능합니다. 화면에 출력이 안되서 Union/Error based injection 둘다 못 쓸때 사용합니다. 하지만 수작업으로는 오래 걸린다는 단점이 있습니다. 그래서 자동화화는 능력, 프로그래밍 능력이 필요합니다. 값이 화면에 출력이 안되서 확인을 못하면 어떤 방법을 사용할 수 있을까요? 값이 화면에 한글자라도 출력이 되면 좋을텐데.. 안그러니까 참/거짓으로 따지면 됩니다. 참일때는 페이지가 로그인 성공이 뜨겠고 거짓이면 로그인 실패가 뜨겠습니다. 생각보다 DB의 참/거짓이 들어가는 기능과 기능에 대한 취약점이 있는 페이지가 많기 때문에 blind injection이 실..
union select란 쉽게 말해 select문을 한번 더 쓸 수 있게 해주는 존재입니다. 두개의 쿼리를 합쳐줍니다. 합치긴 합치는데 어떻게 결과가 나오나? 원래는 select id from table union select idx from table2 라면 idx 칼럼명은 없어지고 데이터만 id 밑에 들어오게 됩니다. SELECT id FROM table1 union select 4; 이런식으로 임의의 숫자 또는 문자를 넣었을 때 테이블에 저장되어 있지 않아도 결과로 뜹니다. 하지만 union select를 사용하려면 조건은 항상 열 개수를 맞춰줘야 합니다. 열 개수를 맞춰 준다면 이렇게 각 열마다 추가가 됩니다. select uid,pwd,name,memo from board union select..
1. 식별&인증 동시 2. 식별&인증 분리 3. 동시 (+해시암호화) 4. 분리 (+해시암호화) 5. 동시 (개행) 4. 식별&인증 분리 (+해시암호화) 2. 식별&인증 분리 와 겹치는 부분이 많습니다. 일단 여기 까지는 2. 식별&인증 분리 와 같구요. 테스트로 결과값 $row를 print_r(또는 echo)로 출력시켜보면 데이터가 모두 나온걸 볼 수 있습니다. 오류가 있을 때 출력시켜보면 문제가 무엇인지 확인할 수 있습니다. $hashpwd 변수는 입력한 비밀번호 $pwd를 hash(SHA256버전)으로 바꿔줍니다. 참고로 hash(md5, $pwd) 도 가능합니다! $dbpwd 변수는 $row의 DB데이터에서 비밀번호만 가져온 것입니다. 즉 DB비밀번호입니다. SHA256 은 새로고침했을 때 다른값..
1. 식별&인증 동시 2. 식별&인증 분리 3. 동시 (+해시암호화) 4. 분리 (+해시암호화) 5. 동시 (개행) 암호화 방법 사실 암호화에 대해서 막히는 부분이 있어서 끙끙 앓았습니다. 암호화에는 어떤 방법이 있는지 먼저 이해해야 할 것 같습니다. 양방향 AES 키의 암호화>>복호화가 가능합니다. 키기 공개될 경우 원문을 해독할 수 있기 때문에 키의 보안은 필수입니다. 그래서 키를 알게되면 사실상 끝났다고 볼 수 있기 때문에 보안에 취약합니다. 단방향 (해시) md5: 128비트 해시입니다. 보안취약 개인정보 암호화에 사용하는 것은 권장하지 않습니다.주로 프로그램이나 파일이 원본과 같은지 확인하는 데에 쓰입니다. SHA-1:160비트 해시입니다. password('비밀번호') 로 사용했었던 건 sha..
로그인 구현 방식에는 1. 식별&인증 동시 2. 식별&인증 분리 3. 동시 (+해시암호화) 4. 분리 (+해시암호화) 5. 동시 (개행) 이 있다고 말씀드렸습니다. 제가 이전에 구현했던 방식으로는 PASSWORD(str) 암호화 방식이라서 1번째 방식으로 분류하겠습니다. 이 방법은 간단하지만 보안에 취약하기 때문에 복구를 못하도록 해시암호화가 꼭 필요합니다. 2. 식별&인증 분리 방법으로 구현해보겠습니다. 항상 세션이 활성화되어있어야 되기 때문에 lib.php에 session_start(); 적어줍니다. 그리고 $connect 로 MYSQL에 연결 되어있음을 변수로 지정했습니다. lib.php를 include 해주구요, 로그인에서 아이디와 패스워드를 포스트 방식으로 가져왔습니다. 패스워드와 함께 불러오는..