- Basic_BOF #1
너무나도 쉽고 기초적인 문제입니다
바로 IDA로 까보겠습니다 🙌
일단 코드를 대충 보자면 fgets로 s를 45byte만큼 입력받아
BOF가 터지기는 힘들어보입니다.
그 다음 만약 0x4030201에 위치해있는 V5가 특정 값이 된다면 쉘이 따이는군여
일단 GDB로 디버깅해보겠습니다
잘 안보이겠지만 fgets로 입력받은 바로 다음 부분에
Break Point를 걸어준다면
S의 버퍼 크기를 알 수 있을것입니다.
위 사진을 봄으로써 S와 0x4030201에 위치해있는 V5의 거리가
40byte라는 것을 구할 수 있게 되었습니다.
그럼 S에 40byte를 채워넣고 V5의 조건에 있던 값인
0xDEADBEEF를 넣어준다면 쉘이 따이는 행복한 상상을 할 수 있을거 같습니다.
그렇다면 바로 페이로드를 짜볼까요 👀?
FLAG = HackCTF{f1r57_574ck_buff3r_0v3rfl0w_5ucc355}
- Basic_BOF #2
두 번째 문제도 너무 쉽습니다...🙆♂️
바로 IDA로 까보겠습니다
흠ㅁ 코드를 보아하니
fgets로 S를 133byte를 입력받으니 BOF가 터지긴 힘들거 같습니다
그렇다면 sup함수를 Pointing하고 있는 v5를
어떻게 하면 될거 같습니다.
그럼 쉘을 어떤 방식으로 띄워야할까요..??
IDA Function List를 잘 살펴보면 의심스러운 함수가 있습니다
바로 shell이라는 함수인데요
그렇다면 위에 말했듯 v5가 sup함수를 Pointing하고 있으므로
sup함수 대신 shell 함수 주소로 덮으면 되지 않을까요 ??
그럼 S와 v5의 거리를 구해보겠슴다.
S는 0x8C 버퍼가 할당되어 있고
v5는 0xC 만큼의 버퍼가 할당되어 있습니다.
그럼 0x8C - 0xc = ??
바로 128👀
그럼 Payload를 구상하겠슴니다.
A로 128 Byte를 Stack을 채우고
Pwntools를 Import 해서 ELF로
shell의 symbol address로 v5를 채웁니다.
FLAG = HackCTF{h3y_dud3_600d_f0r_y0u}
'Wargame > HackCTF' 카테고리의 다른 글
[Pwnable] x64 Buffer Overflow (0) | 2020.09.16 |
---|---|
[Pwnable] 내 버퍼가 흘러넘친다!!! (0) | 2020.09.15 |
[Pwnable] Basic_FSB (0) | 2020.09.06 |
[Forensics] So easy? (0) | 2020.09.02 |
[Forensic] Welcome_Forensics & Question? (0) | 2020.09.02 |