argv를 통해 인자를 전달받는 것이 아니네요.
fgets를 한번만 사용하니 cat을 통해 payload를 작성하면 될거같고...
buffer+47 값이 0xbf, 0x08이면 안된다네요... 스택, 바이너리 영역 모두 사용할 수 없습니다.
또 leave, ret를 체크하는 구문도 있네요...
fgets안에 stdin이 취약점이 있다고 합니다. (몰라서 여기저기 검색해봤습니다.ㅠㅠ)
stdin을 사용할 시 그 안에 임시 buffer가 존재하는데 그 buffer는 스택영역이 아닌 bss영역이라네요!
이 영역에 진짜 값이 존재하는지 확인해보았습니다.
stdin의 주소를 알아온 후 break point를 걸어 값을 넣어봤습니다.
그리고 stdin의 값을 보니
실제로 값이 그대로 남아있는 것을 확인했습니다.!
그럼 이 주소를 이용해서 payload를 작성해보면
./xavius + shellcode[25] + dummy[19] + &(stdin 임시 buffer)
성공했습니다.!
'CTF 공부 > LOB' 카테고리의 다른 글
[LOB]death_knight (0) | 2020.02.15 |
---|---|
[LOB]xavius (0) | 2020.02.15 |
[LOB]succubus (0) | 2020.02.07 |
[LOB]zombie_assassin (0) | 2020.02.07 |
[LOB]assassin (0) | 2020.01.30 |