분류 전체보기
-
[FTZ Level15 풀이]System/FTZ 2018. 2. 16. 19:50
[Level15 Code]1234567891011121314#include main(){ int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); }} cs 문제는 Level14와 매우 흡사하다.다른 점이 있다면, check변수가 포인터변수로 변했다는 점이 있다.어셈블리에서는 어떻게 달라졌는지 한번 보도록 하자 [Level15 Assemble] 보면, [EBP-16]공간에 있는 4Byte를 EAX에 저장하고 [EAX]에 있는 4Byte를 deadbeef와 비교한다. 여기서 우리가 주목해야 할 점은 [ ]의 의미이다.CMP부분에서 EAX의 대괄호..
-
[FTZ Level14 풀이]System/FTZ 2018. 2. 16. 02:07
[Level14 Code]123456789101112131415#include #include main(){ int crap; int check; char buf[20]; fgets(buf,45,stdin); if (check==0xdeadbeef) { setreuid(3095,3095); system("/bin/sh"); }} cs Level14번 문제는 fgets( )에서 취약점이 발생한다.buf의 크기는 20인데, 표준입력으로 45Byte만큼의 데이터를 버퍼에 저장하고 있다. 그리고 밑에 if문으로 check의 값이 [0xdeadbeef]로 변조될 시, system("/bin/sh")가 실행되는 것을 볼수 있다.따라서, 우리는 BOF로 check메모리를 deadbeef로 변조해주면 Level15권한..
-
[FTZ Level13 풀이]System/FTZ 2018. 2. 16. 01:21
[Level13 Code]1234567891011121314151617#include main(int argc, char *argv[]){ long i=0x1234567; char buf[1024]; setreuid( 3094, 3094 ); if(argc > 1) strcpy(buf,argv[1]); if(i != 0x1234567) { printf(" Warnning: Buffer Overflow !!! \n"); kill(0,11); }} Colored by Color Scriptercs Level13은 BOF공격을 좀 힘들게 만들어놨다.변수 i가 buf보다 먼저 선언되어 있으므로, 일반적인 BOF공격을 시도한다면 i의 저장되어 있는 값이 변조될 것이다. [Level13 Stack] buf[1024..
-
[FTZ Level12 풀이]System/FTZ 2018. 2. 15. 23:49
[Level12 Code]1234567891011121314#include #include #include int main( void ){ char str[256]; setreuid( 3093, 3093 ); printf( "문자열을 입력하시오.\n" ); gets( str ); printf( "%s\n", str );} cs 해당 문제는 Level11과 비슷하지만, printf( )의 FSB 취약점이 사라졌고 gets( )함수로 입력을 받는다. 나는 이번 문제를 RTL을 이용해서 풀어봤다.RTL정리 : [이곳] #공격 시나리오1. EIP까지의 offset을 구한다. 2. System( )의 주소를 구한다. 3. /bin/sh문자열의 주소를 구한다. 4. RET공간에 System( )주소를 저장해서 Sy..
-
[FTZ Level11 풀이 ]System/FTZ 2018. 2. 15. 22:54
[Level11 Code]123456789101112#include #include int main( int argc, char *argv[] ){ char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str );} Colored by Color Scriptercs 여러가지 방법으로 풀 수 있지만, 나는 FSB를 이용해서 풀어봤다.pritnf( str ) 이 부분에서 FSB 취약점이 발생한다.자세한 정리는 [이곳]에 해두었으니, 자세한 설명은 생략하겠다. #공격 시나리오1. EGG Shell로 환경변수에 쉘코드를 올린다. 2. FSB공격으로 attackme파일의 DTOR_END(소멸자)공간에 환경변수 주소를 저장한다. 3. atta..
-
[02-14 공부정리(FSB 정리)]공부정리 2018. 2. 15. 04:07
오늘은 장장 5시간만에 FSB를 이해했다.. 시스템 공부를 어느정도 한 후에 FTZ를 풀이를 진행했다.12번까지 푸는데 뭔가 너무 허무한 것이다..11번과 12번을 둘 다 RTL을 이용해서 푸는데 RPG로 비교하면200제 무기로 슬라임잡는 기분이었다.. FTZ를 다시 시작한 이유는 RTL과 ROP기법말고 다른 공격기법을 익히기 위해서 였는데정작 사용하는 공격기법을 보면 RTL만 사용하고 있는 나를 보고서" 이렇게 FTZ를 풀어봤자 무의미하겠구나.. " 라는 생각이 들었다.그래서 Level11번을 FSB로 다시 한번 풀어봤다. 무식한 BOF만 익혀오다가 좀 계산적인 부분이 있는 FSB를 익히려니까 처음엔 이해가 정말 안됐다...ㅠ뭐 지금와서 보면 계산적이라고 할 것도 없지만,,정리가 굉장히 잘해주신 블로거..
-
[02-11 공부정리(Chaining RTL 정리)]공부정리 2018. 2. 11. 01:10
오늘은 protostar Stack6~7번을 풀었다.6번은 RTL을 7번은 Chaining RTL을 이용해서 풀었다.7번같은 경우는 ASLR이 걸려있는 상황이라면 ROP를 이용해야 하는 문제였다.내일은 ASLR이 걸려있는 상태라고 가정하고 ROP로 문제를 풀어볼 생각이다. 자 그럼 오늘 공부한 부분들을 정리하도록 하겠다. [Chaining RTL] RTL공격을 할때 System( )뒤에 dummy값으로 "AAAA"를 준 적이 있다.RTL 정리할 때도 말했지만 dummy값 부분은 의미없는 부분이 아니다.system( )가 끝나고 복귀할 주소가 저장되어 있는 공간이다.하지만, 우리는 /bin/sh을 따내면 그 뒤 상황은 어디로 복귀하던 상관이 없기에 "AAAA"라는 dummy값을 준 것이다. Chaining..
-
[Stack 7]System/Protostar 2018. 2. 10. 22:34
[Stack7 Code] [Stack7 실행]Stack6와 비슷한 코드지만, ret(EIP)가 0xb로 시작하면 예외처리에 걸리게 된다.따라서 0xb7로 시작하는 시스템함수로 변조하는 RTL공격은 불가능하다.그래서 이번에는 Chaining RTL공격으로 쉘을 따냈다. Chaining RTL공격은 ASLR이 걸려있지 않기때문에 가능하다.ASLR이 걸려있다면 ROP로 쉘을 따내야 할 것이다. [Chaining RTL]기본 개념은 RTL과 동일하다.우리가 RTL공격을 할 때 짠 페이로드를 한번 보자 #RTLPAYLOAD : python -c 'print "A"*68+"System( )"+"AAAA"+"/bin/sh" buf[64] SFP System( ) dummy"AAAA" /bin/sh여기서 dummy값이..