[HackCTF] Web (가위바위보)
2021. 11. 29. 17:27
Wargame/HackCTF
가위바위보 문제 파일업로드 취약점 문제 파악을 위해 페이지 소스를 살펴봤지만, 딱히 이상한 건 없었다. 그때 오른쪽 위쯤에 위와 같은 설정 부분이 있길래 클릭해보았다. 클릭하니 이름을 변경하고, 프로필 사진을 변경할 수 있었다. (-> 파일 업로드 공격이 가능할 것 같다.) php3나 png 확장자로 변경해서 업로드해도 똑같았다. 확장자가 아닌 다른 것으로 필터링을 하는 것 같다. (파일 시그니쳐를 통해 확인하는 듯) -> 따라서 닉네임 또한 쉘 파일과 같은 이름(shell.php)으로 변경해준 뒤, 해당 파일 경로에 접근해보았다. 이곳에 있는 flag.txt 파일을 읽으니 flag를 얻을 수 있었다! HackCTF{H1_y0u_ju5t_n0w_exp3r1enc3d_W3b5h3ll!} 플래그 획득!
[HackCTF] Web (LoL)
2021. 11. 25. 21:30
Wargame/HackCTF
LoL 문제 SSRF 문제 local이 아니라는 문구가 뜬다. (local로 접속해야됨을 알 수 있다.) 해당 서버에서 다른 서버로 접속함을 알 수 있었다. -> ssrf 가능성이 보임. 역시나 POST 방식으로 user 값을 입력받고 url 값과 보내서 해당 사이트에 접속하는 것 같다. 만약, 해당 사이트를 http://127.0.0.1:2035 와 같은 형식으로 보낸다면 로컬로 문제 사이트에 접속할 수 있을 것이다! 좀 더 우회가 필요할 것 같아, ssrf 우회법에 대해 검색해보았다. 참고 : https://umbum.dev/473 SSRF Server Side Request Forgery 웹 어플리케이션이 외부로 request를 보낼 대상을 설정할 때, 뿐만 아니라 외부로 request를 보낼 수 ..
[HackCTF] Web (Cookie)
2021. 11. 25. 21:29
Wargame/HackCTF
Cookie 문제 쿠키 관련 문제인 것 같다. value 값이 base64 encoding 되있는거 같아서 decode 시켰다. (디코딩을 세번하니 아래와 같이 값이 나왔다.) {"id":"2","type":"guest"} 위 값을 {"id":"1","type":"admin"} 로 변경한 뒤, 똑같이 세 번 인코딩시켜 쿠키에 넣어보면 아래와 같이 페이지가 뜬다. admin의 패스워드 값을 맞춰야하는 것 같다. 마침 쿠키값에 PassAdmin 이라는 쿠키가 존재했다. 문제는 패스워드를 모른다는 것인데, 이는 strcmp 취약점을 이용해 풀 수 있었다. Strcmp 취약점이란? strcmp에서 문자열과 배열을 비교시 NULL을 반환하는 취약점 -> NULL == 0 으로 느슨한 비교를 할 때 True가 반환..
[HackCTF] Web (Home)
2021. 11. 25. 21:28
Wargame/HackCTF
Home 문제 클라이언트 ip를 필터링하는 것 같다. 어떻게하면 ip를 다른 주소로 바꿀 수 있을까? (먼가 웹 프록시를 이용하면 될 것 같은 느낌) 구글링을 하다가 X-Forwared-For 라는 것을 발견했다. XFF 는 HTTP Header 중 하나로 HTTP Server 에 요청한 clinet 의 IP 를 식별하기 위한 사실상의 표준이다. 프록시로 X-Forwared-For 헤더를 127.0.0.1 값으로 추가해서 패킷을 보내면 된다! 참고 : https://www.lesstif.com/software-architect/proxy-client-ip-x-forwarded-for-xff-http-header-20775886.html
[HackCTF] Web (Input Check)
2021. 11. 25. 21:08
Wargame/HackCTF
Input Check 문제 strcmp 취약점 힌트 : Input Command check가 배열 타입이다. 'php input 배열 취약점' 이런식으로 구글링 했더니 strcmp 취약점을 찾을 수 있었다. int strcmp ( string $str1 , string $str2 ) strcmp 함수의 원형은 위와 같다. 각 str1과 str2를 인자로 넣어주면 리턴값으로 두 값이 같으면 0, 다르면 0이 아닌 값을 리턴한다. 이때, 인자로 string이 아닌 배열을 넣어줄 경우, strcmp함수는 NULL을 반환하는 취약점이 발생한다. (특정 PHP 5.3 버전에서 발생) $a=get['text'] if(strcmp("flag",$a)==0) 즉, strcmp에서 문자열과 배열을 비교시 NULL을 반환..
[HackCTF] Web (Time)
2021. 11. 25. 20:44
Wargame/HackCTF
Time 문제 if 문을 통과하려면, time 값이 숫자여야하며 상당히 큰 수여야 하는데 문제는 밑에 sleep() 함수에 time 값이 들어가 플래그가 뜨는데 어엄청 오래걸린다. 그래서 저 부분을 우회해야 할 듯 싶다. 우선 sleep 부분에 (int) 함수가 굳이 왜 있을까 생각해보았다. 만약 flag가 소수라면 (int)를 통해 소수점 윗부분만 잘릴 것이다. 소수이면서 큰 값을 가진 수가 머가 있을까 생각하니, 지수 표기법 e가 생각났다. 지수표기법으로 변환하면 위에 if 문들을 통과하면서 sleep() 부분을 우회할 수 있을 것이다! 6.48e+6 지수표기법으로 변환한 값을 입력하면 대략 6초뒤에 플래그가 뜬다.
[HackCTF] Web (마법봉)
2021. 11. 25. 20:35
Wargame/HackCTF
마법봉 문제 240610708 값을 md5 한 결과값과 flag 값을 sha1 한 값이 같으면, 플래그를 출력해준다. 어.. 어디선가 풀어본 문제같다. 매직 해쉬 문제이다. 매직 해쉬란 문자열과 숫자를 암호화한 결과 0e로 시작되는 문자열이 나올 때 발생하는 것으로, php에서는 0e로 시작하는 문자열을 자동으로 숫자 0으로 취급하여 발생한다. 매직 해쉬 표를 찾아서, sha1 매직 넘버를 입력하면 된다.