일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보처리기사
- web3 보안
- 스마트컨트랙트
- 정처기 필기
- aws lambda
- splunk db connect
- metacode
- ELB
- AWS SSM
- 블록체인
- 메타코드M
- 스마트 컨트랙트
- Path Traversal
- 티스토리챌린지
- 보안 그룹
- 탈중앙화
- Session Manager
- 오블완
- web security academy
- aws 트리거
- web3
- metacodem
- systems manager
- AWS CLI
- 정처기필기
- File Upload
- 정처기
- amazon s3 트리거
- web shell
- 메타코드
- Today
- Total
min8282
[취약점분석] BOF(시스템 해킹 실습 4일차) 본문
beefdead로 변경
이전에는 beef
지금까지 출려된 문자열을 개수를 저장한ㄴ녀석 ->%n
이미 출력되어 있는 갯수가 줄어들 수 있나요?
1BEEF는 만들 수 있겠죠? beef를 만들고 dead를 만들 수 없다.
hn은 2바이트만 사용하기 때문에 1BEEF를 만들면 BEEF만 가지고 온다.
113에 걸고 AAAA 입력
마찬가지로 answer 값 확인
입력값과 관계가 있는 인자부분 확인
r ~~~~ 작성 후 들어간거 확인
answer값이 들어간거 확인
answer값이 beef를 만들기 위해 위처럼 작성
ni 후 answer의 주소값? 작성해서 값 확인. beef 작성완
이제 beefdead를 만들기 위해 hn을 사용 해야함
16진수 dead 는 10진수로 57005
16진수 beef는 10진수로 48879
한 번 beef 대신 dead로 값을 바꺼봄
일단 hn을 사용해서 뒤에는 dead로 바꿈
0xbeefdead를 만들기 위한거니까 0xbeefdead를 10진수로 보면 3203391149임
이걸 대입해보니까
0xdeaedead가 나옴. hn으로 2바이트씩 잘랐으니 deae가 3203391149인 것을 알 수 있음.
0xdeae는 10진수로 57006인 것을 확인
0xbeefdead인 3203391149를 넣었을 때 dead.즉, 뒤에 넣을려고 했던것이 나왔으니 beefdead가 아니라 deadbeef로 해서 beef가 주소값에 들어가게 해야함
deadbeef는 10진수로 3735928559임
대입
ni 후 주소의 값을 확인 했는데? 0xdeaedead.
????? 이전에 넣었던거랑 차이가 없다? 고민고민....
0xbeefdead를 넣을 때 dead가 beef 보다 크니까 들어갈 수가 없음. 그래서 1beef를 넣는다고 힌트를 주심
0xbeefdead가 아니라 0x1beef를 넣는거임.
1beef 는 10진수로 114415
앞에 주소 2개 = 8바이트
dead = 56997 을
114415 -4 -4 -56997
처음부터 접근이 잘 ㅇ못
beefdead
ni하면?
continue
clear
하나는 낮은 주소,하나는 높은 주소에다가 쓰면 2바이트를 넣을 수 있다.
멘토님 처럼 8바이트 주소 한 번에 하는 것도 해보기. ㅅㄹ용
A를 540개 쓸 수 있다.
이전에 rbp+0x8이 복귀주소인데 이전에는 잘 있다가
A 540개를 넣고
de88을 보니까 41414141로 들어가짐. 복귀주소 덮어버림.
입력값을 많이 넣어서 복귀주소를 변경시킬 수 있다는 것을 앎.
이제는 you win을 띄우면 됨.
참고로 여긴 64비트
버퍼의 시작주소와 바꾸고 싶어하는 거리를 알아야 함.
프린트나 read
두 번째 인자 rsi를 보면 됨.
조금 이르긴하지만 python 스크립트 짜야 됨. 디버거 안에서는 못 함.
sen , recv 주의할점)
짝이 맞게 샌드 리시브 해줘야 함. 안 그러면 recv가 계속 기다림.
print(b"aa") 이렇게 바이트 형태로 바꿔야 됨. -> 소켓에서는 우리가 볼 수 있는 언어로 보내면 안 됨. 바이트 인코딩 필수
사소한 꿀팁)read함수는 개행을 문자열 끝으로 인식하지 않음. 개행을 끝으로 인식할 때는 readsend 사용하면 됨. 찾아보셈
tmux 설치
설치 후, tmux 치면 새로운 터미널로 열림
여기서 python 실행하면
115에 bp 걸고,
p=connect("IP주소", 포트번호) 원격으로 할 때는 이렿게. 현재는 로컬이니까 그대로 진행.
p = process("./bof1") -> 로컬에서 진행할 때
p = remote("192.xx.xxx.xxx", 8888) -> 외부 실습 때
p = process("./bof1")
# p = remote("192.xx.xx.xx", 8888) // 로컬 환경 아닌 실습 때 사용하세요.
print(p.recv(1024))
payload = b''
payload = b"A" * 0x500
payload += p64(0x1234)
p.send(payload)
print(p.recv(1024))
먼저 win 함수 주소를 확인
rbp de80,
rsp = rbp - 0x200(512) = dc80
시작주소 = 8
520을 16진수로 변경 0x208
win의 주소로 가기 위해 p64(0x4011dd) win 주소
설명)
b *main+110
해당 게시글은 복습을 위한 실습 내용 필기이므로 올바르지 않은 정보가 포함되어 있습니다.
'K-Shield.Jr' 카테고리의 다른 글
[취약점분석] heap, UAF 맛보기- 시스템 해킹 실습 6일차 (1) | 2024.07.23 |
---|---|
[취약점분석] BOF2, Advanced BOF - 7/22 실습 5일차 (0) | 2024.07.22 |
[취약점분석] Type Confusion, Format String Bug(시스템 해킹 실습 3일차) (0) | 2024.07.18 |
[취약점분석] Uninitialized(시스템 해킹 실습 2일차) (0) | 2024.07.18 |
[공통과정] 시스템 해킹/OOB, Format String 실습 및 메모리 보호기법 (1) | 2024.07.18 |