Hacking (CTF)/Web

[webhacking.kr] Challange 44

gapsoo 2023. 11. 20. 23:06

http://webhacking.kr:10005/

 

Challenge 44

 

webhacking.kr:10005


[1] 문제

 

 

 

 

 

문제 페이지와 소스 코드이다.

 

1) "name:" 옆에 텍스트를 적고 제출할 수 있는 폼이 있다.  최대 5개의 문자까지 적을 수 있다.

 

2) 아래의 "view-source"를 누르면, 

 

 

이런 소스 코드가 적힌 화면이 나온다.

 

<?php
  if($_POST['id']){
    $id = $_POST['id'];
    $id = substr($id,0,5);
    system("echo 'hello! {$id}'"); // You just need to execute ls
  }
?>

 

이 부분에서 주석을 보니, " // You just need to execute ls"라고 적혀 있다. 

 

system~ 을 실행시키는 것이 문제 풀이의 핵심인 것 같다.

 

 

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

 

아래 부분에는 문제 페이지의 소스 코드가 적혀있다.

 

아래 부분(문제 페이지 작동 방식)을 간략하게 해석해보면,

내가 입력한 값이 id로 받아진 뒤 전송되고, index.php가 실행된다.

 

 


[2] 공격

 

 

"hi"라고 적어서 제출하면 "hello! hi"라는 문구가 출력이 된다.

 

 

<?php
  if($_POST['id']){
    $id = $_POST['id'];
    $id = substr($id,0,5);
    system("echo 'hello! {$id}'"); // You just need to execute ls
  }
?>

 

다시 이 부분을 참고하면,

내가 입력한 값이 system("echo 'hello! {$id}'");에서 {$id}안에 들어간다.

 

사용자가 폼을 제출하면, 제출된 ID 값을 받아와서 substr 함수를 사용하여 처음 5글자만 남긴다는 특징이 있다.

 

system 함수와 echo 명령어를 이용할 수 있다는 사실을 생각하며,

입력값을 통해 flag값을 알아내도록 할 것이다.

 

 

 

 

 

';ls' 를 입력하여 system("echo 'hello! ';ls''"); 이 전달되도록 하였다.

 

그랬더니 두 번째 페이지에서 현재 디렉토리 안에 있는 파일이 출력되었다.

'flag_~' 라는 글자가 출력되었는데 어떻게 활용해야 문제 풀이가 끝나는 것인지 잘 모르겠어서 고민을 해봤는데...

 

주소창을 보면, 현재 웹 페이지의 위치가 /index.php 인 것을 확인할 수 있다.

그래서 /flag_29cbb98dafb4e471117fec409148e9386753569e 로 이동하면 되지 않을까 싶어 입력해본 결과...

 

 

 

flag 값이 적혀있는 페이지로 이동할 수 있었다.

 

이 값을 Auth에 제출하면 된다.

 

더보기

플래그 값에 있는 유튜브 주소가 궁금해서 유튜브 검색창에 쳐봤는데 이런 결과가 나왔다.

뭐징?

 

 

 

'Hacking (CTF) > Web' 카테고리의 다른 글

[Webhacking.kr] old-52  (0) 2024.09.25
[Dreamhack/드림핵] Web  (2) 2024.04.29
[Dreamhack/드림핵] command-injection-1  (2) 2023.11.20
[Dreamhack/드림핵] Command Injection Advanced  (1) 2023.11.19
[Dreamhack/드림핵] baby-linux  (0) 2023.11.16