web hacking

layer7 8차시 과제 - webhacking.kr 44번

leesu0605 2022. 5. 24. 21:08

· 이 페이지에 들어가보니 name이라는 사용자 입력칸이 있었고, 제출 버튼과 소스보기 버튼이 있었다. 아무 값이나 넣어서 제출해보니 'hello! {name}' 이런 식으로 출력되는 것 같았다.

화면에 출력된 값

· 다음으로 소스보기에 들어가보니 내 생각이 맞았다는 것을 알 수 있었고, system()함수를 그 안에 필터링 없이 사용자 입력값을 넣어 실행하는 것으로 보아 command injection이라는 것을 알 수 있었다.

<?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>

· 따라서 id값에 따옴표를 탈출하기 위해 '을 입력하고, 다른 명령어를 실행하기 위해 세미콜론(;)을 넣어준 뒤, id 뒤에 있는 따옴표에서 오류가 안 나게 하기 위해 ls명령어를 넣어주되, 앞에 따옴표를 하나 넣어주면 화면에 ls의 결과가 출력됨을 알 수 있다.

- ';'ls -> "echo 'hello ! ';'ls'"

· 화면에 나온 결괏값들 중, flag라는 문자열이 포함된 파일 이름을 발견할 수 있었는데, url 변경으로 이 파일 경로로 접속해봤더니 플래그가 나왔다.

url 변경으로 파일을 읽어온 결과