[해킹보안] 창과 방패 끝없는 전쟁

## 경고문 ##
제 블로그의 모든 글들은 해킹과 보안에 대한 학습용 글입니다.
해당 글을 보고 실제 홈페이지에 공격하는 것은 명백한 범죄행위임을 알려드리며,
절대로 실제 홈페이지에 공격하지 마시기 당부드립니다. 실제 공격한 부분에 대한 책임은
본인이 지셔야 하며, 블로그를 통해 공유한 블로거와는 무관함을 알려드립니다.

 

 

 

오늘은 크로스 사이트 스크립팅(XSS) 취약점 진단에 대해 실습을 해 보고, 취약점이 있는지 없는지 구분하는 방법에 대해서 알아보도록 하겠습니다.

 

먼저 XSS 취약점에 대해서 모르시는 뉴비 님들은 아래 개념을 한번 정독하고 오시면 학습에 도움이 될 듯 싶습니다.

 

* XSS 취약점이란?

https://noirstar.tistory.com/266

 

XSS(Cross-Site Scripting) 이란?

2. XSS (Cross-Site Scripting)  2.1 개요 Ÿ   XSS Attack  XSS(Cross-Site Scripting) 이란 웹 애플리케이션에서 일어나는 취약점으로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하..

noirstar.tistory.com

 

자! 위에 글을 읽고 오셨다면 XSS 취약점에 대한 어느정도의 개념을 아셨을 것으로 판단하고, 실습을 진행하도록 하겠습니다.

 

일단 XSS 취약점 실습을 하기 전에 프로시 툴을 설치하시기 바랍니다.

 

* burp suite proxy tool 무료 다운

https://portswigger.net/burp/communitydownload

 

Download Burp Suite Community Edition - PortSwigger

Burp Suite Community Edition is PortSwigger's essential manual toolkit for learning about web security testing. Free download.

portswigger.net

 

프록시 툴을 내려받은 후, 설치를 하셨다면 프록시 툴을 설정해 주세요.(아래 참조)

https://200301.tistory.com/7

 

[Burp Suite (버프스위트)] 설치 및 설정 방법

[Burp Suite] 설치 방법 오늘은 어제 "Suninatas(써니나타스) 4번 문제"에서 사용했던 [Burp Suite]에 대한 설치 방법에 대해 설명하고자 합니다. 아래의 링크는 어제 내가 풀었던 링크를 걸어놨습니다. http

200301.tistory.com

 

모두 설정을 해 주셨다면 이제 진짜로 XSS 취약점 진단을 해 봅시다.

 

XSS 취약점이 있는 사이트인 아쿠네틱스 테스트 홈페이지에 접속을 합니다.

 

http://testphp.vulnweb.com/search.php?test=query 

 

search

Warning: This is not a real shop. This is an example PHP application, which is intentionally vulnerable to web attacks. It is intended to help you test Acunetix. It also helps you understand how developer errors and bad configuration may let someone break

testphp.vulnweb.com

 

홈페이지 화면을 보면 입력값을 입력해 줄 수 있는 검색 창이 있는 걸 확인하셨겠지요?

이제 XSS 취약점이 있는지 확인하기 위해 스크립트 기본 구문( <s c r i p t>a l e r t(0) </s c r i p t>)을 검색 창에 삽입해 줍니다.

 

그리고 프록시 툴로 인터셉터를 ON으로 설정한 후에 홈페이지 입력 창 (go)를 클릭해 줍니다.

이때 주의해야 할 점은 burp suit툴의 기능 중, Forward를 한번씩 클릭해 주면서 내가 공격하려는 사이트가 (1번표시) 맞는지 확인하고 검색 창이(2번 표시) 맞는지도 확인을 해 줘야 한다는 것입니다. 1번2번이 맞다고 확인되면 우클릭해서 Send to Repeater를 클릭해 줍니다.

 

 

