본문 바로가기

공부/해킹 과제21

XSS 정리 1. XSS(Cross-Site Stripting)이란 클라이언트 측 스크립트(코드)를 삽입해서 클라이언트의 브라우저에서 실행되게 만드는 공격 2. 공격 유형 Stored XSS 서버에 스크립트를 저장하는 방식 광역으로 시전이 가능하지만, 특정인을 지정해서 공격할 수 없고 서버에 기록이 남는다 Reflected XSS 서버에 스크립트를 저장하지 않는 방식 서버에서 반사시킨 값을 이용하는 공격 URL에 링크를 담아서 보내는 방식(GET방식을 사용, POST 사용불가) DOM Based XSS DOM: Document Object Model 임의의 Document 객체를 삽입하여 실행시키는 공격이다. 3. 공격 방법 1) 값을 입력했을 때 그 값이 나오는지 확인 2) HTML 특수문자 필터링 여부 확인 2023. 5. 19.
XSS 2 지난번엔 Stored XSS를 정리했다. Stored XSS는 서버에 스크립트를 저장하는 방식이므로 광역으로 시전 할 수 있다. 단점으로는 공격대상을 지정할 수 없고, 기록과 흔적이 남는다는 것이다. 그렇다면 스크립트를 서버에 저장하는 것이 아닌 값을 다시 받아오는 방법은 어떨까 이러한 방법으로 reflected XSS가 있다. 1) Reflected XSS reflected XSS는 말 그대로 반사시킨다. 입력값을 받으면 그것을 다시 출력시켜준다. 대표적으로는 검색창, 아이디 중복 검사가 있다. 게시글을 검색하면 '@@@@'에 대한 검색결과 이런 식으로 값을 다시 받아온다. 아이디 중복 검사를 하면 '@@@'은 사용가능한 아이디입니다.라고 값을 다시 받아온다. reflected XSS는 이용자의 요청에.. 2023. 5. 13.
XSS 1 xss는 취약점이 정말 많다. 다른 취약점이 안 보인다면 이 친구를 찾으면 된다. Server Side script VS Client Side script Server Side script는 서버에서 실행되는 코드이다. ex) PHP, JSP, ASP 등 Client Side script는 클라이언트(웹 브라우저) 측에서 실행되는 코드이다. ex) HTML, Javascript, css 등 xss는 클라이언트 측 스크립트를 삽입하는 공격이다. -> 피해자 컴퓨터(웹 브라우저)에서 실행되게 만드는 공격 서버에는 영향이 없고 이용자를 공격하게 된다. (1) 서버에 저장: Stored xss 스크립트를 서버에 저장 시킨다. 게시판이나 사용자가 글을 쓸수 있는 곳엔 어디든 사용이 가능하다. 하지만 적용이 되는지.. 2023. 5. 5.
SQL Injection 정리 1. SQL Injection이란 임의의 SQL 질의문을 삽입해 실행하는 공격 2. 이용할 수 있는 시나리오 인증 우회, 데이터 추출, 변조 + DB에 SQL 질의문을 이용하여 web shell을 업로드하여 공격을 할 수 있다. 3. 공격 유형 Union SQL Injection 컬럼 개수 Error Based SQL Injection 논리 에러 Blind SQL Injection 참과 거짓 조건 4. 대응 방안 Prepared Statement order by, Table 이름, Column 이름에는 Prepared Statement를 적용시킬 수 없다. 따라서 이부분에서는 White List 기반 필터링을 적용시켜준다. Black list 기반 필터링은 우회의 여지가 있으므로 White List 기반.. 2023. 5. 5.
SQL Injection 대응 방안 이전에는 Union SQL Injection Error Based SQL Injection Blind SQL Injection 을 정리했다 SQL Injection은 공격자가 SQL 질의문을 삽입하는 공격이다. Injection이 발생하는 이유는 뭘까 SQL 질의문에 사용자의 입력이 그대로 들어가기 때문에 발생한다. 그러면 or, and 이런 것들을 필터링하면 어떨까? 어느 정도는 막을 수 있지만 사용자 이름에 or, and가 있으면 사용자가 이용을 하는데 불편함이 생긴다. 그래서 필터링은 소극적인 대응방안이자 최후의 수단으로 놔둬야 한다. 대응 방안으로는 PreparedStatement 처리하면 된다. Prepard Statement처리를 하면 우회고 뭐고 Injection이 전부 막히게 된다. 하지만.. 2023. 4. 29.
Blind SQL Injection Blind SQL Injection이란 SQL 질의문의 참과 거짓의 조건으로 데이터를 추출하는 기법이다. DB결과가 화면에 안 나오고 에러메시지가 나오지 않는 경우는 Blind SQL Injection을 사용한다. (Union과 Error이 사용불가능할 때 사용하자) 참과 거짓 조건에 따라 응답이 다른 곳에서 사용할 수 있다.(어떻게든 다르면 가능하다) (1) SQL Injection 확인 ID 중복 검사를 하면 like가 아닌 is를 사용할 거 같다. name is '____' 일거 같다. normaltic은 성공했고 norm은 실패, mal도 실패, tic도 실패했다. 그래서 like는 사용하지 않을 거라는 게 맞고 is를 사용했다는 걸 알 수 있다. normaltic' and '1' = '1을 입력.. 2023. 4. 28.
Error Based SQL Injection 이전에는 Union SQL Injection을 알아봤다. 이번에는 에러메시지가 나오는 경우를 알아볼 것이다. SQL 에러메시지가 나오면 편해진다. 그 이유는 어떤 DB를 쓰는지 알 수 있고, SQL문이 출력돼서 추측을 안 할 수도 있기 때문이다. (1) 추측 그래도 일단 시작을 추측이다. select ?????? from ????? where id = '@@@@@' 이런 식의 SQL문이 있을 거라고 생각을 해보자. (2) DB에러인지 확인 DB 에러가 있는지 확인하기 위해서 '를 넣어보자 이로써 알 수 있는 것은 Mysql을 사용하고 있고 우리는 Error Based SQL Injection을 사용할 수 있다는 것이다. (3) Error Based SQL Injection 문법 에러, 논리 에러 중에서 .. 2023. 4. 21.
Union SQL Injection SQL Injection을 사용하면 데이터를 추출할 수 있다. 여러 가지 케이스가 있고 SQL 질의문이 화면에 보이는 경우와 보이지 않는 경우가 있는데 지금은 보이는 경우이다. 이 경우에는 Union을 이용하면 select문을 2개를 연결해서 SQL 질의문을 만들어 낼 수가 있다. Union을 사용할 때는 앞에 있는 select문과 뒤에 있는 select문의 컬럼 개수를 맞춰야 하고 각 위치에 맞는 컬럼 타입을 사용해야 한다. (1) 추리 가장 먼저 서버에서 어떤 SQL 질의문을 사용하는지 추측을 해봐야 한다. select ???? from ???? where name is '@@@@' 이런 질의문이 있을 거라고 가정을 해보자 사이트에서 overwatch를 검색해 보고 over, watch, erwat를.. 2023. 4. 21.
로그인 CASE 로그인 CASE 1) 식별과 인증 동시 DB에 ID와 PW가 모두 일치하는 행이 있으면 로그인에 성공하고, 틀리면 로그인에 실패한다. 2) 식별과 인증 분리 DB에서 ID를 식별하고 PW입력값을 확인해서 일치하면 로그인 성공하고, 틀리면 로그인에 실패한다. 3) 식별과 인증 동시 + hash 1번의 방법에서 PW를 해시함수로 처리하는 방법이다. 4) 식별과 인증 분리 + hash 2번의 방법에서 PW를 해시함수로 처리하는 방법이다. 5) 식별과 인증 동시 + 개행 1번의 과정에서 Enter가 들어가 있는 경우이다. 개행이 들어가면 주석처리를 해놔도 주석은 해당줄만 처리를 하므로 다음줄은 실행이 돼서 의미가 없어진다. CASE별 인증 우회 1) 식별과 인증 동시 SELECT * FROM user WHERE.. 2023. 4. 18.