사이트 : CLASS 101
강의명 : 화이트햇 해킹, IT 취준생과 현직개발자를 위한 웹 해킹 입문
공부 내용
3. 웹해킹
1) OWASP TOP10 알아보기
사이트 : https://sucuri.net/
RESOURCES -> GUIDE -> OWASP Top Security Risks & Vulnerabilities 2021 Edition 클릭
- Injection : 공격자가 악의적인 데이터를 삽입하여 애플리케이션의 SQL, LDAP, XML 등의 쿼리를 변조하거나 실행시켜 시스템을 공격하는 취약점.
- Broken Authentication : 인증 시스템이 약하거나 잘못 구현되어 공격자가 사용자로 가장하거나 계정 탈취가 가능한 취약점.
- Sensitive Data Exposure : 민감한 정보(비밀번호, 신용카드 번호 등)가 암호화되지 않거나 안전하게 저장되지 않아 유출될 위험이 있는 취약점.
- XML External Entities (XXE) : XML 파싱 시 외부 엔티티가 참조되어 시스템 파일을 읽거나 원격 서버와 통신하는 등의 공격을 가능하게 하는 취약점.
- Broken Access Control : 사용자가 자신의 권한을 넘어선 리소스에 접근할 수 있게 되는 취약점. 권한이 없는 사용자가 중요한 정보에 접근할 수 있음.
- Security Misconfigurations : 시스템, 서버, 데이터베이스 등에서 잘못된 설정이나 기본값을 사용하여 보안이 취약해지는 상태.
- Cross Site Scripting (XSS) : 공격자가 악성 스크립트를 웹사이트에 삽입하여 다른 사용자의 브라우저에서 실행시키는 공격.
- Insecure Deserialization : 신뢰할 수 없는 데이터를 역직렬화할 때 발생하는 취약점으로, 공격자가 악의적인 데이터를 주입하여 코드 실행이나 서버를 공격할 수 있음.
- Using Components with Known Vulnerabilities : 알려진 취약점을 가진 라이브러리나 컴포넌트를 사용하는 경우, 이를 통해 공격자가 시스템을 침해할 수 있음.
- Insufficient Logging and Monitoring : 보안 이벤트나 공격을 감지할 수 있도록 충분한 로깅과 모니터링이 이루어지지 않아, 사고 발생 시 신속하게 대응할 수 없는 취약점.
2) SQL Injection
공격방법: 개발자의 의도 범위를 벗어남.
id 와 pw 에 내가 기존에 입력해두었던 DB값이 아닌 다른 값을 넣어 로그인을 시도함
-- 올바른 id, pw 입력시,
-- 잘못된 id,pw 입력시
<SQL Injection 공격하기>
id 부분에 잘못된 문구를 넣어 로그인을 시도함
1) id를 알고 있을 경우
id : admin'--
// '를 넣으면 '의 개수가 홀수가 되어 오류가 발생함 그뒤로 -- (주석)을 넣어 오류를 잡음
결과 : 로그인성공
2) id를 모를 경우
id : aaaa' or 1<2--
//참값을 넣어 query문을 참값으로 만들고, -- 로 뒷부분은 주석처리함
결과 : 로그인 성공(DB내의 user id중 가장 첫번째값이 출력됨)
** SQL Injection 방어 방법
1) ' 가 문자로 인식되지 않도록 함
id='admin\' -- '
단점 : id에 숫자가 있을 경우 해결되지 않음
$ cd var/www/html
$ sudo vi login.php
addslashes 문구 추가
결과 : 역슬래시 생성됨 로그인 실패
2) Prepared Statement 방식 : 사용자 입력 범위 지정
$ cd var/www/html
$ sudo vi login_safe.php #login_safe.php 파일 생성
아래 코드 입력
(중간부 prepared statement 부분 확인)
<?php
$id = $_GET['id_box'];
$pw = $_GET['pw_box'];
$db_conn = mysqli_connect("localhost", "webhacking", "webhacking", "login");
if(!$db_conn) {
echo mysqli_connect_error();
echo "connect error";
exit();
}
$query = "select id from user where id=? and pw=?";
$stmt = mysqli_prepare($db_conn, $query);
if($stmt === false) {
echo('prepared statement failed : '.mysqli_error($db_conn));
exit();
}
$bind = mysqli_stmt_bind_param($stmt, "ss", $id, $pw);
if($bind === false) {
echo('binding failed : '.mysqli_error($db_conn));
exit();
}
$exec = mysqli_stmt_execute($stmt);
if($exec === false) {
echo('execute failed : '.mysqli_error($db_conn));
exit();
}
$result = mysqli_stmt_get_result($stmt);
$result_chk = 0;
if($result) {
if($row = mysqli_fetch_assoc($result)) {
echo "id = ".$row['id'];
$result_chk = 1;
} else {
echo "login failed";
}
mysqli_free_result($result);
mysqli_stmt_close($stmt);
} else {
echo "query error";
}
mysqli_close($db_conn);
?>
login_safe.php를 login.html에 반영해주어야함
$ sudo vi login.html
# html에서 실행 php 파일 수정
결과: Prepared Statements 로 인해 로그인 실패
<Reflected XSS 공격하기>
공격방법 : 요청에 따라 반사되는 응답을 통해 공격하는 방법
사이트 : https://xss-game.appspot.com/
사이트로 대신 테스트 할 수 있음
창에 test123 입력 -> 결과값에 내가 입력한 값이 그대로 출력됨을 확인할 수 있음
get 방식으로 출력됨을 추측할 수 있음
값에
<script>alert('3');</script>
입력
결과 : 성공
** XSS 방어 방법
범위를 벗어날수없도록 특수문자 필터링 필요함
필터링 방법
1) HTML Entity Encoding(추천) -> 화면에는 특수문자로 표현되나 HTML 코드로 취급되지 않게 변환하는 방식
2) 직접 서버에서 특수문자 필터링
강의를 마치며
강의 추천 사이트 및 공부방법
학습사이트
https://w3schools.com
https://opentutorials.org
wargame 추천사이트
강의시 다뤘던 사이트
- SQL Injection https://los.rubiya.kr/
- XSS https://xss-game.appspot.com/
(인코딩사이트 : https://www.urlencoder.org/ko/)
그 외
https://webhacking.kr
https://suninatas.com
https://dreamhack.io
해답은 여러 사이트에서 다뤄지고 있으므로 검색할 것
추천책
1. 그림으로 배우는 http & network basic
2. 웹해킹 & 보안 완벽가이드
'요즘공부' 카테고리의 다른 글
CLASS101 화이트햇 해킹, IT 취준생과 현직개발자를 위한 웹 해킹 입문 강의 공부3 (0) | 2024.12.14 |
---|---|
CLASS101 화이트햇 해킹, IT 취준생과 현직개발자를 위한 웹 해킹 입문 강의 공부2 (1) | 2024.12.14 |
CLASS101 화이트햇 해킹, IT 취준생과 현직개발자를 위한 웹 해킹 입문 강의 공부1 (0) | 2024.12.09 |