한땀한땀 정성들인 코딩
LOB 문제풀이 일기(5) 본문
고블린 잡으러 가자!!
소스코드 확인
gets함수?
전 문제들은 argv로 받아서 strcpy 하는 형태 였는데 ..
이번엔 프로그램 실행후 명령을 입력 받는다.
리눅스 환경에서는 파이프라인 | 명령어를 쓰면 손쉽게 해결 가능.!
프로세스1 번 | 프로세스 2번
1번 프로세스의 출력이 2번 프로세스 입력으로 들어간다.
c언어의 경우 입력은 gets나 scanf, fgets 등등 , 출력은 printf
파이썬의 경우 input, print가 되겠다.!
버퍼가 작긴한데 작든 말든 그냥 ret 뒤에 넣어주고, nop적당히 넣어주고 전사공격 하는건 1,2 탄이랑 다를게 없다 . ....
print dummy+ret+nop+shellcode
해주고 | 명령어로 넘기면 된다.
일단 ret주소를 파악하기 위해
gcc –o goblin2 goblin.c
고블린 2생성
디버깅~
버퍼 들어가는 주소가
0xbffffb38
복귀 주소는
0xbffffb4c
정확히 20byte(dummy + sfp)차이가 나는 것을 확인 할수 있다.
공격하장!
실패…
처음에 nop를 한 24byte주고 했다가 ..
50으로 늘리고 100까지 늘려도 안되길래.
구글링좀 하다보니 특정 커널은 setbit가 설정되있어도 실행시에 euid를 현 uid로 봐꿔 버린단다.
그래서 setreuid해주는 쉘코드를 추가할라 했는데
그전에 200으로 늘리니깐 성공 ㅋㅋ ,,,… .ㅡ,ㅡ
팁을 좀 적자면 scanf나 gets 같은 분류의 함수에서 파이프라인을 출력을 넘길 때 꼭 cat도 같이 넘겨주자.
입출력 스트림을 켜놔야 shell이 종료안되고 유지된다.
정답 : hackers proof
'보안 > LOB' 카테고리의 다른 글
LOB 문제풀이 일기(7) (0) | 2021.03.27 |
---|---|
LOB 문제풀이 일기(6) (0) | 2021.03.27 |
LOB 문제풀이 일기(4) (0) | 2021.03.27 |
LOB 문제풀이 일기(3) (0) | 2021.03.27 |
LOB 문제풀이 일기(2) (0) | 2021.03.27 |