본문 바로가기
웹 해킹

웹 해킹 13

by 윤라경 2024. 8. 2.

[2024.08.01]

 

[XSS Stored]

> Sercurity Level: Medium

 

<Name>

> 대소문자 우회 가능

> 문자 겹치기

 

<scr<script>ipt>alert('XSS')</script>

<s<script>cript>alert('XSS')</script>

<scr<script>ipt>alert(document.cookie)</script>

 

<button onclick="alert('XSS')">클릭</button>

<div onmouseover="alert('Hacked')">마우스 올리기</div>

<div onmouseover="alert('Hacked')">쿠키 정보 탈취</div>

 

<img src=x onerror=alert('XSS')>

<img src=x onerror=alert(document.cookie)>

<img src=abc.jpg onerror=alert(document.cookie)>

<img src/onerror=alert('XSS')>

<img src/onerror=alert(document.cookie)>

<body onload=alert('XSS')>

 

<p draggable="true" ondrag="alert(document.cookie)" style=display:block>xss</p>

 

<Message>

- 제목이 취약점이며, 본문으로는 가능한 게 없다

 

> Security Level: high

- 제목과 본문 모두 가능한 것이 없다

 

 

 

오늘도 XSS Stored 마무리를 짓기 위해 실습을 시작해 본다

지난 시간에는 low 레벨로 진행했기 때문에 오늘은 레벨을 medium으로 설정한다

 

 

기존의 script 명령어를 통하여 진행 시에는 모두 정상적으로 실행된다

 

 

script 명령어지만 문자 겹치기를 이용하여 실행할 수 있다

 

 

실행 시 정상적으로 해당 화면이 나타나게 된다

 

 

문자 겹치기에서 단어 수를 줄인 다음 시도하게 되면

 

 

이 방법의 경우도 마찬가지로 성공하게 된다

 

 

XSS가 아닌 document.cookie 실행 시에도 문제없이 작동된다

 

 

이전에 내가 찾아서 성공했던 것으로 추가 연습을 진행했다

 

 

화면에 창이 바로 뜨는 건 아니지만,

하단에 click이라는 문구와 기록이 생성된다

 

 

확인되었을 때 click을 누르게 되면 바로 해당 화면과 같이 나오면서 실행된다 

 

 

onmouseover의 경우에도 이렇게 기록이 남게 되는데

 

 

그 기록에 마우스를 가져다 대기만 해도 해당 화면이 나타나며 성공하게 된다

 

 

mouseover로 document.cookie도 진행

 

 

본문을 같은 내용으로 하여 헷갈릴 수도 있지만 맨아래에 있는 것이 document.cookie이다

 

 

다른 결과와 마찬가지로 마우스를 가져다 대기만 해도

해당 화면과 같이 나온다면 정상 작동 중인 걸 알 수 있다

 

 

이전 실습에서 여러 번 연습했던 img의 경우에도 문제없이 실행된다

 

 

이번에는 draggable을 이용하여 드래그 시에 화면이 나오는 구조를 진행해 본다

 

 

명령어를 입력하고 기록이 나왔을 때 xss 부분에 드래그를 시도하면,

시도하자마자 바로 결과값이 출력된다

 

 

이번에는 본문과 제목의 순서를 바꿔 진행하였지만 성공하지 못했다

이로써 현재 제목 필드와 본문 필드에 대해 각기 다른 수준의 보안이 적용된 것을 확인할 수 있다

 

 

XSS Stored의 마지막을 high 레벨로 마무리한다

 

 

하지만 high 레벨의 경우 보안 레벨이 높을수록 입력 값에 대한 검증 및 필터링이 더 철저하게 이루어져,

XSS와 같은 공격이 성공하지 못하도록 방어되기 때문에 성공할 확률이 적다

 

 

[SQL Injection]

 

<절차>

 

> 취약점 확인

> 컬럼 갯수 확인

> 기본 정보 확인

> 모든 데이터베이스 출력(1)

> 모든 테이블 확인(2)

> 모든 필드 확인(3)

 

*괄호 안의 숫자는 진행하는 순서

 

-----------------------------------------------------

 

> 오류 발생(syntax error)

> ' or '1'

 

> ' or '1' #

> ' or '1' = '1' #

> ' or '0' = '0' #

> ' or'1' or '#

 

#: 주석 처리

 

*syntax 오류가 나타나는 건 해당 구문을 이어서 이용할 방법이 있다는 뜻이며,

완전한 오류가 나타날 시에는 출력이 되지 않는 원래의 페이지 상태로 돌아오게 된다

 

 

 

SQL Injection 실행하기에 앞서 해당 페이지의 소스를 확인해 본다

low level 확인 시 알 수 있는 것은 id를 알아내야지만

찾아낼 수 있으므로 $id가 제일 중요하다는 점이다

 

 

 

현재 이것들은 쿼리가 존재하기 때문에 화면에 나타나게 되며,

현재는 5까지의 쿼리문이 존재한다는 뜻이다

 

 

'or'1'을 실행했을 때

 

 

이런 식으로 오류가 발생하게 되는데,

쿼리문이 존재하긴 하지만 맞지 않아 발생하는 오류라고 볼 수 있다

 

 

입력값이 출력이 되지만, 정상적인 쿼리가 아니기 때문에 다른 이름으로 나타날 수 있다

 

 

' or '1'을 하면 syntax error가 발생하지만 #을 붙이게 되면 출력이 가능해진다

 

 

0과 0도 참이기 때문에 출력이 가능하다

 

 

실제로 읽어들이는 건 # 전까지만 읽어들이게 된다

 

================================================

 

[SQL 질의문]

 

> select *[필드1, 필드2, 필드 3...]

> from [테이블명]

> where [조건]

 

> group by [필드명]

> having [조건]

> order by [필드명]

 

'abc' or '1' #

 

*order by의 경우 group by와 having 생략 시에도 사용 가능하다

 

 

 

union 사용 시에도

 

 

해당 오류 페이지가 뜨게 된다

문장을 자세히 보면 columns 넘버가 다르다고 뜨는데,

이때 본인이 columns 넘버를 모른다면

 

 

그 자리에 null을 넣을 수도 있다

null을 넣어 user table을 확인하게 되면 출력이 가능하다

 

 

버전의 경우도 null을 넣어 출력이 가능하다

 

오늘은 SQL Injection의 경우 먼저 오류를 발생시키고 구문을 찾아내고자 하는 실습을 진행했다

 

 

 

강의 소감

XSS Stored까지도 이해가 가능했는데,

이번 시간에 배운 SQL 구문의 경우가 낯설게 다가왔다

평소에 자주 사용하던 것이 아니기 때문에 구문 자체를 이해하는 것도 쉽지 않았다

해당 SQL 구문의 경우 많은 검색을 통하여 이해하고 많은 실습을 통해

완벽하게 하기보다 이해하려는 노력을 더 많이 들여야겠다

'웹 해킹' 카테고리의 다른 글

웹 해킹 15  (0) 2024.08.06
웹 해킹 14  (0) 2024.08.03
웹 해킹 12  (0) 2024.07.31
웹 해킹 11  (0) 2024.07.30
웹 해킹 10  (0) 2024.07.26