Shellcode
[RaRCTF 2021] write-ups
RaRCTF 2021 > - code 1) main code 전역 변수의 기본값은 0x13371337이다. 그러니까 makeshot() 함수에서 뭔가를 해서 다른 값으로 변경시켜야 할 것 같다. 2) makeshot 저기 빨간 줄은 어셈이 잘못 해석되어있다. code의 주소는 0x404068이다. 그런데 더하는 값이 0x500000라서 scanf에 0x0을 줘도 넘어버린다. 그래서 integer overflow를 이용해서 code의 주소로 맞춰주면 밑에서 0으로 값을 수정해줘서 main의 성공 조건을 통과하고 쉘을 불러올 것이다. 저 값에서 간단하게 64bit로만 맞춰주면 된다. (∵ v1이 64bit로 연산되고 있기 때문) - exploit from pwn import * # p = process('...
[pwnable.xyz] executioner v2
문제 풀이 환경 : Ubuntu 16.04 solve_pow가 더 어렵.. 📝 Analysis > 역시나 · main 이전하고 비슷한 모양새를 하고 있지만 단 16Byte만을 입력으로 받을 수 있다. 참고로 초록색으로 하이라이트 된 곳은 어셈블리어로 다음과 같다. 몇 레지스터를 제외하고는 다 0으로 초기화해주고 있다. 이후 rdx에 저장된 주소를 call 한다. · solve_pow 개인적으로 어려워서 고민하다가 다른 사람 롸업보고 푼 부분. (이미 gdb 디버깅을 통해 내가 짠 shellcode의 PoC는 해놓은 상태에서 봤다.) 사실 데이터 형 크기 고정으로 인한 로직 버그라는 건 인지하고 있었지만 계산을 어떻게 할까 고민하고 있었다. 연산 후 범위를 넘어가는 byte에 대해서는 완전히 생각지도 못하..
[pwnable.xyz] executioner
문제 풀이 환경 : Ubuntu 16.04 간단한 쉘코딩 문제다. 📝 Analysis > 역시 풀밭이다. · main 처음에 solve_pow라는 함수를 부르고 이후 key 전역 변수를 랜덤한 값으로 꽉 채운다. 그리고 이 값을 가지고 사용자가 입력과 xor한다. mmap을 통해 실행 권한을 가진 영역에 결괏값을 저장하고 실행한다(jmp rax). · solve_pow 뭔가 특별해 보이지만 그냥 단순한 문제풀이에 둘 중 하나의 값은 얻은 값, 다른 하나는 0으로 주면 기다리지 않고 그냥 끝난다... ✨ Thinking 입력값과 xor 될 key 값을 조작할 방법이 없어 보이지만 pwnable.xyz에서 나온 다른 여타 문제처럼 strlen 함수가 말썽이다. 만약 내가 첫 바이트를 null로 준다면 xor..