websec.fr level19 write-up

Captcha가 있길래 이 문제를 풀기 위해서 머신러닝으로 저기에 있는 글자를 알아와야하나 생각이 들어서 지금까지 굳이 풀려고 하지 않으려고 했지만, 오늘 이 문제 소스를 보니까 꽤 쉬운 것 같아서 write-up을 작성해보려고 한다. 참고로 아직 풀진 못했다. 로컬에서는 분명히 풀리는데 서버에서는 안풀리는 문제다. random.php의 소스이다. 여기서 microtime(true)로 seed를 설정하는데 여기서 취약점이 발생한다. srand() 함수를 통해 같은 값을 설정할 경우 rand() 의 값이 똑같아진다. 다음 코드를 예를 들어보면 이해하기 쉽다. #!/usr/bin/env php

websec.fr level13 write-up

고등학교 1학년 땐가 페이스북에서 Sakuya Izayoi님께서 "PHP에서 성능 개선을 위한 유용한 팁"이라는 제목으로 어떤 글을 하나 공유하신 적이 있었다. 여러가지 팁들이 있었지만, 가장 인상깊었던 팁 중 하나는 반복문의 조건에 함수가 들어가 있으면 그 함수는 반복문이 한 번 실행될 때마다 호출되기 때문에 성능 향상을 위해서라면 조건문에는 함수를 넣지 말라는 것이었다. 그게 사실 그냥 넘길 만한 사소한 것이어서 나에게는 적쟎은 충격이었기 때문에 아직까지도 반복문을 사용할 때면 머릿 속에 또렷이 그 문장이 새겨진다.( * 링크 : http://www.qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=77) 이 때 이후로 해당사항을 지키면서 코딩을 해왔는데 이걸 여기..

websec.fr level11 write up

레드벨벳 아이린 해당 문제의 힌트로 AS 가 주어졌는데 코드를 보면 as 가 필터링되어 있는 것을 알 수 있다. /* Rock-solid too! */ $special1 = ["!", "\"", "#", "$", "%", "&", "'", "*", "+", "-"]; $special2 = [".", "/", ":", ";", "", "?", "@", "[", "\\", "]"]; $special3 = ["^", "_", "`", "{", "|", "}"]; $sql = ["union", "0", "join", "as"]; $blacklist = array_merge ($special1, $special2, $special3, $sql); 근데 MySQL에서와 마찬가지로 Alias function은 as ..

websec.fr level09 write up

ㄹㅇ루다가 세젤예 에이프릴 이나은 진짜 해당 문제는 정말 쓸데없는 곳에서 삽질을 정말 많이 했던 문제이다. semicolon 없이 execution 하는 것을 우회하려고 얼마나 많은 삽질을 했던지ㅋㅋㅋ 결론적으로 해당 문제는 stripcslashes() 함수를 이용해서 푸는 문제이다. stripslashes() 함수는 \ (backslash) 가 없어지는 동시에, \x00 \000 같은 character 들이 함께 escape되기 때문에 forbidden character 를 사용할 수 있게 된다. [*] exploit code : https://github.com/ch4n3-yoon/write-ups/tree/master/websec.fr/level09

websec.fr level22 write up

에이프릴 이나은으로 시작하는 즐거운 write up H3X0R CTF의 geek test 문제를 출제하면서 이런 류의 문제는 자신있었는데ㅋㅋㅋ 정말 쉽게 풀었다. var_dump 함수를 이용해서 $a 를 출력하면 flag 를 얻을 수 있다. [*] exploit code : https://github.com/ch4n3-yoon/write-ups/tree/master/websec.fr/level22

websec.fr level24 write up

오늘도 어김없이 에이프릴 이나은으로 시작하는 write up 해당 문제는 webshell upload로 푸는 문제이다. webshell 이라는 확신이 들었던 이유는 다음 코드가 있었기 때문. (진짜 이 문제 풀려고 좀 시간 많이 투자했었는데 너무 허무하게 풀림ㅋㅋ) if (strpos($data, '

websec.fr level10 write up

에이프릴 이나은 진짜 너무 예쁘다ㅠㅠㅠㅠㅠ 이 문제는 PHP의 Loose compare 를 통한 magic hash vulnerability 를 이용해서 풀었다. 밑의 부분에서 취약점이 발생한다. $hash = substr (md5 ($flag . $file . $flag), 0, 8); if ($request == $hash) { show_source ($file);} $request 와 $hash 의 값을 ' == ' Loose compare를 통해서 비교하는데 만약 md5() 함수를 통해서 0e~~~ 가 나오면 $requests 가 0 일 때 true 로 되고 show_source 를 통해 flag.php를 볼 수 있게 된다. 그래서 처음에는 flag.php 앞에 './' 를 계속 붙여가면서 md5..

websec.fr level25 write up

사진은 Redvelvet의 조이~~~For my foreigner visitors, she is Joy in Redvelvet,, what a beautiful woman... PHP의 parse_url() 함수는 버그가 굉장히 많이 발생하는 함수이다. 그래서 약간의 버그를 찾아본 뒤, 살짝 조지면 된다. 포트를 이용해서 host 값을 혼동시킬 수 있는 점을 이용하여 플래그를 얻을 수 있다. LFI인 줄 알고 오지게 삽질햇었는데ㅋㅋㅋㅋ [*] url : http://websec.fr/level25/index.php?asdfa=sdfasdf:8080/asdfasdfasdf&page=flag

websec.fr level28 write up

레드벨벳 아이린 ~ ㅎㅎ @아육대\(For my blog foreign visitors! she's name is Irene who is a leader of girl group, RedVelvet) 문제 소스를 처음 봤을 때는 crc32() 를 우회해야하는 줄 알았지만, sleep(1) 함수를 보자마자 exploit 방법이 생각났다. $filename = md5($_SERVER['REMOTE_ADDR']) . '.php'; $fp = fopen($_FILES['flag_file']['tmp_name'], 'r'); $flagfilecontent = fread($fp, filesize($_FILES['flag_file']['tmp_name'])); @fclose($fp); file_put_contents..

websec.fr level14 solving

이 문제는 RCE를 이용해서 플래그를 얻는 것 같은데, RCE는 어떻게 할지 구상을 했지만 어떻게 풀어야 할지를 모르겠다. Challenge Analyse 필터링을 보면, 관리자가 안전하다고 여기는 4개의 함수말고는 사용하지 못하도록 되어있다. 또한, 전역변수에 대한 접근이 제한된 것을 볼 수 있다. PHP function trick? 이런 식으로 "문자열"(); 식으로 함수를 불러올 수 있다. PHP Array access trick? Curly brace로도 Array의 Element 에 접근할 수 있다. 이것말고도 current, next 같은 함수를 이용해도 되지만, 이 문제에서는 eval code가 25byte로 길이가 제한되어 있으므로 그런 류의 함수를 사용하는 것은 힘들어 보인다. RCE P..