본문 바로가기
정보보안

정보보안7 8차시

by IT매니절 2024. 11. 3.

7차시는 여행으로 결석했기 때문에 교안을 보고 요약

 

php
fopen() : 파일과 url 오픈 $fp = fopen($filename, "r" or "a" or "w");
fread() : 파일 조회 fread($fp, filesize($filename));
fwrite() : 파일 저장 fwrite($fp, "file test\n");
fclose() : 파일 닫기 fclose($fp);

fgets() : 파일포인터 $fp가 가리키는 곳에서 엔터가 나올때까지 읽어서 값 리턴 fgets($fp);

파일이 존재 & 읽기 권한 허용시 조회 가능
존재하지 않거나 권한이 없을시 에러 발생으로 die() 함수로 작업 종료

sudo chcon -t httpd_sys_content_rw_t 파일명
=> se linux 때문에 권한 허용

JAVASCRIPT
참고
https://ko.wikipedia.org/wiki/자바스크립트
https://www.w3schools.com/js/default.asp

참조 예시
<script src="myscript.js"></script>

 

디버깅

F12 개발자도구 > Sources > 소스파일 

줄수 선택시 BP 브레이크 포인트 설정가능

F5로 실행 후, F10한줄실행, F11 함수 안으로 진입 하며 분석가능

 

alert() : 경고창
document.write() : 브라우저 화면 출력
console.log() : 디버깅 콘솔 출력

Toggle device toolbar : 모바일 <-> 웹크롬 환경 전환

 

undefined : 아무것도 없음
NaN : Not a Number. 숫자로 표현 불가능한 상태

 

let : 블록 스코프. {} 내에서만 유효, 재선언 불가
var : 함수 스코프 {} 밖에서도 유효, 재선언 가능

 

if ~ else 문, 다중 if문, switch ~ case 문, do ~ while문 등등은 다른 언어들과 다를 게 없어 생략

 

-

8차시

 

Scope 항목 안에 디버깅 중인 변수들이 있고

Global에는 자바스크립트의 함수들이 존재함

 

const number3 = number1.concat(number2);
=> 배열을 새로 연결하여 새로운 배열 반환.

 

함수 : 1개 이상의 명령어를 모아 놓은 것

종류
- 라이브러리 함수 : 자바스크립트 제공
- 사용자 정의 함수

입력값=인자, 인수, 아규먼트
출력값=리턴값

매개변수 : 함수 내부에서 함수로 전달된 값을 저장한 변수
ex) function ee(i, j){ } 에서 i와 j를 의미함

#include <stdio.h>              <- 라이브러리 함수
#include "myfunction.h"      <- 사용자 정의 함수

 

let b;
=>nudefined 타입도 nudefined
let c = 0/0;
=> NaN 타입은 number

 

객체지향 프로그래밍 : 객체라는 기본 단위로 나누고 객체들의 상호작용을 통해 프로그래밍하는 개념
클래스 : 객체를 만들기 위해 만드는 설계도. 관련성 있는 변수와 함수로 묶어 놓은 새로운 자료형
ES6부터 class 문법을 사용하여 클래스 기반의 문법이 도입됨

인스턴스instance : 클래스에 의해 생성된 객체object
객체object : 클래스의 인스턴스 (실제로 메모리에 할당된 것) 속성과 행동을 가지며, 행동은 자신이 수행하는 오퍼레이션으로 구성한다
메서드method : 클래스 내에 정의된 멤버 함수
속성attribute : 클래스 내에 정의된 멤버 변수
this : 인스턴스가 생성된 주소를 저장하고 있는 변수

 

ES6 이전 형식
const 변수명 = {
 멤버변수1:값1
 메서드: function(){}
};

ES6 부터의 형식
class 클래스명 {
 constructor(변수[, ...]) {
  this.변수  = 변수;
 }
 메서드() {}
}

 

사용 예)
const 객체명 = new 클래스명(값, 값...);
객체명.메서드();

 

vi 단축키

괄호에서 v 누르면 블록 설정이 시작되는데,

]} 를 누르면 이렇게 블록 끝까지 블록 설정이 된다.

