반응형

 

1부2부 포스팅을 보시면 이해가 쉽습니다.

이번 포스팅에서는 인증서를 Burp Suite 에 import 해서 사용하는 방법을 담고 있습니다.

 

 

 

1부 포스팅에서 준비한 인증서 파일들 중 .der 파일과 .pkcs8 파일이 필요합니다.

 

 

그 다음, Burp Suite 를 실행해서 Proxy 탭의 Proxy Settings 메뉴를 클릭합니다.

 

 

 

 

 

설정 창에서 Import / export CA certificate 버튼을 클릭합니다.

 

 

 

반응형

 

 

아래 옵션을 선택해주세요.

 

 

 

 

 

 

파일 선택 버튼이 두 개가 보이는데, 위에는 .der 파일을, 아래에는 .pkcs8 파일을 넣고 진행해줍니다.

 

 

 

 

위 과정을 성공적으로 마치면 안드로이드 단말기에서

사설 인증서를 시스템 인증서로 권한 상승을 한 후

Burp Suite 에서 Proxy 가 정상적으로 동작하는 것을 확인할 수 있을겁니다 :)

반응형
반응형
반응형

인증서를 만들지 않으신 분들은 이전 포스팅을 참고해주시기 바랍니다.

해당 포스트에서는 생성한 인증서를 안드로이드 단말기에 설치하는 내용을 담고 있으며, 루팅된 환경에서 진행했습니다.

 

 

 

가장 먼저, 생성해둔 인증서를 단말기로 옮깁니다.

cmd)

adb push 1127f18c.0 /sdcard/

 

 

 

설치 과정은 Android 14 를 기준으로 나뉩니다.

 

 

Android 14 미만 단말기에서의 설치

 

먼저, 기존에 설치되어 있는 인증서를 백업합니다.

(백업할 위치는 적절히 수정해줍니다)

adb shell)

