일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 해킹툴
- Hacking
- 권한상승
- 취약점분석
- web hacking
- 칼리리눅스
- root권한
- 스캔
- 모의해킹
- 침투테스트
- Los
- 취약점
- 시스템 해킹
- CTF
- 스캐닝
- 해킹도구
- load of sqlinjection
- Kioptrix
- SQLINJECTION
- 암호해독
- 포트스캔
- SQL Injection
- smb
- 취약점 스캔
- 메타스플로잇
- Samba
- 내부침투
- sql
- 해킹
- Metasploit
- Today
- Total
목록my_study (42)
감자 텃밭
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cJs3BS/btrdHfEozbg/rPyD0I3KxaoKjvlHMV1XcK/img.png)
해당 문제와 함께 제공되는 소스코드는 아래와 같다. 해당 내용을 보면 random 변수에 radn() 함수를 이용하여 나수를 저장하고 scanf를 사용하여 key변수에 입력을 받는 그 후 key값과 random값을 xor한 값이 0 xdeadbeef값과 같으면 플래그를 출력해준다. 해당 코드에서 취약점이라 할것은 rand함수이다 해당 함수는 난수를 생성해주지만 해당 매번 생성되는 난수의 값은 일정하다. 즉 한번 난수가 설정되면 그 값은 유지된다 만약 프로그램 실행 시 계속해서 바뀌는 진짜 난수 값을 설정하려면 rand(time(null))로 설정해주어야 한다. 이를 알아내기위해 gdb를 사용했다. rand함수의 실행결과는 eax에 저장되므로 eax는 rbp-0x4부분에 mov 시킨다. 이를 확인하기 위해..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bAHbVh/btrdJ3v9akV/glRFvaqV8Mkd7tBxQxJeLK/img.png)
해당 문제와 함께 제공되는 소스코드는 아래와 같다. welcome함수에서 이름을 입력받고 login함수에서 두 개의 패스코드를 입력받아 해당 조건문을 통과하면 플래그를 획득할 수 있다. 하지만 해당 두 정수를 입력하면 플래그가 출력되지 않는다 그 이유는 scanf의 함수 원형을 살펴보면 서식 문자 뒤에 변수를 입력할 때는 &함께 주소를 지정해줘야 한다 하지만 위의 코드대로 입력할세 passcode변수에는 쓰레기 값들이 들어가게 된다. 아래의 welcome함수에서는 문자 또는 문자열일 경우에는 해당 첫 번째 인덱스가 시작 주소를 가리키기 때문에 상관이 없다. 일단 해당문제를 분석하기 위해 gdb를 통해 두 함수를 살펴봤다. welcome함수에서는 해당 name변수에 입력을 받는 위치는 ebp-0x70 위치..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bU4dp6/btrdImpIebg/yal9WbqsrP7n0fu8FFdJ40/img.png)
해당 문제는 제공되는 소스코드가 없으며 해당 문제를 gdb로 분석을 하려 하면 읽어 들일 수 없다고 한다 그 이유는 해당 문제가 upx가 걸려있기 때문이다 일단 upx를 해제하고 gdb로 분석해야 했다. 해당 gdb를 보면 malloc를 통해 메모리 할당을 요청하고 rip+0x2 c0 ee5 위치에 0x6 c2070 를 한다 즉 해당 위치에 플래그를 넣는 거 같다. 그 후 그 값을 rdx에 mov를 통해 집어넣는다. 이를 확인하기 위해 해당 라인이 실행된 후인 39번 줄에 bp를 걸고 실행시켜 현제 rdx에 들어있는 값을 확인했다. 위와 같이 rdx에 들어있는 해당 플래그를 추출해낼 수 있었다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c8cv44/btrdCHn71xA/ccSeDaNCEmXijbAyTFhDL1/img.png)
해당 문제의 소스코드는 아래와 같다. 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이다 해당 두 변수..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/k8tRE/btrdInozFX4/U5pg0VrVKlOZpes8Dbi3c1/img.png)
해당 문제와 함께 제공되는 소스코드는 아래와 같다. 해당 소스코드 내용을 보면 main 함수에서 3번째 조건문을 통과해야 플래그 값을 얻을 수 있다. hashcode값과 check_password함수의 리턴되는 값이 같으면 플래그를 출력해준다. 우선 hashcode값은 상수값으로 0x21 DD09 EC이며 check_password함수를 살펴보면 ip포인터 변수에 인자 값으로 입력받는 p값을 넣어준다 그 후 for반복문을 이용하여 5번씩 더하며 res에 저장하여 리턴 시켜준다. 그렇다면 hashcode를 5로 나누어 나온 값을 입력하면 되는데 5로 나눌경우 다시 곱하면 4가 부족하게 나온다. 그럼 여기서 해결방법은 5로나눈값을 4번 보내고 그 후 나머지 하나에 4를 더해서 더 보내면 된다. 아래와 같이 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/5XHb7/btrdJ33ZnBp/VFiziwOQcOfntWW0xWFfl0/img.png)
해당 fd문제의 소스코드는 아래와 같다. 인자 값을 하나 받게 되어 있고 fd(파일 디스크립터) = atoi함수를 이용하여 첫 번째 인자 값에 -0x1234를 즉 10진수로 4660 값을 빼서 저장해놨다 그 후 len에 read함수로 fd를 주는데 read에서 파일 디스크립터가 표준 입력이 되기 위해서는 0이 되어야 한다 그러므로 0x1234 즉 10진수 4660으로 첫 번째 인자 값 즉 fd값을 0으로 맞춘 후 read가 정상적으로 입력받도록 한다. 그 후 if(! strcmp)를 사용한다 strcmp는 문자열이 맞으면 0을 반환하기에 0을 반환시켜! 를 통해 1로 변환되어 if조건문을 통과하여 해당 플래그를 읽어 들일 수 있다 아래와 같이 실행시켜 플래그를 획득하였다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bO3BDR/btrdka3NWab/yTZbHMgALsHNVcRER4mM3k/img.png)
이번에 풀어볼 문제는 yes or no라는 문제이다 가장 오래 걸렸으며 이게 왜 150점짜리인지 도통 모르겠다.. 해당 프로그램을 우선 실행시켜 보았다. show me your number~! 이라는 문자열이 출력되며 특정 값을 입력받도록 되어있다. 그 후 또 다른 문자열들이 출력되었다. 메모리 보호기법은 NX가 걸려있으며 ALSR 또한 걸려있었다. 해당 프로그램을 IDA를 통해 상세히 분석해보았다. 아래쪽 IF조건문을 통과하면 That's cool follw me문자열을 출력하며 gets로 입력을 받도록 되어있다 해당 부분에서 bof가 일어날 것으로 예상된다. 해당 조건문에 해당하는 값을 gdb로 확인하였다. 헤다 237번째 줄을 보면 cmp를 통해 rbp-0x8과 eax의 값을 비교한다 해당 부분에 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/brmMn0/btrcc6uIxPb/jdj1FctjkuXReB3CQuOtsK/img.png)
이번에 풀어볼 문제는 hackctf의 rop문제이다 제목에서부터 유추할 수 있는 rop에 관한 문제이며 rop기초에 관한 문제인 거 같다. 해당 문제를 실행 및 적용된 메모리 보호 기법을 확인하였다. 문자열을 입력받고 입력 후 특정 문자열이 출력된다. 메모리는 역시 nx가 걸려있다. 해당 문제를 IDA를 통해 상세히 분석하였다. main함수에서는 vulnerable_function함수를 호출하고 write함수를 통해 특정 문자열을 출력한다. vulnerable_function함수에서는 136만큼의 buf변수를 선언하고 read함수를 통해 0x100(256)만큼 입력을 받는다 이 부분에서 bof가 일어날 거 같다. 정말 기본 rop사용 문제인 듯하다. 익스 코드는 read를 통해 bss영역에 /bin/sh..