거꾸로 끝에서 처음으로 가려면 [{ 를 누르면 된다.

 

c언어 코드 {} 안 코드 접기 (자바스크립트는 안됨)
:set fdm=marker 설정하고

괄호에 v 블록설정 시작, ]} 끝 괄호까지 블록 셋팅 후


zf => 접기
zo => 접은코드 열기


단, 접은코드를 연 뒤에 주석이 생기므로 그대로 저장하면 안된다.

 

 

보안취약점

vi로 코드 편집시 .swp 생성되어 텍스트 파일이 노출될 수 있는 위험

 

vi /etc/virc와 /etc/vimrc 에 set noswapfile 추가하면 스왑파일이 생기지 않음

 

정기적으로 파일시스템 스캔
find / -type f -name "*-swapme"
find / -type f \( -name "*-swapme" -o -name ".*.swp" -o -name ".*.swo" \)

파일 무결성 검사 : osquery, md5sum, sha256sum 등 사용
find / -type f -name "*.php" -exec sha256sum {} \; > current_hashes.txt diff previous_hashes.txt current_hashes.txt mv current_hashes.txt previous_hashes.txt

편집기 설정을 변경하여
echo "set directory=~/.vimswap//" >> ~/.vimrc mkdir -p ~/.vimswap
스왑파일 생성시 경고 메시지를 띄우고, 경로를 특정 위치로 생성

( 출처 블로그 : https://blog.pages.kr/3137 )

 

 

문자열 추출 slice, substr, substring

값변경 replace
문자열 양 옆의 공백 제거 trim

 

시간

let d = new Date();
d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()

 

시간차 실행 setTimeout

setTimeout("printClock()", 1000);            <- 실시간으로 1초마다 실행
setTimeout(printClock(), 1000);               <- 새로고침할때마다 변동됨
setTimeout(printClock(), 1000, "매개변수1", "매개변수2 ...");
setTimeout(printClock());

 

 

문자열.indexOf("찾을 문자열") : 찾을 문자열이 있는 위치를 반환. 없을시 -1

toLowerCase : 알파벳을 소문자로 변환
toUpperCase : 알파벳을 대문자로 변환

 

난독화: 코드를 읽기 어렵게 만들어 역공학을 통한 공격을 막는 기법
소스코드 난독화, 바이너리 난독화가 있음

 

Compression: 모든 코드를 한줄로 붙여서 표현하기 var m="test"; console.log("tt"); ... 하략
function Expression: 함수를 이용해 가독성 낮추기 ex) var m=function(){ 코드 }
Data splice: 소스코드를 무작위분할하여 변수에 저장한후 실행 

ex) var a1="<script>var m='rr';" var b2="function(){"; var c3="alert("aa");</script>"; ... 중략 ... document.write(a1+b2+c3+ ... );

Data replace: 코드를 이해하기 어렵게 하기 위해 의미없는 코드를 삽입한 후 나중에 모두 제거
ex) var a1="<script>var m='rr';" var b2="fobfuscationunction(){"; var c3="alobfuscationert("aa");</scrobfuscationipt>"; ... 중략 ... var a6=a1+b2+c3 ...; document.write(a6.replace(/obfuscation/g, ""));

Date Encoding: 소스코드 인코딩을 통해 이해하기 어렵게 만드는 기법
ex) var a1 = "%3c%73%6f%62%66%75%73%63%61%74%69%6f%6e% ... ";
var a2 = "%63%74%69%6f%6e%28%29%7b%20%6f% ... ";
중략
var a7 = unescape(a6.replace(/%6f%62%66%75%73%63%61%74%69%6f%6e/g, ""));
document.write(a7);

 

자바스크립트 이벤트
- Mouse : click, dbclick, mouseover 등
- Keyboard : keydown, keyup, keypress
- Form : submit, focus, reset, blur, input
- Window : load, unload, resize, scroll

 

 

 

'정보보안' 카테고리의 다른 글

정보보안8 2차시  (0) 2024.11.10
정보보안8 1차시  (0) 2024.11.09
정보보안7 6차시  (0) 2024.10.20
정보보안7 5차시  (0) 2024.10.19
정보보안7 4차시  (0) 2024.10.13