본문 바로가기

전체 글

(59)
[Dreamhack] csrf-2 소스 코드 분석 / sessionid가 없으면 login 하라는 문구를 보여주고, sessionid가 있지만 admin이 아니라면 user명을 admin이라면 FLAG를 보여준다. @app.route("/") def index(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[session_id] except KeyError: return render_template('index.html', text='please login') return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "..
[Dreamhack] csrf-1 소스 코드 분석 /vuln param 값을 전달 받아 출력한다. param 값에 frame, script, on 문자열이 있으면 이를 *로 치환하여 반환한다. @app.route("/vuln") def vuln(): param = request.args.get("param", "").lower() xss_filter = ["frame", "script", "on"] for _ in xss_filter: param = param.replace(_, "*") return param /flag param 값을 POST 방식으로 전달 받아 check_csrf 함수의 인자로 전달한다. check_csrf 함수에서 반환값으로 read_url에 url, cookie를 전달하는데, cookie 값으로 로컬 domain..
[백준/Python] 2343 기타 레슨 문제 링크 2343번: 기타 레슨 강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경 www.acmicpc.net 문제 풀이 블루레이는 수가 m개이면서 용량이 최소여야 한다. 이 때, 모든 강의 영상이 최소 하나씩은 담기게 되므로, 블루레이의 크기는 가장 용량이 큰 강의 영상보다 같거나 커야 한다. 또한, 전체 강의 영상의 용량을 합한 것보다 클 수는 없다. 따라서 이분 탐색의 시작점을 가장 용량이 큰 강의 영상(max(l))로 지정하고, 끝점을 전체 강의 영상의 용량(sum(l))로 지정해야 한다. 기준점(mid)이 정해지면, 해당 크기의 블루레이에 얼만큼의 강의 영상..
[백준/Python] 2170 선 긋기 문제 링크 2170번: 선 긋기 첫째 줄에 선을 그은 횟수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다. www.acmicpc.net 문제 풀이 먼저, 입력 받은 리스트를 시작점(x[0])에 대해서 오름차순 정렬하고, 끝점(x[1])에 대해서 오름차순 정렬을 한다. 처음의 시작점과 끝점은 각각 리스트의 첫 번째가 되는데, 이 때, 총 길이의 값을 끝점에서 시작점을 뺀 값으로 저장한다. 이후 인접한 두 선분은 총 6가지의 케이스가 나오게 되는데, 각 2가지의 케이스씩 묶어서 생각할 수 있다. 첫 번째는 선분 l1의 끝점이 선분 l2의 시작점보다 큰 경우..
[InsecureBankv2] 취약한 인증 메커니즘 취약점 개요 취약점 설명 인증 없이 또는 인증을 우회하여 시스템에 접근할 수 있는 취약점을 의미한다. 보안 위협 인증 없이 우회가 가능하여 다른 액티비티에 접근이 가능하다. 발생 위치 AndroidManifext.xml 취약점 진단 과정 adb Step 1) AndroidManifest.xml의 액티비티 확인 액티비티의 android:exported 속성이 “true”로 설정되어 있는 것을 확인할 수 있다. 이는 다른 액티비티에서 인증 없이 접근 가능함을 의미한다. Step 2) 액티비티 실행 로그인 없이 다른 액티비티로 이동한 것을 확인할 수 있다. # am start [애플리케이션 설치 주소]/[패키지 주소] am start com.android.insecurebankv2/com.android.ins..
[백준/Python] 10026 적록색약 문제 링크 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 풀이 위 문제는 dfs, bfs 두 가지 방법으로 모두 풀이가 가능하다. 적록색약이 아닌 사람은 R, G, B 모두 다르게 인식하지만, 적록색약인 사람은 R, G를 구분하지 못하므로, 입력 받은 리스트에서 G인 부분을 R로 바꾸어 새로운 리스트를 생성하였다. 방문 처리 리스트(visited)를 통해서 시작 위치를 방문하지 않았으면 함수(dfs, bfs)를 실행한다. 이때, 해당 함수는 시작 위치와 동일한 위치에 대해서만 방문 처리를 하게 된..
[백준/Python] 12904 A와 B 문제 링크 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 문제 풀이 처음에는 큐를 생성하고 s를 넣은 상태에서 A, B를 더해서 다시 큐에 넣어서 t와 비교하는 방식으로 접근하였다. 하지만, 메모리 초과가 발생해서 게시판의 질문들을 통해서 힌트를 조금 얻었다. 먼저, s를 t로 만들게 되면, 그 경우의 수가 많아지게 된다는 것이다. 이때, t의 길이가 될 때까지 진행해야 하므로 당연히 s와 t의 길이 차가 많이 날수록 그만큼 큐에 들어있는 문자열 또한 많아지게 된다. 반대..
[Dreamhack] Cross Site Request Forgery (CSRF) ClientSide: CSRF 1. Cross Site Request Forgery (CSRF) 1.1. Cross Site Request Forgery (CSRF) 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점 공격자는 임의 이용자의 권한으로 서비스 기능을 사용해 이득을 취할 수 있음 이용자의 계정으로 임의 금액을 송금해 금전적인 이득을 취하거나, 비밀번호를 변경해 계정을 탈취하고 관리자 계정을 공격해 공지사항 작성 등으로 혼란을 야기할 수 있음 이용자의 송금 요청 GET /sendmoney?to=dreamhack&amount=1337 HTTP/1.1 Host: bank.dreamhack.io Cookie: session=IeheighaiToo4eenahw3 송금 기능 # 이..
[백준/Python] 2565 전깃줄 문제 링크 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net 문제 풀이 정렬로 접근하다가 전에 이코테 강의에 있던 문제와 비슷하다고 생각되어 그 방식으로 접근해 보았다. 이 문제는 "가장 긴 증가하는 부분 수열" 문제로 생각할 수 있는데, a에 있는 전깃줄이 차례로 정렬되어 있을 때, b에 있는 전깃줄의 숫자가 차례로 정렬되어 있도록 하면 된다. 먼저 입력 받은 리스트를 a(x[0])를 기준으로 오름차순 정렬 후에, 같은 값이 있다면 b(x[1])를 기준으로 정렬한다. 이후 b에 있는 i번째의 전깃줄의 숫자(ab[i]..
[백준/Python] 13335 트럭 문제 링크 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 문제 풀이 처음에는 리스트로 접근하였는데, 시간이 오래 걸릴 것 같아서 다른 방법을 생각해 보았다. w의 개수만큼 0이 들어 있는 큐(다리의 길이)를 생성하고, 왼쪽의 큐를 하나 제거하고(popleft) a[i] 만큼의 무게를 가진 트럭을 오른쪽에서 하나씩 집어 넣으면서(append) 큐의 길이를 일정하게 유지하여 한 칸씩 이동하는 모습을 구현해 보았다. 이때, 현재 큐(다리 위)에 있는 총량과 새로 넣을..
[InsecureBankv2] 브로드캐스트 리시버 결함 취약점 개요 취약점 설명 브로드캐스트 리시버는 안드로이드 4대 컴포넌트 중 하나로, 시스템 및 앱 간에 이벤트를 전달하고 처리하는 데 사용되는 중요한 구성 요소이다. 설정에 문제가 있거나 악의적으로 사용될 경우 보안 위협을 초래할 수 있다. 보안 위협 브로드캐스트 리시버를 악용하여 악성 앱이 정상적인 앱의 브로드캐스트를 가로채거나 변조하는 등의 행위를 할 수 있다. 발생 위치 AndroidManifest.xml 취약점 진단 과정 adb Step 1) AndroidManifext.xml 확인 브로드캐스트 리시버의 android:exported 속성이 “true”로 설정되어 있는 것을 확인할 수 있다. Step 2) 브로드캐스트 리시버 실행 adb에서 브로드캐스트 리시버를 실행 후 logcat을 확인해보면 ..
[Dreamhack] xss-2 소스 코드 분석 /vuln render_template 함수를 통해서 화면을 출력한다 @app.route("/vuln") def vuln(): return render_template("vuln.html") /flag 전달 받은 param 값과 FLAG를 check_xss로 전달한다 이후 read_url에 FLAG를 cookie로 하여 전달 후 새로운 cookie를 생성한다 def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: service = Service(executable_path="/chromedriver") options = webdriver.ChromeOpti..