일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- bugcamp
- 해킹존
- hackingzone
- #DVWA #XSS #Stored XSS #웹해킹 #모의해킹
- #DVWA #CSRF #웹해킹 #모의해킹
- #webhacking #모의해킹 #웹해킹
- bugbounty
- zerowhale
- 버그바운티
- #bWAPP #모의해킹 #웹해킹
- 삼성SDS
- Today
- Total
AIAS
[bWAPP] Insecure DOR - Order Tickets (Level - Low, Medium) 본문
Inscrue DOR? (DOR, Direct Object References)
직접 객체 참조(DOR)은 URL, 쿼리, 변수 등과 같은 객체의 파라미터 값을 공격자가 직접 참조하여 변조하는 것으로 서버 단에서 변조된 값에 대한 적절한 무결성 검증이 이루어 지지 않을 경우 권한 상승, 계정 탈취, 금액 변조가 가능하다.
모의해커 입장에서 DOR은 공격 대상과 범위가 넓기에 달성하고자 하는 목표에 공격 대상을 선정해야 한다. 권한 상승과 계정 탈취가 목적이라면 식별값 역할을 하는 account ID, Permit 등과 같은 계정 또는 권한의 식별 값을 변조 시도하고 금액 변조가 목적이라면 Price, Value 등과 같은 파라미터 값을 변조하여 취약점 존재 유무를 파악한다.
실습환경
- bWAPP (buggy Web APPlication)
: OWASP 취약점이 주로 반영된 모의해킹 실습 환경
Insecure DOR - Order Tickets (Level - Low)
Low레벨의 경우의 hidden값으로 ticket_price 값이 화면상으로 노출되지 않도록 설정하고 있으며, 티켓의 가격은 $ticket_price 변수에서 설정한 가격(15 EUR)을 불러오고 있다.
값을 변조하기 위해서는 여러가지 방법이 있다. 우선 type이 hidden 설정되 숨겨진 값을 txt로 변경주어 화면 상에서 출력해주고 해당 값을 변경해주는 방법이 있고, 개발자 도구에서 직접 value 값을 변경해주는 방법이 있다. 또는 Request로 전달되는 파라미터 값을 프록시 툴을 통해서 변조해주는 방법으로 일반적으로 가장 많이 사용된다.
PHP 소스에서 15로 설정되어있는 최종 주문 가격이 1로 변조되어 화면에 출력된 모습
Insecure DOR - Order Tickets (Level - Medium)
Medium 레벨의 경우 Low레벨에 있었던 ticket_price의 value 값을 Request 받지 않는다. 하지만 사용자 단에서 요청해온 ticket_price 값이 있는지 확인하는 isset 구문이 존재하고 요청된 값이 있을 시 해당 값을 $ticket_price 값으로 반영해주고 있기에 가격이 변조될 위협이 있다.
개발자 도구로 소스를 확인해 보면 ticket_price가 사라지고 [Confirm] 버튼 클릭 후 Request할때도 해당 값을 전달하지 않는 것을 확인할 수 있다.
하지만 소스코드 상에서 사용자의 ticket_price 값이 Request되면 $ticket_price변수에 반영해주기 때문에 주문정보 요청 시에 티켓 가격을 임의로 생성하여 전달해주었다.
// 실제 모의해킹 수행 시에는 가격정보에 해당하는 변수 정보를 수집, 유추하기 어려우나, 이행점검 시에는 이미 변수 값을 알기에 많이 시도하는 방식임
: ticket_quantity=1&action=oder&ticket_price=1
공격자가 임의로 추가한 ticket_price 값이 변수에 반영되어 가격이 변조됨을 확인
Insecure DOR - Order Tickets (Level - High)
High 레벨의 경우 앞단에 IF로 존재했던 취약한 구문을 전부 통하지 않기에 취약점이 존재하지 않으며, 그냥 앞단에 설정된 $ticket_price 가격과 주문 수를 곱해서 출력해주고 있음
//PHP의 abs 구문은 입력된 숫자의 절대값을 반영해주기 때문에 숫자 아닌 값이 입력되면 0을 반환되어 XSS와 같은 공격 코드 입력이 불가
대응방안
High레벨의 PHP 코드처럼 고정 가격 값을 변수로 앞단에서 설정하고 해당 변수 값을 주문수랑 곱해주는 방식이 보안적으로는 이상적이만 현실적으로는 쇼핑몰과 같은 곳에서 유동적이거나 상품이 많을 경우에는 모든 상품에 대해서 코드 넣어줄 수 가 없다.
그렇기에 DB에 있는 제품과 가격정보를 확인하여 사용자가 요청한 가격정보가 중간에 변조되지 않았는지 무결성을 체크한 후 처리해주어야한다.
'WEB > bWAPP' 카테고리의 다른 글
[bWAPP] Session Mgmt - Admin Portal (Level - Low, Medium) (0) | 2020.12.04 |
---|---|
[bWAPP] PHP Injection (Level - Low) (0) | 2020.12.04 |
[bWAPP] HTML Injection - Current URL (Level - Low) (0) | 2020.12.03 |
[bWAPP] HTML Injection (Level - Low, Medium) (0) | 2020.12.03 |