Hacking/System Hacking

<ν•΄ν‚Ή: 곡격의 예술> 3회차 μŠ€ν„°λ””

솑이 🫧 2022. 5. 1. 16:08
<ν•΄ν‚Ή: 곡격의 예술> μ±…을 보고 κ³΅λΆ€ν•œ λ‚΄μš©μž…λ‹ˆλ‹€
X86 ν”„λ‘œμ„Έμ„œλ₯Ό κΈ°μ€€μœΌλ‘œ ν•©λ‹ˆλ‹€.

 

Cμ–Έμ–΄μ—μ„œ νŒŒμΌμ— μ ‘κ·Όν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” 크게 2가지가 μžˆλ‹€. 

1. 파일 μ„œμˆ μž (File Descriptor)

2. 파일 슀트림 (Filestream)

 

- 파일 슀트림 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ν”„λ‘œκ·Έλž˜λ° ν•˜κΈ°λŠ” νŽΈν•˜μ§€λ§Œ 파일 μ„œμˆ μžκ°€ μ’€ 더 μ§μ ‘μ μž„

 ( νŒŒμΌμ„œμˆ μžλŠ” 둜우레벨, 파일 μŠ€νŠΈλ¦Όμ€ ν•˜μ΄λ ˆλ²¨ μž…μΆœλ ₯μž„) 

 

파일 μ„œμˆ μž

- open() : ν•¨μˆ˜λ₯Ό μ½κ±°λ‚˜ μ“Έ 수 있게 νŒŒμΌμ„ μ—΄κ³  파일 μ„œμˆ μžλ₯Ό λ¦¬ν„΄ν•œλ‹€. 파일 μ„œμˆ μžλŠ” λ‹¨μˆœν•œ μ •μˆ˜ κ°’μ΄μ§€λ§Œ μ—΄λ¦° νŒŒμΌλ§ˆλ‹€ κ³ μœ ν•˜λ‹€.

                 νŒŒμΌ μ„œμˆ μžλŠ” μ—΄λ¦° νŒŒμΌμ„ κ°€λ¦¬ν‚€λŠ” 포인터와 같은 인자둜 λ‹€λ₯Έ ν•¨μˆ˜μ—κ²Œ λ„˜κ²¨μ§„λ‹€. 

- close() : 파일 μ„œμˆ μžλ₯Ό 인자둜 μ‚¬μš©

- read() : 파일 μ„œμˆ μž, μ½κ±°λ‚˜ μ“Έ 데이터λ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터, μ½κ±°λ‚˜ μ“Έ λ°”μ΄νŠΈ 수 μ΄λ ‡κ²Œ 3개의 인자λ₯Ό 가짐 

- write() : 파일 μ„œμˆ μž, μ½κ±°λ‚˜ μ“Έ 데이터λ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터, μ½κ±°λ‚˜ μ“Έ λ°”μ΄νŠΈ 수 μ΄λ ‡κ²Œ 3개의 인자λ₯Ό 가짐

 

--> 였λ₯˜κ°€ λ°œμƒν•  경우 λͺ¨λ“  ν•¨μˆ˜λŠ” -1을 λ¦¬ν„΄ν•œλ‹€. 

 

파일 κΆŒν•œ 

읽기, μ“°κΈ°, μ‹€ν–‰ κΆŒν•œμ„ μ‚¬μš©μž, κ·Έλ£Ή, λ‚˜λ¨Έμ§€ 세가지 ν•„λ“œμ— λŒ€ν•΄ ν‚€κ³  λ„λŠ” 것이 κ°€λŠ₯ 

r : read (4), w: write(2), x : execute(1)

Ex) chmod 731 νŒŒμΌμ΄λ¦„ 

       chmod ugo-wx νŒŒμΌμ΄λ¦„ (μ‚¬μš©μž,κ·Έλ£Ή,λ‚˜λ¨Έμ§€μ—κ²Œ 쓰기와 μ‹€ν–‰κΆŒν•œ 없애라)

       chmod u+x νŒŒμΌμ΄λ¦„  (μ‚¬μš©μžμ—κ²Œ μ“°κΈ° κΆŒν•œ 좔가해라)

 

μ‚¬μš©μž ID

 

λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ˜ λͺ¨λ“  μ‚¬μš©μžλŠ” κ³ μœ ν•œ μ‚¬μš©μž ID 숫자λ₯Ό 가진닀. (μ‚¬μš©μžλ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ κ°’)

λͺ¨λ“  νŒŒμΌμ— μ ‘κ·Ό κ°€λŠ₯ν•œ κ΄€λ¦¬μž κΆŒν•œμ„ κ°€μ§€λŠ” rootλŠ” μ‚¬μš©μž ID 0을 가진닀. 

싀행쀑인 ν”„λ‘œκ·Έλž¨μ€ μ‹€μ œ μ‚¬μš©μž ID(UID)와 μ‹€μ œ 유효 μ‚¬μš©μž ID(EUID)λ₯Ό 가지고 μžˆλ‹€. 

이 λ‘˜μ€ set user id bit 와 같은 κ²ƒμœΌλ‘œ 고의둜 λ³€κ²½ν•˜μ§€ μ•ŠλŠ” 이상 일반적으둜 같은 값을 가진닀.

songyi(1000)κ°€ μ‚¬μš©μž IDμ΄λ―€λ‘œ  ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ 두 μ‚¬μš©μž ID λͺ¨λ‘ songyi(1000)이닀. 

set user id bitλ₯Ό μ§€μ •ν•˜λ©΄ μ‹€ν–‰ν•  λ•Œ ν”„λ‘œμ„ΈμŠ€λŠ” 둜그인 ν•œ μ‹€μ œ μ‚¬μš©μž ID(real user id) κΆŒν•œμ΄ μ•„λ‹Œ μ†Œμœ μž ID κΆŒν•œ(effective user id)으둜 λ™μž‘

set user id bit 지정 ν›„ μ‹€μ œ μ‚¬μš©μž ID 와 유효 μ‚¬μš©μž IDκ°€ μ„œλ‘œ λ‹€λ₯Έ 것을 확인할 수 있음 

 

<SETUID>

- SETUIDκ°€ μ„€μ •λœ 파일 μ‹€ν–‰μ‹œ, μΌμ‹œμ μœΌλ‘œ 파일 μ†Œμœ μžμ˜ κΆŒν•œμ„ μ–»κ²Œ λœλ‹€. 즉, μ†Œμœ μžκ°€ root인 νŒŒμΌμ— SetUIDκ°€ μ„€μ •λ˜μ–΄ μžˆμ„ λ•Œ, 일반 μ‚¬μš©μžκ°€ κ·Έ file을 μ‹€ν–‰ν•˜κ²Œ 되면 κ·Έ μˆœκ°„ μž μ‹œλ™μ•ˆ 파일의 μ†Œμœ μžμΈ root의 κΆŒν•œμ„ 빌렀 μ˜€λŠ” 것 

- (u+s) -> user에 SETUID 적용 

 

<SETGID>

SETGIDκ°€ μ„€μ •λœ 파일 μ‹€ν–‰μ‹œ, νŠΉμ • μž‘μ—… μˆ˜ν–‰μ„ μœ„ν•˜μ—¬ μΌμ‹œμ μœΌλ‘œ 파일의 κ·Έλ£Ή κΆŒν•œμ„ μ–»κ²Œ 됨 

 

 

[μ°Έκ³ ] 

https://goitgo.tistory.com/13