목록분류 전체보기 (420)
외로운 Nova의 작업실
- IBinder 객체 바인딩 앞 장에서 살펴본것 처럼 서비스를 실행하는 함수를 2개 제공하는 이유는 서비스를 이용하는 상황을 2가지로 구분하기 위해서입니다. 다음 그림처럼 액티비티에서 startService()함수로 서비스를 실행했다고 가정해봅시다. 이처럼 백그라운드 작업은 필요하지만 액티비티와 데이터를 주고받을 일이없는 등 서로 관련이 없다면 startService()함수로 서비스를 실행하면 됩니다. 그런데 어떤 경우에는 서비스와 액티비티가 상호작용 해야할때가 있습니다. bindeService()는 이러한 목적으로 호출하는 함수입니다. - 실습 메인 액티비티.xml에 service라는 텍스트뷰를두고 원래는 service return 이라는 문자열이 이였다가 서비스쪽에 의해 문자열이 바뀌는 코드를 짜보..
- 문제 A. 공격자가 웹페이지 소스코드를 유출한 시간(UTC+09:00)은? B. 리버스쉘(Reverse Shell)을 동작시키는 프로세스 ID(PID)는? (10진수) C. 리버스쉘(Reverse Shell)에 대한 공격자 주소(IP)는? - 문제 풀이 먼저 리버스쉘을 실행시켰고, 프로세스 ID를 물어보기때문에 프로세스가 실행시킨 CMD 명령어들을 기록해놓은 ps_eaf 파일먼저 봐보겠습니다. process>ps_eaf 경로에 있습니다. sh 명령어와 php 명령어로 reverce.php를 실행시킨 기록이 있습니다. user의 계정은 www-data이고, 이 계정이 실행시킨 응용프로그램중 PID값이 5245인 프로그램이 직접 php 명령어로 reverse.php 파일을 실행시키는 것을 확인할 수 있습..
- 문제인식 세션값을 알아내서 admin 계정으로 로그인 해야하는 것 같습니다. 서버 코드를 봐보겠습니다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG } session_storage = { } @app.route('/') def index(): session_id = request.cookie..
- 문제인식 xss 필터링을 우회하는 문제입니다. 그럼 서버코드를 보겠습니다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try:..
- 서비스 서비스는 오래 걸리는 작업을 백그라운드에서 처리할 수 있게 해주는 컴포넌트입니다. 따라서 화면을 구현하지않고 서비스 역시 안드로이드의 컴포넌트이므로 생명주기를 시스템에서 관리합니다. - 서비스 생성과 실행 서비스 컴포넌트는 Service 클래스를 상속받아서 작성합니다. 다양한 생명주기 함수를 재정의할 수 있지만 onBind()는 필수 입니다. 아래는 생성 예시입니다. class Myservice: Service(){ override fun onBind(intent: Intent?): IBinder? { return null } } 서비스도 컴포넌트이므로 매니페스트에 등록해야합니다. 만일 암시적 인텐트로 하려면 intent-filter 태그를 등록해줍니다. 서비스를 실행할떄는 2가지 함수가 있는..
- 정규화 기능 다양한 URL은 정규화를 거쳐 하나의 URI를 표현하게됩니다. 예를들어 마지막 /가 없다면 /를 채워주고, 대문자를 모두 소문자로 변경해줍니다. 정규화과정중 유용한 기능은 raw한 tab키가 들어가면 없애준다는 것입니다. 이는 xss 필터링을 피할때 좋습니다. raw한 tab키를 얻으려면 파이썬을 이용합니다. 위와같이 입력하고 탭키를 얻어낼 수 있습니다. 밑에는 사용 예시입니다. Click me! //위 코드를 아래와 같이 변경할 수 있습니다. Click me! 단 정규화기능은 매개변수쪽에는 적용되지않습니다.
- HTML 인코딩 HTML의 속성과 태그부분에 사용할 수 있는 인코딩이 있습니다. 바로 아래와 같습니다. Symbol ASCII Decimal Code ASCII Hexadecimal Code HTML Decimal Code HTML Hexadecimal Code HTML Name Code Comments Character Type ^@ 0 0 � � - null character control ^A 1 1   - start of header control ^B 2 2   - start of text control ^C 3 3   - end of text control ^D 4 4   - end of transmission c..
- Unicode escape sequence 괄호를 제외한 문자들을 코드문자로 변경할 수 있습니다. 예시를보면 빠른 이해가 됩니다. 아래는 기본적인 alert()함수예제입니다. alert(1) 위 코드를 유니코드 문자를 사용해서 아래와 같이 사용할 수 있습니다. 유니코드 0061은 a입니다. \u0061lert(1) 아스키코드는 안되지만 유니코드는 가능합니다. - Computed member access 딕셔너리 객체에 접근할때 문자열을 연산할 수 있습니다. 아래는 기본적인 document객체입니다. document("cookie") 위 코드를 아래와 같이 변경할 수 있습니다. document["coo" + "kie"] 아래와 같이 문자열의 경우 아스키코드값도 집어넣을 수 있습니다. document['..
- 화면 켬/끔 브로드캐스트 리시버로 유저가 화면을 켰는지 껏는지를 알 수 있습니다. 아래는 화면을 켰는지 껏는지에 따라 실행하는것이 다른 리시버를 만든 코드입니다. 먼저 메인 액티비티.kt 파일입니다. class MainActivity : AppCompatActivity() { lateinit var receiver: BroadcastReceiver override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) var Binding = ActivityMainBinding.inflate(layoutInflater) setContentView(Binding.root) //리시버 생성 receiver = objec..
- 문제인식 먼저 실행해보겠습니다. 1234를 넣고 check 버튼을 눌러보겠습니다. 뭐.. 아무일도 안일어나 나는 것 같습니다. about 버튼을 눌러보겠습니다. 알맞는 키를 찾으라고 나오네요 키를 찾는 문제입니다. - 문제풀이 설계 strcmp 함수 call하는 부분이나 메시지를 내보내는 함수부분에 bp를 걸고 알맞는 키를 알아보겠습니다. - 리버싱 먼저 콜 함수들을 보겠습니다. messageBoxA로 축하한다는 메시지를 내보내는 부분이 있습니다. 이 부분으로 덤프해보겠습니다. 먼저 위에 첫번째 분기문 부분에 bp를 걸고 살펴보겠습니다. CPU Disasm Address Hex dump Command Comments 00401052 |. 6A 00 PUSH 0 ; /IsSigned = FALSE 00..