CTF/웹해킹
[HackingCampCTF] World Wide Web - 웹해킹 / LFI
SecurityMan
2023. 4. 28. 11:00
웹해킹 문제
문제 푸는동안 캡쳐을 제대로 하지 못했다.
phpmyadmin 의 취약점과 관련된 문제이다.
반응형
첫 부분을 캡쳐를 못했는데
문제페이지에 접속해보면 어떤 사진 하나가 덩그러니 있다.
F12를 눌러 개발자 도구를 살펴보면
이미지의 alt 값이 /phpMyAdmin 으로 되어있는데
이걸 통해서 /phpMyAdmin 이라는 경로가 있다는 것을 알아냈다.
주소창에 /phpMyAdmin 을 입력해서 들어가보면
로그인 창이 하나 나오는데
역시나 F12 를 눌러 개발자도구를 확인해보면
id 가 wwwweb, pw 가 wwwweb!@# 인것을 확인할 수 있었다.
아이디, 비밀번호를 입력하면
이렇게 정상적으로 로그인이 된다.
phpMyAdmin 의 버전을 확인해보니
4.8.1 이었는데,
해당 버전은 LFI 할 수 있는 취약점이 있었다.
(https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-12613)
해당 취약점은 LFI 로 RCE 까지 할 수 있는 위험한 취약점이다.
public static $goto_whitelist = array(
'db_datadict.php',
'db_sql.php',
'db_events.php',
'db_export.php',
'db_importdocsql.php',
'db_multi_table_query.php',
'db_structure.php',
'db_import.php',
'db_operations.php',
'db_search.php',
'db_routines.php',
'export.php',
'import.php',
'index.php',
'pdf_pages.php',
'pdf_schema.php',
'server_binlog.php',
'server_collations.php',
'server_databases.php',
'server_engines.php',
'server_export.php',
'server_import.php',
'server_privileges.php',
'server_sql.php',
'server_status.php',
'server_status_advisor.php',
'server_status_monitor.php',
'server_status_queries.php',
'server_status_variables.php',
'server_variables.php',
'sql.php',
'tbl_addfield.php',
'tbl_change.php',
'tbl_create.php',
'tbl_import.php',
'tbl_indexes.php',
'tbl_sql.php',
'tbl_export.php',
'tbl_operations.php',
'tbl_structure.php',
'tbl_relation.php',
'tbl_replace.php',
'tbl_row_action.php',
'tbl_select.php',
'tbl_zoom_select.php',
'transformation_overview.php',
'transformation_wrapper.php',
'user_password.php',
);
사용자 입력값에 대한 검증이 미흡한점을 노려
위에 있는 whitelist 에 있는 페이지들을 이용해서 공격한다.(ex. db_sql.php)
public static function checkPageValidity(&$page, array $whitelist = [])
{
if (empty($whitelist)) {
$whitelist = self::$goto_whitelist;
}
if (! isset($page) || !is_string($page)) {
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page); // url decoding
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
return false;
}
db_sql.php? 와 같이 입력해 checkPageValidity() 를
bypass 하기에 LFI 가 가능하다.
문제 설명에서 플래그가 있다고 말한 /tmp/flag 파일을
위와 같이 LFI 를 통해 불러오면 된다.
반응형