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 |