'Develop' 카테고리의 글 목록 :: YPrefer's Develop&Security

이전에 올린 java와 기능은 같다.

내가 한 것은 아니가 동료가 java용은 설치해야 한다고 귀찮다며 만들어서 주었다.



Fortify 라는 소스점검도구가 있다.

이 점검도구를 이용하면 소스코드를 빌딩하면서 어떤 소스파일의 어디라인데서 취약점이 있다고 보여진다 라는 레포팅을 만들어 준다.

이러한 결과는 개발자에게 전달되는데, 최신버전의 Fortify 는 그렇지 않지만

구버전의 Fortify는 레포트의 형태가 XML, PDF, WORD 파일 이 3가지로 떨어진다.


근데 문제는, 취약점이 적게는 몇천개 많게는 수십만개까지 잡히는데 이것을 word나 xml로 보면 굉장히 불편하다는 점이다.

(그래서 최신버전에는 excel로 레포팅을 하게 만들었겟지만.. 그럼에도 보기는 불편하긴 하다.)

그래서 그 결과는 나름대로 보기편하게 필요한 요소만 뽑아내서 파싱해주도록했다.


점검자는 개발자 입장에서 보면 딴지걸고 시비거는 사람으로 밖에 안보이겠지만...,

그래도 조금이라도 편하게 조치하시기를 바라는 마음에서 만들어보았다.



종종 그런 경우가 있다.
어떤 프로그램을 이용하고 싶은데, 너무 정보를 늦게 알아 내가 확인했을때는 이미 인원이 풀로 차있는 경우..

혹시나 누군가 취소하지 않을까 하여, 가끔 들어가곤 하지만 매일 매시간 확인할 수도 없는 노릇이다.

이 때 사용할 간단한 python 코드를 짜보앗다.


내 경우에는 템플스테이 만원행복을 하고 싶었는데, 이미 인원이 다 차버렸었다...ㅜ

원랜 1박에 9만원정도 하는 프로그램인데 1박 1만원으로 진행하니 인기가 많을 수밖에 없다..


그래도 하고싶은 마음에 뒤적뒤적 거리다가 알게된것은 예약을 할때 호출하는 url과 parameter들은

각 템플마다 동일하고 단지 ProgramId parameter로 템플간 구분을 하는 형태로 개발되있는 것을 알 수 있었다.

이를 이용하여, 예약이 가능한 템플(비 인기)에서 요청하는 형태를 알아내고, 내가 원하는 템플의 I로 지속적으로 예약을 시도하게끔 하여,

성공했을때 사용자에게 alert을 보여주는 형태로 만들었다.


그냥 예약 버튼을 누르는 노가다를 대신해준다고 생각해도 좋다.


아래 소스가 바로 그것인데, cookie는 로그인한 내 계정의 쿠키를 사용하고,

원하는 일정과 템플 코드를 적어 반복문으로 요청하게끔 되어있다. 보면 쉽게 알수있을것이다.

'Develop > Web' 카테고리의 다른 글

[개발] Free Hacking Zone - 개발 중  (2) 2016.06.01

필자의 회사의 경우 보안을 위해 외부 인터넷 망과 연결시 Proxy를 통해야 한다.

그런데, 보안점검을 하다보면 Proxy를 Burpsuite나 Fiddler와 같은 Tool의 포트로 변경해줘야 하는 일이 있는데,

이걸 매번 브라우저의 설정탭을 찾아 들어가 변경하기도 귀찮고,

그렇다고 Cooxie Toolbar같은걸 번거롭게 설치해서 마우스 클릭질 하는 것도 맘에 들지 않아서, Java로 변경해주는 걸 하나 만들어 보았다.


이 방법은 Java를 이용해 Registery 값을 수정하는 방법인데, Chrome과 IE는 적용되지만 FireFox는 따로 Proxy 정보를 저장하고 있어 적용되지 않는다.


소스를 보면, 간단하다.

Proxy.java


WinInet.java



이 소스는 java에서 registery값에 접근하는 jRegistryKey라는 라이브러리를 사용한다.

그 라이브러리를 이용하기위한 Interface가 WinInet.java이고, 실제 동작하는건 Proxy.java라고 보면 된다.

링크 : https://sourceforge.net/projects/jregistrykey/

라이브러리 사용하는 방법은 일반적이니 따로 적지 않겠다.


설명하자면, Windows의 Proxy 설정값은 Registery의 CURRENT_USER의 Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings

밑에 위치하게 되고 여기에서 프록시 설정에 대한 값들이 있는데,

ProxyEnable : 현재 프록시가 켜져있는지 아닌지의 값.  0 또는 1

ProxyServer : 프록시 서버 주소

ProxyOverride : 프록시 주소를 사용하지 않는 예외 주소들

AutoConfigURL : 프록시 자동구성 스크립트 주소

이다.


이 값을 이용해 현재 프록시가 켜져 있다면 꺼주고, 꺼져 있다면 같은 폴더의 dat폴더 밑 config.dat파일을 참조하여 값을 읽어와 그 설정과 같이

