일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 메타스플로잇
- Samba
- web hacking
- 암호해독
- root권한
- 취약점 스캔
- 해킹
- 스캔
- Kioptrix
- smb
- 포트스캔
- 스캐닝
- 취약점분석
- 내부침투
- CTF
- load of sqlinjection
- 해킹도구
- 모의해킹
- Metasploit
- 해킹툴
- 취약점
- sql
- SQLINJECTION
- 시스템 해킹
- Hacking
- 권한상승
- 칼리리눅스
- Los
- SQL Injection
- 침투테스트
- Today
- Total
목록전체 글 (119)
감자 텃밭
해당 문제와 함께 제공되는 소스코드는 아래와 같다. 해당 코드를 살펴보면 해당 코드에서의 취약점은 개발자의 연산자 우선순위 선정 실패로 일어난다 첫 번째 if문을 보면 fd=open을 통해 password파일을 읽기 전용으로 0400 권한을 준 후 < 0으로 비교하는 거 같지만 연산자의 우선순위는 =연산자보다
해당 문제의 소스코드는 아래와 같다. 차례대로 stage 1번부터 아래와 같다. [stage 1] 스테이지 1번은 argc의 개수가 100개 여야 하며, argv ['A'], argv ['B'] 즉 65번과 66번째 argv에 각각 \x00과 \x20\x0a\x0d가 입력되면 통과한다. [stage 2] 스테이지 2번은 read를 사용하여 파일 디스크립터 0 표준 입력으로 \x00\x0a\x00\xff를 입력하고 그 후 다음 read를 사용하여 2 표준 에러에 \x00\x0a\x02\xff가 입력되면 통과된다. [stage 3] 스테이지 3번은 \xde\xad\xbe\xef라는 이름의 환경변수의 저장되어있는 값이 \xca\xfe\xba\xbe와 일치하면 통과이다. [stage 4] 스테이지 4번은 \x0..
해당 문제와 함께 제공되는 소스코드는 아래와 같다. 해당 내용을 보면 random 변수에 radn() 함수를 이용하여 나수를 저장하고 scanf를 사용하여 key변수에 입력을 받는 그 후 key값과 random값을 xor한 값이 0 xdeadbeef값과 같으면 플래그를 출력해준다. 해당 코드에서 취약점이라 할것은 rand함수이다 해당 함수는 난수를 생성해주지만 해당 매번 생성되는 난수의 값은 일정하다. 즉 한번 난수가 설정되면 그 값은 유지된다 만약 프로그램 실행 시 계속해서 바뀌는 진짜 난수 값을 설정하려면 rand(time(null))로 설정해주어야 한다. 이를 알아내기위해 gdb를 사용했다. rand함수의 실행결과는 eax에 저장되므로 eax는 rbp-0x4부분에 mov 시킨다. 이를 확인하기 위해..
해당 문제와 함께 제공되는 소스코드는 아래와 같다. welcome함수에서 이름을 입력받고 login함수에서 두 개의 패스코드를 입력받아 해당 조건문을 통과하면 플래그를 획득할 수 있다. 하지만 해당 두 정수를 입력하면 플래그가 출력되지 않는다 그 이유는 scanf의 함수 원형을 살펴보면 서식 문자 뒤에 변수를 입력할 때는 &함께 주소를 지정해줘야 한다 하지만 위의 코드대로 입력할세 passcode변수에는 쓰레기 값들이 들어가게 된다. 아래의 welcome함수에서는 문자 또는 문자열일 경우에는 해당 첫 번째 인덱스가 시작 주소를 가리키기 때문에 상관이 없다. 일단 해당문제를 분석하기 위해 gdb를 통해 두 함수를 살펴봤다. welcome함수에서는 해당 name변수에 입력을 받는 위치는 ebp-0x70 위치..
해당 문제는 제공되는 소스코드가 없으며 해당 문제를 gdb로 분석을 하려 하면 읽어 들일 수 없다고 한다 그 이유는 해당 문제가 upx가 걸려있기 때문이다 일단 upx를 해제하고 gdb로 분석해야 했다. 해당 gdb를 보면 malloc를 통해 메모리 할당을 요청하고 rip+0x2 c0 ee5 위치에 0x6 c2070 를 한다 즉 해당 위치에 플래그를 넣는 거 같다. 그 후 그 값을 rdx에 mov를 통해 집어넣는다. 이를 확인하기 위해 해당 라인이 실행된 후인 39번 줄에 bp를 걸고 실행시켜 현제 rdx에 들어있는 값을 확인했다. 위와 같이 rdx에 들어있는 해당 플래그를 추출해낼 수 있었다.
해당 문제의 소스코드는 아래와 같다. main함수를 보면 func함수의 인자 값으로 0 xdeadbeef를 넘겨주고 func함수를 보면 overflowme 변수에 32바이트의 크기를 할당하고 gets함수로 입력값 검증 없이 입력을 받으므로 해당 부분에서 bof가 일어난다 아래 if조건문을 확인하면 key값이 0 xcafebabe 일 경우 쉘을 실행시켜준다. 그렇다면 gdb로 분석하여 overflowme변수에서 key변수까지의 거리를 계산하여 오버플로우를 일으킨 후 key부분의 값을 해당 cafebabe값으로 변조시키면된다. 해당 부분을 보면 29번째 줄에서 ebp-0x2 c 위치가 해당 overflowme 변수 위치이다 그 후 cafebabe가 들어있는 key변수의 위치는 ebp+0x8이다 해당 두 변수..
해당 문제와 함께 제공되는 소스코드는 아래와 같다. 해당 소스코드 내용을 보면 main 함수에서 3번째 조건문을 통과해야 플래그 값을 얻을 수 있다. hashcode값과 check_password함수의 리턴되는 값이 같으면 플래그를 출력해준다. 우선 hashcode값은 상수값으로 0x21 DD09 EC이며 check_password함수를 살펴보면 ip포인터 변수에 인자 값으로 입력받는 p값을 넣어준다 그 후 for반복문을 이용하여 5번씩 더하며 res에 저장하여 리턴 시켜준다. 그렇다면 hashcode를 5로 나누어 나온 값을 입력하면 되는데 5로 나눌경우 다시 곱하면 4가 부족하게 나온다. 그럼 여기서 해결방법은 5로나눈값을 4번 보내고 그 후 나머지 하나에 4를 더해서 더 보내면 된다. 아래와 같이 ..
해당 fd문제의 소스코드는 아래와 같다. 인자 값을 하나 받게 되어 있고 fd(파일 디스크립터) = atoi함수를 이용하여 첫 번째 인자 값에 -0x1234를 즉 10진수로 4660 값을 빼서 저장해놨다 그 후 len에 read함수로 fd를 주는데 read에서 파일 디스크립터가 표준 입력이 되기 위해서는 0이 되어야 한다 그러므로 0x1234 즉 10진수 4660으로 첫 번째 인자 값 즉 fd값을 0으로 맞춘 후 read가 정상적으로 입력받도록 한다. 그 후 if(! strcmp)를 사용한다 strcmp는 문자열이 맞으면 0을 반환하기에 0을 반환시켜! 를 통해 1로 변환되어 if조건문을 통과하여 해당 플래그를 읽어 들일 수 있다 아래와 같이 실행시켜 플래그를 획득하였다.