CTF, 워게임 문제 풀이/webhacking.kr

webhacking.kr 44번 문제

secumark 2022. 12. 10. 08:03
728x90

 

view-source를 해봤다.

 

<?php
  
if($_GET['view_source']){ highlight_file(__FILE__); exit; }
?><html>
<head>
<title>Challenge 44</title>
</head>
<body>
<?php
  
if($_POST['id']){
    
$id $_POST['id'];
    
$id substr($id,0,5);
    
system("echo 'hello! {$id}'"); // You just need to execute ls
  
}
?>
<center>
<form method=post action=index.php name=htmlfrm>
name : <input name=id type=text maxlength=5><input type=submit value='submit'>
</form>
<a href=./?view_source=1>view-source</a>
</center>
</body>
</html>

 

hello {$id}.. 그리고 ls를 실행하라고 한다.

id는 길이가 5까지만.. input할 수 있나봄.

  if($_GET['view_source']){ highlight_file(__FILE__); exit; }

view_source하면 highlight_file(__FILE__) 하고 exit;

 

name:에 secum을 입력했더니 (문자 5개까지만 입력) hello! secum이라고 한다.

음 그러면 이 id를 입력하는거 뒤에 또 다른 명령어를 입력하면 될거 같은데

이런식으로?

근데 이렇게하면 그냥 hello ; ls라고 한다.

 

아 여기서 간과한게 있다!!

 

system("echo 'hello! {$id}'"); 

이걸 잘 보면 방금처럼 ; ls 라고 입력하게 되면 그냥 이걸 {$id} 안에 있는 문자로 인식하기 때문에 

;에다 작은 따옴표를 씌워줘야한다.

"echo 'hello!';'ls'"

그럼 hello!까지만 echo를 하고, 그 다음에 ;로 명령어 구분을 해준 뒤, 그 다음 ls 명령어까지 실행할 수 있음!

 

 

 

또 난독화가 되어있는거 같은데 base64는 아닌거 같고.. 음

근데 뒤에 index.php가 있는걸 보면 이게 document 위치인가..?

 

flag_ ~ 이 값 전체를 index.php는 삭제해주고 입력했는데

 

flag 값이 나왔다.

 

 

 

굳!

728x90