목록분류 전체보기 (151)
김승현
문제 앞선 강의에서도 나왔듯이 아스키코드와 UTF-8(한글)로 password가 구성되어 있다는 게 핵심인 것 같다. 풀이 접속해보면 생긴 건 저번과 같은 것 같다. guest를 입력해보면 guest가 존재한다고 뜬다. 혹시나 저번처럼 error를 이용하면 될까 싶어서 저번에 error based sqli를 풀 때 사용한 코드를 입력해봤다. 역시 안 된다. 코드를 대충 훑어보자. (분석은 강의에서 했으니 중요한 거만 보고 넘어갑니다) 이 양식에 맞춰서 입력된 uid가 들어가는 것 같다. 이외엔 저번 문제와 코드가 비슷하다. from requests import get host = "http://host3.dreamhack.games:22052" password_length = 0 while True: p..
문제 간단한 error based sqli라고 한다. 풀어보자 풀이 userid쪽의 sql 쿼리문과 uid를 입력하는 창이 있다. guest를 한번 입력해보자. 그냥 저 위에 출력만 바뀌나? 아무거나 입력해보자 아무거나 입력해봤는데 입력이 됐고 이번에는 '--도 입력해보자 error문이 발생했고 mariaDB를 사용하는 것 같다. 소스코드로 가보자. import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.envir..
문제 이름부터 어려워 보인다... 접속해보자. 풀이 접속해보니까 별 게 없다.. 소스코드를 보자. #!/usr/bin/env python3 from flask import Flask, request import os app = Flask(__name__) @app.route('/' , methods=['GET']) def index(): cmd = request.args.get('cmd', '') if not cmd: return "?cmd=[cmd]" if request.method == 'GET': '' else: os.system(cmd) return cmd app.run(host='0.0.0.0', port=8000) 코드 초반부 flask와 os를 import 하고 플라스크 객체를 생성했다. @..
문제 10000번 클릭하라고 한다. 풀이 호박을 클릭해서 잭오랜턴을 만들라고 하고 10000번 더 클릭하라고 한다. 클릭하면 정말로 숫자가 낮아지긴 한다. 개발자도구 - Elements로 클릭 이벤트 내용을 찾을 수 있었다. 이걸 이용해서 console에 10000번 클릭 이벤트를 입력하자. 이렇게 입력을 했다. 짠
문제 flask로 작성된 image viewer 서비스인데 ssrf 취약점을 사용해서 /app에 있는 flag.txt를 얻으라는 문제이다. 풀이 접속하면 메뉴엔 home, about, contact가 있고 image Viewer가 밑에 있다. image viewer으로 가보자. 저기서 view 버튼을 누르면 이렇게 사진이 뜬다. 문제 설명에서 localhost의 임의의 port에서 웹서버를 시작한다고 했는데 소스코드에서 찾아봤다. 1500 ~ 1800에서 만들어진다. 포트를 찾기 위해 브루트 포스를 해보자. import requests NOTFOUND = 'iVBORw0KGgoAAA' for port in range(1500, 1801): url = 'http://host3.dreamhack.games:..
문제 file download 취약점이 있어서 그걸 활용해서 flag.py를 다운받으라는 문제인 것 같다. 풀이 접속하면 메뉴엔 Home, Upload My Memo가 있고 Please upload your memo!가 출력되어 있다. upload my memo에 가보자. filename과 content를 우리 마음대로 작성할 수 있는 것 같다. 이렇게 작성해서 한번 업로드 해보자. 그러면 이렇게 업로드가 되고 입력한 내용이 저장되어 있다. 근데 주소창을 잘 보면 메뉴에 없던 read라는 path로 읽는 걸 볼 수 있다. 소스 코드를 한 번 확인 해보자. #!/usr/bin/env python3 import os import shutil from flask import Flask, request, ren..
문제 php로 작성된 파일 저장 서비스고 /flag.txt의 플래그를 파일 업로드 취약점을 이용해서 플래그를 얻으라고 한다. 풀이 접속하면 메뉴엔 home, list, upload가 있다. 그리고 이미지를 업로드하고 공유하라고 출력되어 있다. list로 먼저 들어가보자. 아직 사진을 업로드 하지 않아서 그런지 아무것도 없다. upload로 가보자. 진짜로 파일을 업로드 하는 메뉴다. 아무 사진이나 업로드 하고 list를 보자. share.PNG를 업로드함) upload 버튼을 누르면 path를 적어준다. list를 다시 확인해보자. 이렇게 share.PNG가 있는 걸 볼 수 있다. 누르면 사진이 정상적으로 보인다. html 확장자를 이용해서 xss 공격도 가능한 걸로 보인다. 웹셸을 업로드 해보자. 함께..
문제 특정 host에 ping 패킷을 보내는 서비슨데 거기에 command injection을 이용해서 플래그를 얻으라는 것 같다. 풀이 메뉴에는 Home, Ping이 있고 Welcom this sis ping playground!가 출력되어 있다. Ping을 들어가보자. 우리 호스트에 핑을 보내보자는 것 같다. 일단 저기 적혀있는 8.8.8.8을 넣어보자. 핑을 보냈다는 말인 것 같다. 이번엔 8.8.8.8과 command injection을 같이 해보자. 정해진 양식이 있는 것 같다. 이젠 소스코드로 가보자! 코드 초반부 subprocess를 import 하는데 쉘 명령 등 다른 프로세스를 실행하고 출력 결과를 가져올 수 있게 해주는 라이브러리이다. 그리고 FLASK를 가져오고 APP = FLASK(..
문제 db에 저장된 플래그를 얻으라고 하고 admin 계정의 비밀번호가 flag라고 한다. 풀이 문제에 접속하면 /login?uid=guest&upw=guest가 뜬다. 주소 뒤에 붙여보자. guest로 로그인이 됐다. mongodb로 제작됐기 때문에 배운 걸 활용 + 검색한 내용으로 작성해 봤다. http://host3.dreamhack.games:23138/login?uid[$gt]=ad.&upw[$ne]= admin을 검색하려고 했는데 guest가 떴다. gt의 경우 입력값보다 필드의 값이 큰 경우를 가리킨다. 참고한 블로그! 다른 것들도 많아서 도움이 될 것 같다. MongoDB 강의 4. Query로 원하는 값만 선택하기 ($lt, $lte, $gt, $gte, $ne, $and, $or) | ..
문제 로그인 서비스가 있는 사이트고 sql injection 취약점을 통해서 플래그를 얻으면 된다고 한다. 풀이 방법은 함께실습 강의에 다 있으니까 코드는 필요한 거만 보고 하는 방식으로 하겠습니다! 풀이 사이트에 접속을 하면 이런 식으로 Home About Contact Login 메뉴가 있고 그 밑에 Login이 있다. Login으로 가보자. games/login으로 이동하면 이렇게 userid와 password를 입력하는 칸과 login 버튼이 있다. 개발자도구 - Elements에서도 딱히 힌트가 없는 것 같으니까 소스코드로 가보자. 여기서 db.excute 두 번째 줄에 guest/guest와 admin/랜덤값의 계정을 database에 생성하는 걸 볼 수 있다. 로그인 해보고 싶지만 딱히 별 ..