웹 해킹/CTF19 XSS(Cross Site Scripting), CSRF(Cross Site Request Forgery) 개념 XSS란? XSS는 공격자가 Target Website를 통해 희생자의 브라우저에 악성 코드를 심는다. 희생자는 Target Website를 신뢰하므로 Target Website는 세션이 연결된 사용자가 할 수 있는 모든 것을 희생자의 브라우저에서 할 수 있다. 예를 들어 사용자의 쿠키 값을 가져올 수 있다. Cross-Site Request란? 위 그림을 보면 Same-site request와 Cross-site request의 차이를 알 수 있다. A사이트의 페이지에서 A사이트에 요청을 보내면 Same-site request이고 A사이트의 페이지에서 B사이트에 요청을 보내면 Cross-site request이다. 여기서 문제점은 B사이트에서는 A사이트의 페이지에서 B사이트의 페이지에서 요청을 보냈는지.. 2021. 11. 12. [HackCTF] Cookie 문제 서버에 접속하면 위와 같이 쿠키 사진이 있습니다. 따라서 쿠키를 이용해서 문제를 풀라는 출제자의 의도를 추측할 수 있습니다. 쿠키를 확인하면 Cookie와 PassAdmin이라는 값이 있습니다. Cookie -> WlhsS2NGcERTVFpKYWtscFRFTktNR1ZZUW14SmFtOXBXak5XYkdNelVXbG1VVDA5 PassAdmin -> j0n9hyun 쿠키값을 보면 16진수가 아닌 임의의 문자들이 있는데 대문자 소문자 숫자들로만 구성된것으로 보아 base64로 인코딩되었을 가능성이 큽니다. base64로 복호화 3번을 반복하면 아래와 같은 값을 얻을 수 있습니다. {"id":"2","type":"guest"} 이번에는 guest를 admin으로 바꿔준 후 다시 인코딩을 3번하겠습니다... 2021. 10. 17. [HackCTF] 가위바위보 문제 서버에 접속하면 위와 같이 가위바위보를 할 수 있습니다. 스크립트 부분의 코드는 아래와 같습니다. 처음에는 아래 부분을 보고 난독화를 해결하는 웹 리버싱 문제가 아닐까 했지만 16진수로 되어있는 부분을 아스키코드 문자열 형태로 변경해봐도 의미있는 함수나 힌트가 보이진않는다. 위 그림의 오른쪽 상단을 보면 설정 창이 있다. 설정을 클릭해준다. 설정 창에 들어가면 프로필 이미지를 업로드 할 수 있는 창이 있으므로 웹쉘 문제가 아닐까 생각할 수 있다. 하지만 jpg나 png파일이 아니면 이미지 파일이 아니라는 오류가 뜬다. 확장자를 거짓으로 jpg를 붙여도 이미지 파일이 아니라고 하는 것을 보아 확장자가 아닌 파일 시그니처로 이미지 파일인지 아닌지 판별한다는 것을 추측할 수 있다. 따라서 jpg의 시그니.. 2021. 10. 17. [HackCTF] Home 문제 서버에 접속하면 위와 같이 머리말을 생각해보라는 힌트를 줍니다. 그리고 아래 현재 내 아이피가 출력됩니다. 코드는 아래와 같습니다. 이 사이트에서는 일부 IP를 필터링하고 있습니다. 해결하기 위한 단서는 머리말을 생각해보는 것뿐입니다. 그럼 건투를 빕니다! 163.152.3.162인증되지 않은 IP 주소입니다. 딱히 힌트가 될만한 것은 없습니다. 처음에 blink에 opacity를 100으로하여 안깜빡이게 만들었지만 의미가 없었습니다. 그리고 쿠키가 인자를 찾아보아도 없습니다. 머리말 힌트에서 헤더에 무언가를 해야한다는 것은 알 수 있었습니다. 구글에 검색해서 http ip address header에 대해서 검색하면 아래 X-Forwarded-For: (ip 주소) 와 같은 형식으로 ip값을 넘길.. 2021. 10. 17. [HackCTF] Input Check 문제에 접속하면 flag를 입력하라는 문구가 출력되지만 flag를 입력하면 필터링에 걸린다. 소스 코드를 보면 Array Type이라는 힌트가 있다. 구글에 php array type 취약점이라고 검색하면 strcmp 취약점이 결과로 나온다 strcmp 취약점이란 strcmp에 비교 구문에 문자열이 아닌 배열을 넣으면 반환 값이 0이 되버리는 취약점을 말한다. 예시는 아래와 같다. https://3v4l.org/ 위 그림을 보면 버전 php 5.3 버전부터 결과가 yes로 바꼈는데 결과가 yes란 의미는 strcmp 함수가 배열 "asdfasdf"와 문자열 admin을 같다고 판단한 것이다. 그 이유는 배열이 인자로 들어가면 strcmp는 php 5.3버전부터 NULL을 반환하는데 아래 그림을 보면 NU.. 2021. 9. 16. [HackCTF] Time 문제 서버에 접속하면 위와 같이 시간을 입력하면 해당 시간 후에 플래그가 출력되는데 조건이 5184000보다 크고 7776000보다 작은 시간을 입력하면 플래그가 해당 시간 뒤에 출력된다. 다행히 PHP에서 int 형으로 변환할때 뒤에 소수점을 버리기 때문에 아래와 같이 우회할 수 있다. 6000000 => 6*1000000 => 6.0 * 10*6 => 6.e6 소수점은 사라지므로 .e6이 사라지면서 6이 되고 6초 뒤에 플래그가 출력된다. 2021. 9. 16. [HackCTF] 마법봉 문제에 접속하면 마법을 부여하면 뚫을 수 있다고 한다. 코드는 아래와 같다. Nah... 문제 힌트는 매직이라는 단어이다. 매직은 매직 해시를 의미하는 것이라고 추측할 수 있습니다. 마침 코드에 입력된 240610708은 md5의 매직 넘버에 해당하므로 sha1에 10932435112를 입력하면 양 쪽 모두 0이 되어 조건을 만족할 수 있습니다. 2021. 9. 12. [HackCTF] Guess me 문제 서버에 접속하면 위와 같이 입력창에 guess 변수를 입력하는 방식으로 작동한다. secret.txt에 접속하면 위와 같이 이미 막혀있어서 방법이 없다. 눈에 띄는 부분은 extract 함수인데 extract 함수는 취약한 함수로 유명하다. 그래서 개발자들도 extract 함수를 사용하지 않는다. extract($_GET)은 GET으로 받은 파라미터를 각각 해당 값으로 저장하는 기능이다. 따라서 ?guess=&filename= 를 입력하면 guess, filename 둘 다 null값이 들어가고 이후 guest==secretcode 조건을 충족하여 플래그를 획득할 수 있다. 2021. 9. 10. [HackCTF] 보물 문제 사이트 접속하면 위와 같이 원피스 찾기 문제입니다. url에 get 방식으로 page를 20까지 입력해봐도 아래 16진수는 그때마다 내용이 바뀝니다. 따라서 수작업으로는 문제를 해결할 수 없습니다. import requests URL = "http://ctf.j0n9hyun.xyz:2025/?page=" for i in range(1,10000): response = requests.get(URL+str(i)) if "HackCTF" in response.text: print(i) break print("page="+str(i)) 위 코드는 page에 10000까지 모든 경우의 수를 검사합니다. 만약 response.text에 HackCTF가 있으면 플래그를 획득할 수 있습니다. 2021. 9. 10. 이전 1 2 3 다음