소스보기
<?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>
힌트가 많이 주어졌다.
ls 명령어를 통해 현재 디렉토리에 있는 파일의 목록을 실행해봐야 한다고 알려준다.
우선, 문제를 해결하기 위해 간단히 도움될만한 부분에 대해서 설명을 하고 넘어가겠다.
명령어 연속 실행
세미콜론 ' ; ' : 앞의 명령어의 성공여부에 상관없이 다음 명령어가 실행 (그냥 단순히 앞의 명령어부터 독립적 연속적 실행)
더블 앰퍼샌드 ' && ' : 앞의 명령어가 성공했을 때에만 다음 명령어가 실행. 이전 명령이 성공했을 때 다음 명령을 실행하려면 사용한다.
더블 버티컬바 ' || ' : 앞의 명령어가 성공하면 뒤에 오는 명령어를 실행하지 않고(논리연산자 단축평가 느낌), 앞의 명령어가 실패하면 뒤의 명령어를 실행
앰퍼샌드 ' & ' : 앞의 명령어를 백그라운드로 돌리고, 동시에 뒤의 명령어를 즉시 실행
버티컬바 ' | ' : 앞의 명령어의 결과를 입력값으로 뒤의 명령어를 실행. grep명령어와 묶어서 많이 사용한다.
문제에서 이를 이용하면 되겠다.
입력 창의 글자 제한은 5자인데 다양한 답이 있겠다.
'&ls'
->
echo 'hello! '&ls''
( ls바로뒤에 붙어있는 ''는 결과에 영향을 주지 않더라. ls , ls'' 출력결과 동일. ''무시되는듯(단, 띄어쓰기 하고 넣어주면 안됨) )
';ls'
->
echo 'hello! ';ls''
( 마찬가지로 ls바로뒤에 붙어있는 ''는 결과에 영향을 주지 않더라 )
';'ls
->
echo 'hello! ';'ls'
여튼, 위의 방법들을 활용하면 flag에 관한 결과를 얻을 수 있다. (본인은 ';ls' 사용)
hello!는 echo로 출력된 문이고, ls의 결과로는 flag_29cbb98dafb4e471117fec409148e9386753569e와 index.php가 나온 것을 알 수 있다. 처음에는 이 문자열을 보자마자 16진수 40자리인 것을 보고 SHA1 해싱을 크랙해야 하는 줄 알았다.
참고
16진수 40자리 = SHA1
16진수 32자리 = MD5
그래서 크랙사이트를 이용해봤는데 답이 안나온다. 다시 원점으로 돌아와서 보면, ls의 결과로 flag_29cbb98dafb4e471117fec409148e9386753569e와 index.php를 얻었다. 그럼 현재 웹 페이지의 경로 디렉토리에 index.php 말고도 flag_29cbb98dafb4e471117fec409148e9386753569e가 있다는 것. 따라서 웹 페이지 경로에 이 값을 넣어주면
FLAG{y2u.be/sW3RT0tF020}
라는 출력을 갖는 창이 나온다. 이를 Auth 메뉴에 넣어주면 끝
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 46번 (0) | 2020.11.14 |
---|---|
[Webhacking.kr] 45번 & 나중에 알게 되면 다시보기 (0) | 2020.11.13 |
[Webhacking.kr] 43번 (0) | 2020.11.10 |
[Webhacking.kr] 42번 (0) | 2020.11.10 |
[Webhacking.kr] 41번 (0) | 2020.11.10 |