본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 44번

by Hevton 2020. 11. 12.
반응형

시작화면

 

소스보기

<?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' 사용)

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