44번 문제에 들어가면 다음과 같은 화면이 반겨준다.
아무거나 입력하고 submit을 누르니 hello! [입력값]의 형태로 출력한다.
동작 원리를 분석하기 위해 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>
form input에서 받아온 값의 첫 번째부터 다섯 번째의 문자까지를 $id에 넣어주는 모양이다.
처음에 저 중괄호까지 처리해야하는줄 알고 애썼다. (나 자신이 PHP코딩해본 사람이 맞나 싶었다.)
저 중괄호의 의미를 모르시는 분은 [사악미소의 현대마법의 공방 - [PHP] 변수 출력 - { } 중괄호의 사용]를 봐주세요.
암튼 이어서 해보자면 우리는 5글자만으로 ls를 실행해야 하는 상황이다.
처음에 나는 단순히 ';ls만 하면 될 줄 알았다.
Joon : 본인 방금 ';ls 로 플래그 따는 상상함.
Webhacking.kr : 하지만 어림도 없지!
이때 깨달았다. ls가 필터링된다는 사실을.
아무것도 출력되지 않는다는 것을 봐서 ';는 필터링되지 않았다는것을 알 수 있다.
리눅스 터미널에서 single quotation을 포함한 명령을 입력해도 없는것으로 인식한다는 것을 활용하여 이 필터링을 우회할 수 있었다.
';는 그대로 가져가고 ls 사이에 '를 추가하여 ';l's를 만들었고, 이를 입력했더니 놀랍게도 ls의 결과가 나왔다.
찾은 플래그 파일을 주소에 입력하여 들어가보았더니 플래그가 나왔다.
CLEAR!
Off the record
니시노 카나의 노래가 좋으신건가요 커버가 좋으신건가요? ㅎㅎ
아마 문제 풀이에 성공하신분은 이 문구를 이해하실 수 있으실겁니다 :)
'보안공부 > Webhacking.kr 풀이' 카테고리의 다른 글
Webhacking.kr 60번 문제 풀이 (0) | 2019.09.15 |
---|---|
Webhacking.kr 48번 문제 풀이 (0) | 2019.09.14 |
webhacking.kr 11번 문제 풀이 (0) | 2019.06.03 |
webhacking.kr 47번 문제 풀이 (0) | 2018.09.12 |
webhacking.kr 33번 문제 풀이 (1) | 2018.09.06 |