목록2019/03/31 (3)
White Security
Sunshine CTF web 2번 XXE Injection 문제입니다. 주소에 접속하면 특이한 서비스 페이지가 주어지는데 성, 이름, 무기를 선택할 수 있습니다. 제출하면 재미있게도 중간 이름을 만들어 줍니다. 요청은 GET 메소드를 통해 이루어집니다. input 인자 값이 익숙한 형태로 되어 있네요. lee posix 디코딩 하면 위와 같은 xml 형식의 데이터를 확인할 수 있습니다. &xxe; posix Entity를 삽입해보니 /etc/passwd 파일을 정상적으로 참조합니다. &xxe; posix php://filter 를 사용하여 현 폴더의 generate.php 파일을 base64 변환하여 읽도록 하였습니다. 상단에서 요청 주소가 $whitelist에 속한 경우 flag를 출력하도록 되어 있..
Sunshine CTF Web 1번 SQL Injection 문제입니다. 링크에 접속하면 로그인 페이지가 주어집니다. 적당히 입력하여 제출하면 잘못된 입력이라는 오류가 출력됩니다. 싱글 쿼트를 삽입하면 메시지가 출력되는데 이를 통해 Sqlite3를 사용하고 있다는 것을 알 수 있습니다. Order by 절을 사용하여 컬럼의 개수를 알아낼 수 있습니다. 시큐어 코딩이 전혀 되어있지 않으므로 Union 절도 문제없이 사용이 가능합니다. Sqlite3에서 테이블을 확인하는 쿼리를 통해 모든 테이블과 쿼리문을 확인할 수 있었습니다. users 테이블에 flag 라는 컬럼이 존재하는 것이 눈에 띕니다. Group_concat 문을 통해 모든 flag 컬럼 데이터를 확인하는 것으로 문제 해결이 가능했습니다.
Sunshine CTF Scripting 1번 문제에 주어진 주소로 접속해보면 0부터 999 사이의 숫자를 하나 낼테니 그대로 다시 보내라고 합니다. 값을 입력하고 난 이후에 답이 주어진다는 것인데요. 정확히 똑같은 순서와 값이 반복되기 때문에 일단 입력하고, 주어지는 값을 저장했다가 다시 시도하면 됩니다. import socket from time import sleep import sys A = [] while True: s = socket.socket() s.connect(('tw.sunshinectf.org', 4101)) s.recv(1024) s.recv(1024) if len(A) != 0: s.send(('\n'.join(A)+'\n').encode()) sleep(1) res = s.re..