Proxy 설정을 해준다.

config.dat파일의 첫번째 라인을 자동구성 스크립트에, 두번째라인은 프록시 주소에, 세번째 라인은 예외 주소, 네번째 라인은 다이어로그가 실행되는 시간(1000이 1초) 로 구성된다.


이렇게 만들어진 프로그램을 바로가기로 만들어 우측버튼의 속성을 통해 바로가기키를 지정해두면 단축키로 프록시 활성/비활성화가 가능해진다.


만들어진 Tool로 손쉽게 프록시 활성/비활성화를 하면서 홈페이지을 조지면 된다!

모의해킹을 할때는 무엇보다 경험이 중요하다고 생각하는데,

계속 개발자가 적용한 방어기법을 우회하거나 다른 방법이 없는지 고민해보는 자신을 발견하게 된다.

 

그런데 원초적인 문제는 이 경험을 해볼 수 있는 공간이 많지 않다는 거다.

공개되어있는 다른 웹사이트를 통해 연습해 볼 수도 없고 (까딱 잘못하면 연락오니까. )

 

연습을 위한 DVMA 나 WebGoat 같은 애들이 있기는 하지만,

링크 : http://www.dvwa.co.uk/ https://www.owasp.org/index.php/WebGoat_Installation

 

남의 소스 분석하는 것보다 내가 새로 짜는게 편하고 공부하는데도 도움이 더 될거라 생각해서, 한번 만들어 보았다.

XAMPP, Sring Framework, Bootstrap 을 이용해서 만들었고

 

첫 화면은 물론 로그인 화면이다.

 

로그인을 하고 나면 5개의 취약점을 연습해 볼 수 있는 선택 메뉴가 나온다.

 

Newbie로 로그인 했을때 이미지를 누르면 403 권한 없음 에러메세지가 출력되고

 

 

5개의 취약점을 통해 관리자 ID/PWD를 입력하여 로그인 하고,

이미지를 누르면 축하메시지가 출력되도록 만들었다.

 

처음 계획은 계정을 4~5개로 만들어서 Newbie 부터 한단계씩 올라가면서 보안기능이 강화되는 것을 계획했지만

만들다 보니, 이 정도면 되었겠다라고 만족하게 되어서 나머지 개발은 무기한 연기 상태

 

언젠가 나중에 회원 가입을 만들고 랭크와 점수를 만들어서 호스팅 하고 싶은 마음도 살짝..  있다.

hackapk.py

모바일 점검을 하다보면 매번 툴을 이용해서 디컴파일 하고 디버깅을 위해서 debuggable옵션을 true로 바꿔주고 다시 리컴파일 하고 사이닝 하고, 하는 일련의 작업들을 반복하게 된다.

따라서 필자는 이 귀찮은 작업을 피하고자, 반복 잡업을 수행해주는 Python 스크립트를 하나 만들었는데 아래에 공개 하도록 한다.

 

소스를 보면 알겠지만 복잡한 부분은 없고.


사용방법으로 옵션은 총 4가지가 있는데

-i 옵션 : 입력 apk 파일을 지정해 주는 옵션

-o 옵션 : 출력 폴더를 지정해 주는 옵션

-b 옵션 : 이 뒤에 넣는 폴더를 빌드하고 사이닝 해서 apk 파일로 떨궈주는 옵션

-p 옵션 adb shell 을 이용해 package 안에 있는 파일을 긁어오는 옵션

 

으로 한번 해보면 알 수 있을건데, 잘 모르겠다면 친절히 공개해준 소스를 분석해보길 바란다.

 

기본적으로 사용할 때는 옵션을 넣지 않고, 아래와 같이 apk 파일 명을 입력값으로 넣어주면 되는데 그러면 결과는 아래와 같이 떨어진다.


뭐 보면 알겠지만 특별한건 없고 하나씩 실행시켜주는 거고,

debuggable과 sharedUserId가 설정되어있는지 체크해주고, 요렇게 디렉토리들을 아웃풋으로 출력해준다


apktool 폴더는 옵션을 주지 않고 apktool로 디컴파일 한 결과폴더로 jadx로 나온 소스를 분석해 Smali 코드를 변경 할 때 사용할 폴더,

apktool_d는 -d옵션을 주고 apktool로 디컴파일한 결과폴더로 java확장자를 가진 Smali 코드를 Eclipse에 import 하여 동적 디버깅에 사용할 폴더,

jadx는 java source로 디컴파일 해준 폴더로, 가독성이 높아 소스분석을 할때 사용할 폴더,

unzip은 그냥 압축 푼 풀더,

activity.bat은 adb shell을 통해 Apk가 가지고 있는 activity들은 모두 강제 호출 해주는 batch 파일로, 사용자에게 허락되지 않은 activity 호출 여부를 판단할때 사용할 파일,

Test_signed.apk 는 debuggable이 false옵션일때 true로 변경해서 apktool을 이용해 리컴파일 해주고, signing까지 끝내준 apk 파일.

+ Recent posts