그리고 Repeater 폼으로 가면 검색 창의 패킷이 이동된 것이 확인 되었을 것입니다. 2번 표시된 Send를 클릭해 줍니다. 그러면 우측 Response(응답) 값에 내가 검색 창에 입력했던 <s c ript>a lert(0)</s c ript> 스크립트 구문을 볼 수 있습니다. 자세히 보시면 취약점에 대한 치환이 안 되어 있는 것을 확인하실 수 있을 것입니다. (취약점에 대한 방어 코딩이 되어 있다면 &gt, &lt 등으로 되어 있을 것입니다.)

프록시 툴 인터셉터를 계속 클릭한 수, 홈페이지를 보게 되면 아래와 같이 팝업 창이 뜨면서 숫자 0이 찍히는 모습을 볼 수 있을 것입니다. 이렇게 나온다면 XSS 취약점이 있다는 것으로 판단하셔도 됩니다.

 

 

 

이제 XSS 취약점에 대한 시큐어코딩을 통한 방어를 한 화면을 보여 드리도록 하겠습니다.

아래 사이트는 네이버 버그바운티에 나와 있는 검색 폼입니다.(아무 사이트에 공격하면 절대 아니되구요, 버그바운티에서 공격하라는 사이트만 공격해서 취약점을 찾으셔야 합니다. 그리고 주의사항도 꼼꼼히 읽으시길 바랍니다.)

 

일단, 검색 폼에 XSS 스크립트 기본 구문을 삽입했습니다.

그리고 프록시 툴로 인터셉터 한 상태에서, 검색 폼의 돋보기 모양을 클릭 합니다.

그리고 Send to Repeater를 클릭해서 Repeater 폼으로 이동합니다.

 

리피터 폼으로 가서, Send를 클릭한 후 Response(응답)값을 확인 하겠습니다. 우측 맨 하단에 보면 문자를 찾을 수 있는 찾기 기능이 있습니다. alert(0)으로 찾으면 노란색으로 문자를 찾을 수 있습니다. 그런데 위에 아쿠네틱스 사이트에서 보던 화면과 다르지요? &lt(<), &gt(>) 라고 치환된 문자들을 보실 수 있을겁니다. 만약 이런 치환 구문이 있다면 해당 검색 폼은 취약점이 없다고 판단하셔도 무방합니다. 더 진행하셔도 되겠지만, 저라면 다른 취약점을 찾는데 시간을 할애할 것 같아요 ㅎㅎㅎ(진단 시간이 많지 않기 때문에...)

* XSS 문자열 치환 시큐어코딩

 

https://diqmwl-programming.tistory.com/84

 

[시큐어 코딩] #3 크로스 사이트 스크립트 / XSS

1. 크로스 사이트 스크립트란? 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도할 수 있다. 다음 그림과 같이 악성 스크립트를 서버측에 저장하면 다른사용자는 악성스크

diqmwl-programming.tistory.com

 

자!!! 이 정도만 아셔도 웹 어플리케이션 취약점을 찾는데는 어려움이 없으실겁니다.

 

그럼. 다음 시간에 또 만나요~ 안녕~:)

이번 문제는 Jailbreak Test3 문제를 풀어 보았다.

 

일단 아이폰 내 설치 된 응용 프로그램 중, Jailbreak Test3 탭을 누르면 아래와 같은 팝업 창이 뜬다.

 

우선 응용 프로그램에서 어떤 기능이 사용되는지 확인하기 위해서 아래와 같은 명령을 사용하여 추적을 시작했다.

 

frida-trace -U -i "*jail*" DVIA-v2 명령을 실행 , 응용프로그램 jailbreak test3 탭을 누름

 

그러면 버튼을 클릭할 함수를 호출한다. 그래서 Jailbreak Test3 버튼을 클릭 _T07DVIA_v232... Jailbreak Test1TappedypF 호출된다.

 

이제 함수가 진행되는 것을 확인하고 BL(분기 링크) 명령으로 다른 함수를 호출했다. 이것은 기본적으로 JMP명령과 동일하다.

 

호출되는 명령은 아래와 같다.

 

이제 frida 사용해서 Script 작성하고 hooking하려는 명령이 실제로 호출되고 있는지 확인했다.

checkmeminuse.js 스크립트

 

 

응용 프로그램에 대해 대상 모듈을 변경해야 했다. 모듈베이스는 정적이며 frida 자동으로 오프셋을 계산한다.

 

