[취약점 진단 실습_기초] 크로스 사이트 스크립팅(XSS) 취약점
## 경고문 ##
제 블로그의 모든 글들은 해킹과 보안에 대한 학습용 글입니다.
해당 글을 보고 실제 홈페이지에 공격하는 것은 명백한 범죄행위임을 알려드리며,
절대로 실제 홈페이지에 공격하지 마시기 당부드립니다. 실제 공격한 부분에 대한 책임은
본인이 지셔야 하며, 블로그를 통해 공유한 블로거와는 무관함을 알려드립니다.
오늘은 크로스 사이트 스크립팅(XSS) 취약점 진단에 대해 실습을 해 보고, 취약점이 있는지 없는지 구분하는 방법에 대해서 알아보도록 하겠습니다.
먼저 XSS 취약점에 대해서 모르시는 뉴비 님들은 아래 개념을 한번 정독하고 오시면 학습에 도움이 될 듯 싶습니다.
* XSS 취약점이란?
https://noirstar.tistory.com/266
자! 위에 글을 읽고 오셨다면 XSS 취약점에 대한 어느정도의 개념을 아셨을 것으로 판단하고, 실습을 진행하도록 하겠습니다.
일단 XSS 취약점 실습을 하기 전에 프로시 툴을 설치하시기 바랍니다.
* burp suite proxy tool 무료 다운
https://portswigger.net/burp/communitydownload
프록시 툴을 내려받은 후, 설치를 하셨다면 프록시 툴을 설정해 주세요.(아래 참조)
모두 설정을 해 주셨다면 이제 진짜로 XSS 취약점 진단을 해 봅시다.
XSS 취약점이 있는 사이트인 아쿠네틱스 테스트 홈페이지에 접속을 합니다.
http://testphp.vulnweb.com/search.php?test=query
홈페이지 화면을 보면 입력값을 입력해 줄 수 있는 검색 창이 있는 걸 확인하셨겠지요?
이제 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> 스크립트 구문을 볼 수 있습니다. 자세히 보시면 취약점에 대한 치환이 안 되어 있는 것을 확인하실 수 있을 것입니다. (취약점에 대한 방어 코딩이 되어 있다면 >, < 등으로 되어 있을 것입니다.)
프록시 툴 인터셉터를 계속 클릭한 수, 홈페이지를 보게 되면 아래와 같이 팝업 창이 뜨면서 숫자 0이 찍히는 모습을 볼 수 있을 것입니다. 이렇게 나온다면 XSS 취약점이 있다는 것으로 판단하셔도 됩니다.
이제 XSS 취약점에 대한 시큐어코딩을 통한 방어를 한 화면을 보여 드리도록 하겠습니다.
아래 사이트는 네이버 버그바운티에 나와 있는 검색 폼입니다.(아무 사이트에 공격하면 절대 아니되구요, 버그바운티에서 공격하라는 사이트만 공격해서 취약점을 찾으셔야 합니다. 그리고 주의사항도 꼼꼼히 읽으시길 바랍니다.)
일단, 검색 폼에 XSS 스크립트 기본 구문을 삽입했습니다.
그리고 프록시 툴로 인터셉터 한 상태에서, 검색 폼의 돋보기 모양을 클릭 합니다.
그리고 Send to Repeater를 클릭해서 Repeater 폼으로 이동합니다.
리피터 폼으로 가서, Send를 클릭한 후 Response(응답)값을 확인 하겠습니다. 우측 맨 하단에 보면 문자를 찾을 수 있는 찾기 기능이 있습니다. alert(0)으로 찾으면 노란색으로 문자를 찾을 수 있습니다. 그런데 위에 아쿠네틱스 사이트에서 보던 화면과 다르지요? <(<), >(>) 라고 치환된 문자들을 보실 수 있을겁니다. 만약 이런 치환 구문이 있다면 해당 검색 폼은 취약점이 없다고 판단하셔도 무방합니다. 더 진행하셔도 되겠지만, 저라면 다른 취약점을 찾는데 시간을 할애할 것 같아요 ㅎㅎㅎ(진단 시간이 많지 않기 때문에...)
* XSS 문자열 치환 시큐어코딩
https://diqmwl-programming.tistory.com/84
자!!! 이 정도만 아셔도 웹 어플리케이션 취약점을 찾는데는 어려움이 없으실겁니다.
그럼. 다음 시간에 또 만나요~ 안녕~:)
[iOS 앱 진단] DVIA-v2 Jailbreak Test3
이번 문제는 Jailbreak Test3 문제를 풀어 보았다.
일단 아이폰 내 설치 된 응용 프로그램 중, Jailbreak Test3 탭을 누르면 아래와 같은 팝업 창이 뜬다.
우선 응용 프로그램에서 어떤 기능이 사용되는지 확인하기 위해서 아래와 같은 명령을 사용하여 추적을 시작했다.
frida-trace -U -i "*jail*" DVIA-v2 명령을 실행 후, 응용프로그램 jailbreak test3 탭을 누름
그러면 버튼을 클릭할 때 각 함수를 호출한다. 그래서 Jailbreak Test3 버튼을 클릭 할 때 _T07DVIA_v232... Jailbreak Test1TappedypF이 호출된다.
이제 함수가 진행되는 것을 확인하고 BL(분기 링크) 명령으로 다른 함수를 호출했다. 이것은 기본적으로 JMP명령과 동일하다.
호출되는 명령은 아래와 같다.
이제 frida를 사용해서 Script를 작성하고 hooking하려는 명령이 실제로 호출되고 있는지 확인했다.
응용 프로그램에 대해 대상 모듈을 변경해야 했다. 모듈베이스는 정적이며 frida가 자동으로 오프셋을 계산한다.
frida -U -l checkmeminuse.js DVIA-v2 명령을 실행 시킨 후, Jailbreak Test 3탭을 누르면 메모리 주소가 사용 중이라는 것을 알 수 있었다. (아이폰 화면에 Jailbreak Test3 버튼을 눌러도 동작하지 않음)
이제 x8 레지스터에 로드되는 값이 무엇인지 알기 위해 아래와 같이 스크립트를 짰다.
이는 주소를 출력하는 함수의 변경과 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 명령을 실행하였다.
Script가 정상 실행 되었으며, 콘솔 창에 Bypass Test3이라고 출력 됨.
그런 다음 jailbreak test3 탭을 누르면 팝업 창에 Device is Not Jailbroken이란 메시지가 뜨면서 탈옥탐지를 우회할 수 있었다.
- 끝 -
[참고 사이트]
https://philkeeble.com/ios/reverse-engineering/iOS-Bypass-Jailbreak/
'해킹 & 보안 > Mobile' 카테고리의 다른 글
[iOS 앱 진단] DVIA-v2 Jailbreak Test2 (0) | 2022.02.19 |
---|---|
[iOS 앱 진단] DVIA-v2 Jailbreak Test1 (0) | 2022.02.16 |
[Android 앱진단] Crackme.apk 해킹 문제 풀이 (0) | 2021.08.11 |
[Android 앱진단] Clicker.apk 앱 문제 풀이 (0) | 2021.07.21 |
[iOS 앱 진단] DVIA-v2 파일을 IDA Pro를 사용하여 리버싱 하는 과정 (3) | 2021.07.07 |
[iOS 앱 진단] DVIA-v2 Jailbreak Test2
Jailbreak Test1에 이어 Test2 문제를 풀어보았다.
먼저 탈옥 탐지를 담당하는 DVIA-v2 내의 Class를 추출하기 위해 스크립트를 짰다.
그리고 frida를 실행시켰다.
frida -U -l classes.js DVIA-v2 | grep Jailbreak
아래와 같이 Method를 추출하기 위해 스크립트를 짰다.
그리고 frida를 실행시켰다.
Class와 Method를 추출했다.
그리고 return 값을 확인하는 스크립트를 짰다.
frida를 실행시켜 return 값을 추출했다.
frida -U -l returnvalue.js DVIA-v2
Jailbreak test2 응용 프로그램을 탭 할 때, 1의 부울 값이 Method로 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/
'해킹 & 보안 > Mobile' 카테고리의 다른 글
[iOS 앱 진단] DVIA-v2 Jailbreak Test3 (0) | 2022.02.20 |
---|---|
[iOS 앱 진단] DVIA-v2 Jailbreak Test1 (0) | 2022.02.16 |
[Android 앱진단] Crackme.apk 해킹 문제 풀이 (0) | 2021.08.11 |
[Android 앱진단] Clicker.apk 앱 문제 풀이 (0) | 2021.07.21 |
[iOS 앱 진단] DVIA-v2 파일을 IDA Pro를 사용하여 리버싱 하는 과정 (3) | 2021.07.07 |