What is BufferOverflow igloo corporation wonchihyeon
ํค๋์ ๊ธธ์ด๊ฐ ๋ง ๊ทธ๋๋ก ๋ฒํผ์ ๊ณต๊ฐ์ ๋ด๊ธธ ๋ฐ์ดํฐ๊ฐ ํ๋ฌ๋์นจ์ ๋ปํ๋ค.
๋ฐ์ดํฐ๊ฐ ํ๋ฌ๋์น๋ฉด ์ด๋ป๊ฒ ๋๋๊ฐ? ๋ฒํผ์ ํ ๋น๋ ๊ตฌ์ญ์ ๋์ด์ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๊น์ง ์นจ๋ฒํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋๋ค.
์ด๋ก ์ธํด ์์คํ ์ ์ ์์ ์ผ๋ก ๋์ํ์ง ์๊ฒ ๋๋ค.
๋ฒํผ ์ค๋ฒ ํ๋ก์ฐ๋ ๊ธฐ๋ณธ์ ์ธ ํดํน ์คํฌ์ด๋ค.
๋ฒํผ๋ ์์ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์คํ ํน์ ํํ ํน์ ๋ฐ์ดํฐ ์์ญ์ ์กด์ฌํ ์ ์๋๋ฐ ๊ฐ ์์ญ์ ๋ฐ๋ผ ์คํ ๋ฒํผ ์ค๋ฒ ํ๋ก์ฐ, ํ ๋ฒํผ ์ค๋ฒ ํ๋ก์ฐ, ๋ฐ์ดํฐ ๋ฒํผ ์ค๋ฒ ํ๋ก์ฐ๋ก ๋ถ๋ฆด ์ ์๋ค.
๊ฐ๋ํ์ด์ง ๊ตฌํ
int main(int argc, char *argv[]) {
int valid = FALSE;
char str1[8]; // str1 ์ ์ธ
char str2[8]; // str2 ์ ์ธ
next_tag(str1); // str1์ ํ๊ทธ๊ฐ๋ถ์ด๊ณ
gets(str2); // ์ฌ์ฉ์๊ฐ ๊ฐ์ ์
๋ ฅํ๋ฉด str2์ ๋ด๊ธด๋ค.
if(strncmp(str1, str2, 8) == 0)
valid = TRUE;
printf("buffer1: str1(%s), str2(%s), valid(%d)\n", str1, str2, valid);
}
์ฌ์ฉ์๊ฐ ๊ฐ์ ์ ๋ ฅํ๋๋ฐ ๊ทธ๊ฒ์ด start๋ผ๋ฉด valid๋ฅผ ๋ํ๋ด๋ ํจ์
str2์์ญ์๋ ๊ธ์ 8๊ฐ ๊น์ง ๋ด์ ์ ์๋ค (char str2[8] ์ด๊ธฐ ๋๋ฌธ)
๋ง์ฝ str2 ์์ญ์ ๊ธ์ 8๊ฐ ์ด์์ ๋ด์ผ๋ฉด ๋ฒํผ์ค๋ฒํ๋ก์ฐ ๋ฐ์.
c๊ฐ ์ ๊ณตํ๋ ํจ์ gets์์ ๋ณต์ฌํ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ฒ์ฌํ๋ ๊ณผ์ ์ ์๋ต.
๋ฒํผ์ค๋ฒํ๋ก์ฐ ๋ฐ์
์ดย ๋๊ตฌ๋ฅผย ์ด์ฉํ์ฌย ํ์ฉ๋ฐ์งย ์์ย ์๋น์คย ๋์์ผ๋กย ํดํน์ย ์๋ํ๋ย ํ์๋ย ๋ฒ์ฃย ํ์์
๋๋ค.ย ํดํน์ย ์๋ํ ย ๋์ย ๋ฐ์ํ๋ย ๋ฒ์ ์ธย ์ฑ
์์ย ๊ทธ๊ฒ์ย ํํย ์ฌ์ฉ์์๊ฒย ์๋ค๋ย ๊ฒ์ย ๋ช
์ฌํ์๊ธฐย ๋ฐ๋๋๋ค.
ย
A9ย -ย Bufferย Overflowย (Local)
ย
๋ฒํผย ์ค๋ฒํ๋กย ์ค๋ฅ๋ย ์๋์ ย ๋๋ย ๋น์๋์ ์ผ๋กย ์์ ๋์ด์๋ย ์ย ๋๋ย ํ๋ก์ธ์ค์ย ๋ฉ๋ชจ๋ฆฌย ์กฐ๊ฐ์ย ๋ฎ์ด์ฐ๋ย ๊ฒ์ดย ํน์ง์
๋๋ค.
IP(Instructionย Pointer),ย BP(Baseย Pointer)ย ๋ฐย ๊ธฐํย ๋ ์ง์คํฐ์ย ๊ฐ์ย ๋ฎ์ด์ฐ๋ฉดย ์์ธ,ย ๋ถํ ย ์ค๋ฅย ๋ฐย ๊ธฐํย ์ค๋ฅ๊ฐย ๋ฐ์ํฉ๋๋ค.ย
์ผ๋ฐ์ ์ผ๋กย ์ด๋ฌํย ์ค๋ฅ๋ย ์๊ธฐ์นย ์์ย ๋ฐฉ์์ผ๋กย ์์ฉย ํ๋ก๊ทธ๋จย ์คํ์ย ์ข
๋ฃํฉ๋๋ค.ย ๋ฒํผย ์ค๋ฒํ๋กย ์ค๋ฅ๋ย charย ์ ํ์ย ๋ฒํผ์์ย ์์
ํ ย ๋ย ๋ฐ์ํฉ๋๋ค.
๋ฒํผย ์ค๋ฒํ๋ก๋ย ์คํย ์ค๋ฒํ๋ก[์คํย ์ค๋ฒํ๋ก]ย ๋๋ย ํย ์ค๋ฒํ๋ก[ํย ์ค๋ฒํ๋ก]๋กย ๊ตฌ์ฑ๋ ย ์ย ์์ต๋๋ค.ย ์ดย ๋ฌธ์์์๋ย ํผ๋์ย ํผํ๊ธฐย ์ํดย ์ดย ๋ย ๊ฐ์ง๋ฅผย ๊ตฌ๋ถํ์งย ์์ต๋๋ค.
bof_1.php ๋ฉ์ธ ํ์ด์ง์ ์์ค์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ฉ์ธ ํ์ด์ง์์๋ ํํธ๋ฅผ ์ ๊ณตํ๊ณ ์์ค ์ฝ๋์์๋ shell_exe๋ฅผ ํตํ์ฌ ์ ๋ช ๋ น์ ์คํํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ย ๋จผ์ ํด๋น ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ์ปดํ์ผ, ๋๋ฒ๊น ์ ํตํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์, ์์ฝ๋ ์์ฑ์ ํตํ ๊ณต๊ฒฉ์ฝ๋ ์ฝ์ ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ฉฐ ์ฌ๊ธฐ์๋ BOF(Buffer Overflow)๊ฐ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ๊ณต๊ฒฉ์ด ์ด๋ฃจ์ด์ง๋์ง ์ฐธ๊ณ ์ ์๋ OWSAP ๋ฌธ์๋ฅผ ํตํ์ฌ ํ์ธํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ย ํด๋น BOF์ ๊ดํ ๋ฌธ์ ๋ ์ถํ ์ด๋ป๊ฒ ์ปดํ์ผ์ด ์ด๋ฃจ์ด ์ง๊ณ ๋๋ฒ๊น ์ ์ด๋ป๊ฒ ํ๋์ง ์ ๋์ค, ์๋๋ฅผ ๋๋ ์ ๋ค๋ฃฐ ์์ ์ด๋ฉฐ ์ ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ๊ณผ ์ด๋ค ํด๋ค์ ์ฌ์ฉํ๋์ง ๋ค๋ฃฐ ์์ ์ ๋๋ค. ย
https://owasp.org/www-community/attacks/Buffer_overflow_attack
https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/13.2-Testing_for_Stack_Overflow
https://owasp.org/www-community/vulnerabilities/Buffer_Overflow