cp /system/etc/security/cacerts/* /data/local/tmp/mycerts/

 

 

미리 생성해두었던 인증서를 옮깁니다.

(인증서의 파일명은 다를 수 있습니다)

adb shell)

mv /sdcard/1127f18c.0 /data/local/mycerts

 

 

인증서 영역을 mount 합니다.

adb shell)

mount -t tmpfs tmpfs /system/etc/security/cacerts

 

 

백업한 인증서와 새로 설치할 인증서가 담긴 경로를 덮어씌웁니다.

adb shell)

cp -f /data/local/tmp/mycerts/* /system/etc/security/cacerts/

 

 

권한을 설정해줍니다.

adb shell)

chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*

 

 

 

Android 14 이상 단말기에서의 설치

 

 

Android 14 이상 단말기부터는 아래 Maigsk Module 을 이용해서 설치하면 간단합니다.

 

https://github.com/WindSpiritSR/CustomCACert

 

GitHub - WindSpiritSR/CustomCACert

Contribute to WindSpiritSR/CustomCACert development by creating an account on GitHub.

github.com

 

간단히 과정을 설명해드리자면, 생성한 인증서를 모듈의 system/etc/security/cacerts 경로에 넣고 Magisk 앱을 통해 모듈을 설치하면 됩니다.

 

 

다음 포스팅은 Burp Suite 에서 위 인증서를 사용하는 방법을 담겠습니다 :)

반응형
반응형
반응형

본 과정은 윈도우에서 진행되었으며 openssl 이 설치되어 있다는 가정하에 진행합니다.

해당 포스트에서는 인증서를 생성하는 단계까지의 내용만 담고 있습니다.

 

 

 

먼저 아래의 openssl.cnf 파일을 준비합니다.

(TEST 에 해당하는 부분은 적절히 변경해줍니다)

# openssl.cnf

[ req ]
default_bits			= 2048
default_md			= sha256
default_keyfile			= digi_cert.key
distinguished_name		= req_distinguished_name
extensions			= v3_ca
req_extensions			= v3_ca

[ v3_ca ]
basicConstraints       = critical, CA:TRUE, pathlen:0
subjectKeyIdentifier   = hash
keyUsage               = keyCertSign, cRLSign
nsCertType             = sslCA, emailCA, objCA

[ req_distinguished_name ]
countryName                     = Country Name
countryName_default             = KR
countryName_min                 = 2
countryName_max                 = 2
organizationName                = TEST
organizationName_default        = TEST
organizationalUnitName          = TEST
organizationalUnitName_default  = TEST
commonName                      = TEST
commonName_default              = TEST
commonName_max                  = 64

 

 

위 openssl.cnf 파일을 이용해서 private key 를 생성합니다.

(기간, 파일 이름 등 적절히 변경해줍니다)

# Create a private key.

openssl req -x509 -days 365 -nodes -newkey rsa:2048 -outform der -keyout server.key -out cert.der -extensions v3_ca -config openssl.cnf

 

 

private key 를 pkcs8 포맷으로 변환합니다.

# Convert key to pkcs8 format

openssl rsa -in server.key -inform pem -out server.key.der -outform der
openssl pkcs8 -topk8 -in server.key.der -inform der -out server.key.pkcs8.der -outform der -nocrypt

 

 

cert.der 을 pem 포맷으로 변환합니다.

# Convert DER to PEM

openssl x509 -inform DER -in cert.der -out cert.pem

 

 

인증서의 hash 값을 추출합니다.

# get hash from cert

openssl x509 -inform PEM -subject_hash_old -in cert.pem
  => 1127f18c

첫 번째 줄을 복사한다.

 

 

hash 값을 이용해 cert.pem 의 이름을 변경합니다.

# rename to [HASH].0

move cert.pem 1127f18c.0

 

 

 

실질적으로 1127f18c.0 파일을 안드로이드 단말기에 설치할 예정입니다.

추후 과정은 다음 포스팅을 확인해주세요 :)

반응형
반응형

안드로이드 단말기의 설정 앱에서 프록시를 설정하는 방법이 아닌, shell 에서 명령어를 이용하여 설정하는 방법 입니다.

adb shell settings put global http_proxy <ip>:<port>

ex) adb shell settings put global http_proxy localhost:8080
ex) adb shell settings put global http_proxy 192.168.0.1:9999

 

반응형

아래는 모든 설정을 취소하는 방법 입니다.

adb shell settings put global http_proxy :0

 

반응형
반응형

사용자 환경 : Mac OS X 10.12.6







전달된 파라미터가 정확히 전달 되었는 지를 확인할 필요가 있다.





간단하게 확일할 수 있는 방법을 확인해보자.



<?php
 $parameter = $_GET["one"];

 echo $parameter;
?>





파라미터를 전달할 때 파라미터의 수가 적을 때는 문제가 없지만, 많은 양을 전달할 때에는 하나하나 echo를 사용하여 확인할 수가 없다.





따라서 많은 양의 파라미터를 확인하고자 할 경우, 다음과 같이 확인할 수 있다.




<?php
 $parameter = $_GET["one"];
 $parameter2 = $_GET["two"];
 $parameter3 = $_GET["three"];

 echo ('<pre>');
 print_r($_GET);
 echo ('</pre>');
?>





위와 같이 print_r($_GET)을 사용한다면 get 방식으로 전달 받은 모든 파라미터를 확인할 수 있다.





확인하면 다음과 같이 결과가 나온다.










post 방식도 get 방식과 같은 방법으로 사용할 수 있다.

반응형

'Develop - > PHP' 카테고리의 다른 글

[Solution] PHP mysql과 mysqli의 차이  (0) 2018.01.14
반응형

사용자 환경 : macOS Sierra 10.12.6Python 3.6.4PyCharm 2017.3.4 build PC-173.4674.37.






이 글을 읽기 전, 1편 포스팅을 숙지 하셔야 됩니다.





설치는 다 했으니 본격적으로 실행에 옮겨보자.





1. 우선 필요한 파이썬 라이브러리들을 임포트 한다.

from bs4 import BeautifulSoup
from selenium import webdriver




2. driver라는 이름의 변수에 webdriver 객체를 만들어 저장한다.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

저장경로 살피세요




3. Selenium은 기본적으로 웹 자원들이 모두 로드될 때까지 기다려주지만, 암묵적으로 기다리는 시간을 조정할 수 있다.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)




4. 이제 URL을 지정하여 접근하자.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)

# URL 접근
driver.get('https://nid.naver.com/nidlogin.login')




5. 네이버 로그인 화면에서 아이디와 패스워드의 값을 넘기는 폼의 name 값이 각각 id, pw인 것을 확인할 수 있다.





6. webdriver의 find_element_by_name() 함수를 통해 태그를 지정하여 값을 넣어주자.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)

# URL 접근
driver.get('https://nid.naver.com/nidlogin.login')

# ID, PW 입력
id = "본인_네이버_아이디"
pw = "본인_네이버_패스워드"
driver.find_element_by_name('id').send_keys(id)
driver.find_element_by_name('pw').send_keys(pw)




7. 이제 로그인 버튼을 눌러 로그인이 정상적으로 실행되는지 확인한다.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)

# URL 접근
driver.get('https://nid.naver.com/nidlogin.login')

# ID, PW 입력
id = "본인_네이버_아이디"
pw = "본인_네이버_패스워드"
driver.find_element_by_name('id').send_keys(id)
driver.find_element_by_name('pw').send_keys(pw)

# 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()




8. 로그인 후 실시간 검색어 추출을 위해 네이버 메인으로 이동한다.

driver.get("https://www.naver.com")




9. BeautifulSoup 객체를 이용해 페이지를 분석한다.

driver.get("https://www.naver.com")

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')




10. 5번에서와 같이 개발자 도구를 통해 실시간 검색어가 어느 태그에 있는지 확인한다.




11. 마지막으로 추출된 값들을 프린트 한다.

driver.get("https://www.naver.com")

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

realtime_search_word = soup.select('div.ah_roll_area > ul.ah_l > li > a > span.ah_k')
for list in realtime_search_word:
    print(list.text.strip())






이로써 파이썬과 BeautifulSoup, Selenium, ChromeDriver 등과 같은 라이브러리를 사용하여 네이버에 로그인 후, 실시간 검색어를 추출하는 프로그램을 작성해보았다.












반응형
반응형

사용자 환경 : macOS Sierra 10.12.6Python 3.6.4PyCharm 2017.3.4 build PC-173.4674.37.






먼저 웹 크롤링이란 웹 사이트에서 원하는 정보를 자동으로 수집하는 것을 의미한다.



본인은 크롤링을 위해 파이썬 라이브러리인 BeautifulSoupSelenium을 사용했다.



첫 번째로 BeautifulSoup을 설치해보자.



https://www.crummy.com/software/BeautifulSoup/#Download




빨간줄을 클릭해 다운을 받고 압축을 해제한다.



본인은 맥을 사용하고 있으므로 터미널을 열어 설치를 마무리한다.




1. 압축을 해제한 폴더로 이동한다.

$> cd (압축푼경로~)/beautifulsoup4-4.6.0/



2. 설치한다.

$> python3 setup.py install

본인은 파이썬 2와 3 버전 모두 설치되어 있으므로 python3라는 키워드를 사용했다.




두 번째로는 Selenium을 설치해보자.



먼저 Selenium은 주로 웹 앱을 테스트하는데 이용하는 프레임워크이다. webdriver라는 API를 통해 운영체제에 설치된 Chrome을 제어한다.




1. 터미널을 이용한 Selenium 설치

$> pip install selenium



2. 크롬이 설치되어 있다는 가정하에 ChromeDriver를 다운 및 설치



https://sites.google.com/a/chromium.org/chromedriver/downloads



본인의 OS에 맞게 다운받자.



다운을 받고 압축을 해제하면 chromedriver라는 파일이 생긴다.



이 파일을 본인이 원하는 디렉터리에 보관한다. 이때 이 디렉터리 경로는 Selenium 객체를 생성할 때 필요하기 때문에 아무 곳에 두지 말자.





이번 포스트에서는 BeautifulSoup, Selenium, ChromeDriver를 설치하는 부분만 살펴봤다.



다음 글에서 직접 다뤄보는 부분을 살펴보자!

반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






링크드 리스트(linked list)의 머리 노드(head node)와 정수 N이 주어지면, 끝에서 N번째 노드(node)를 제거하고 머리 노드(head node)를 리턴하라.


단, 리스트를 한번만 돌면서 풀어야 한다. N은 리스트 길이보다 크지 않다.




예제 } 


Input : 1 -> 2 -> 3 -> 4 -> 5, N = 2

Output : 1 -> 2 -> 3 -> 5

Input : 1 -> 2 -> 3, N = 3

Output : 2 -> 3

Input : 1, N = 1

Output : null











반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






문자열 배열(string array)이 주어지면, 제일 긴 공통된 접두사(prefix)의 길이를 찾아라





예제 } 


Input : ["apple", "apps", "ape"]


Output : 2 // "ap"


Input : ["hawaii", "happy"]


Output : 2 // "ha"


Input : ["dog", "dogs", "doge"]


Output : 3 // "dog"











반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






정수 배열(int array)과 정수 N이 주어지면, N번째로 큰 배열의 원소를 찾아라.





예제 }



Input : [-1, 3, -1, 5, 4], 2


Output : 4


Input : [2, 4, -2, -3, 8], 1


Output : 8


Input : [-5, -3, 1], 3


Output : -5











반응형

+ Recent posts