g2h

안녕하세요 👋 저는 g2h입니다.

보안 컨설팅, 모의해킹, 개인학습을 통해 배우고, 경험한 내용의 글을 쓰고 있습니다.
아래에서 최근 글과 연구 기록을 확인하세요.

Browse by Category

분류 전체보기 (158)
Network (5)
Databases (2)
Web (37)
System (32)
Pentest (14)
WriteUP (47)
도구|Tools (12)
Security Issue (6)
1-Day-Analysis (1)
한줄보안 (1)
Infra (1)

Latest

Simple_size_bof

카테고리: WriteUP · 2021. 5. 21.

HackCTF의 Simple_szie_bof문제 

 

우선 해당 프로그램을 실행시켜보았다.

프로그램의 실행 모습

시빅 - 자살방지 문제입니다.라는 문구가 출력되고 buf의 주소가 출력되는 듯하다

하지만 프로그램을 실행시킬 때마다. 버퍼의 주소가 계속 바뀌는 걸 볼 수 있다. ASLR기법이 적용되어있는 거 같다.

 

확인해보자!

보호기법 확인

음.. 일단 ASLR을 제외한 다른 보호 기법들은 적용되어 있지 않는 거 같다..!

 

예상했듯 문자열 출력 후 buf의 주소를 출력해주는 함수이다.

91번 줄을 보면 gets함수가 있다 그렇다면 gets를 이용하여 버퍼오버플로우를 일으켜 해결할 수 있을 거 같다.

일단 버퍼오버플로우를 일으키기 위해 필요한 버퍼의 크기는 0x6d30으로 27952 크기이다 그럼 여기에 sfp(8)를 더해 

dummy값과 쉘 코드를 삽입하면 될 거 같다.

크기와, 주소를 알았으니 이제 payload를 작성하러 가보자

해당 코드는 이렇게 짰다

pwntools에서 지원해주는 recvuntil을 사용하여 buf: 문자열이 나올 때까지 문자열을 받아오고 buf에

recv를 이용하여 버퍼의 주소를 넣는다 int(r.recv(14),16)은 int 즉 정수형으로 받고 14바이트만큼 16진수로 받겠다는 것이다

14바이트인 이유는 프로그램을 실행시켰을 때 얻는 주소가 14바이트이기 때문이다.

그 후 payload에 쉘 코드와 dummy값을 SFP까지 채우고 ret에 버퍼의 주소를 넣으면 된다. 

 

 

실행시켰을 때 성공적으로 쉘을 획득하고 flag를 획득할 수 있었다.!!

'WriteUP' 카테고리의 다른 글

offset  (0) 2021.05.26
Simple_overflow_bof_ver_2  (0) 2021.05.21
64bof_basic  (0) 2021.05.21
[LOB] orge  (0) 2021.05.20
[LOB] darkelf  (0) 2021.05.20

댓글