frida -U -l checkmeminuse.js DVIA-v2 명령을 실행 시킨 , Jailbreak Test 3탭을 누르면 메모리 주소가 사용 중이라는 것을 있었다. (아이폰 화면에 Jailbreak Test3 버튼을 눌러도 동작하지 않음)

 

이제 x8 레지스터에 로드되는 값이 무엇인지 알기 위해 아래와 같이 스크립트를 짰다.

Hook3-1

 

 

이는 주소를 출력하는 함수의 변경과 x0 레지스터 내에서 반환되는 값과 동일하다.

 

아래 frida 명령으로 후킹을 했다.

 

frida -U -l hook3-1.js DVIA-v2

이제 응용 프로그램 내에서 실행할 있다. 그리고 주소값 확인할 수 있었다.

 

따라서 주소가 찾았고 x0 레지스터의 값이 1이라는 것을 알게 됐다. 이렇게 해서 번째 함수가 일부 검사를 수행했으며, Return 결과는 탈옥에 대해 1 또는 탈옥되지 않은 경우 0으로 나타난다는 것을 알았다. 그러면 비교를 위해 x8 로드되어 어떤 팝업이 올라올지 분석해 보았다.

 

다음으로 메모리 주소를 가로 채고, x0 레지스터의 값이 0x01인지 확인한 , 만약 그것이, 다음 0x0으로 변경되면 콘솔을 통해 “Bypass Test3”이라고 출력할 것이다.

 

frida -U -l DVIA2bypassjailbreak1.js DVIA-v2 명령을 실행하였다.

DVIA2bypassjailbreak3.js 스크립트

 

 

 

 

Script가 정상 실행 되었으며, 콘솔 창에 Bypass Test3이라고 출력 됨.

 

 

그런 다음 jailbreak test3 탭을 누르면 팝업 창에 Device is Not Jailbroken이란 메시지가 뜨면서 탈옥탐지를 우회할 있었다.

 

-          -

 

[참고 사이트]

https://philkeeble.com/ios/reverse-engineering/iOS-Bypass-Jailbreak/

 

Bypassing JailBreak Detection - DVIAv2 Part 2

A guide on how to bypass jailbreak detection on the DVIAv2 app for iPhones.

philkeeble.com

https://frida.re

 

Jailbreak Test1에 이어 Test2 문제를 풀어보았다.

 

먼저 탈옥 탐지를 담당하는 DVIA-v2 내의 Class 추출하기 위해 스크립트를 짰다. 

Class 추출 스크립트

 

그리고 frida 실행시켰다.

 

frida -U -l classes.js DVIA-v2 | grep Jailbreak

 

아래와 같이 Method를 추출하기 위해 스크립트를 짰다.

Method 추출

 

그리고 frida 실행시켰다.

 

 

Class Method 추출했다.

그리고 return 값을 확인하는 스크립트를 짰.

return 값 확인

 

 

frida 실행시켜 return 값을 추출했다.

 

frida -U -l returnvalue.js DVIA-v2

return 값 추출

 

 

Jailbreak test2 응용 프로그램을 , 1 부울 값이 Method return 되는 것을 알았다.

 

이제 return 값을 변조하기 위해 스크립트를 짰다.

 

return 값 변조 스크립트

 

 

코드를 사용하면 클래스, 메서드 반환 할 값을 정의해야 한다. 앞에서 0x1을 봤기 때문에, 부울의 반대는 0x0일 것이. 따라서 반환 (newretval) 0x0 으로 지정될 것이다.

 

이제 frida를 실행시켰다.

 

frida -U -l overwrite.js DVIA-v2

 

아이폰에서 Jailbreak test2 다시 하면 ‘Device is Not Jilbroken’  이라는 팝업 창을 있었다.

 

 

[참고 사이트]

https://philkeeble.com/ios/reverse-engineering/iOS-Bypass-Jailbreak/

 

Bypassing JailBreak Detection - DVIAv2 Part 2

A guide on how to bypass jailbreak detection on the DVIAv2 app for iPhones.

philkeeble.com

https://frida.re/