목록wargame (207)
일단 printf 함수 에 buffer로 공격이 가능하고 바로 exit로 프로그램이 종료한다. 여기서 plt.got의 개념이 필요하다 printf함수나 exit 등을 쓰기 위해서는 헤더파일을 입력한다. 이러한 함수들은 plt라는 곳으로 이동해 기능들을 사용하기 위한 주소를 확인한 후 없으면 got를 통해 필요한 주소를 가져와서 다시 plt로 복귀해 주소를 기입한다. 1바이트 2바이트 1바이트 끊어서 값을 넣기로 했다. 이거 실행하면 payload텍스트 가 생성된다. 그걸로 프로그램 돌릴것이다. 계속 gdb 돌려가며 확인을 했다. 이 문제도 노가다로 풀었던 기억이 난다. 이런 식으로 한 바이트 씩 맞춰가며 확인을 했다. 텍스트 파일로 데이터 받을려면 이런 식으로 사용하면 된다. 또한 ./format4 < ..
target이 0x01025544와 같아야 한다. 저번 문제와는 다르게 매우 큰수이다. 44, 255, 010을 끊어서 넣기로 한다. 그럼 1바이트 , 2바이트 , 1바이트씩 끊어서 데이터를 읽어 수정하면 된다. 첫 자리에 44를 넣고 싶었지만 처음부터 70바이트를 가지고 있다 줄이는건 불가능 하기에 144바이트로 만들어 버리기로 했다 화질이 구리다. 이때도 정확한 원리를 몰라서 거의 노가다로 풀었던 기억이 난다. 너무 어렵게 풀었다.
이번에는 target에 64가 되어야 한다. 가까운 위치에 있다. objdump –t format2 | grep target 으로 쉽게 주소를 찾을 수 있다. 노가다로 위치에 맞게 넣었다. 이때는 원리도 모르고 진행하였기에 많은 시간을 삽질했었다. https://banana-kimchi.tistory.com/46?category=891403 Dreamhack - basic_exploitation_002 https://dreamhack.io/wargame/challenges/4/ basic_exploitation_002 Description 이 문제는 서버에서 작동하고 있는 서비스(basicexploitation002)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을.. banana-kimchi...
target의 주소에 값을 넣으면 성공이다. AAAA값과 target의 주소를 붙힌 다음 %x로 AAAA가 들어간 위치를 찾는다. 찾은 후에 .%n을 붙히면 1이라는 값이 target변수에 들어가게 된다.
sprinf는 포맷 스트링에 맞추어 복사해주는 함수이다. target : ebp-0xc buffer : ebp-0x4c 0x4c - 0xc = dec(64) 의 차이가 난다. 즉 64byte의 더미를 넣고 원하는 값을 덮으면 된다.
지금까지 했던 기존의 방법으로는 뚫을 수 없다. rop기법을 사용하도록 한다. ropgadget을 입력하여 ret의 가젯을 확보한다.
ret에 함정이 걸려있다. ret에 쉘 코드를 삽입할 수 없다. 저번에 올렸던 ret2lib 방법을 똑같이 사용한다. 저번과 똑같이 가젯들을 찾았다. 잘된다.
쉘 코드를 삽입한다. ret의 주소를 shell주소로 바꾸도록 한다. 0x40 + sfp(8) = 72 ret은 72에 위치한다. payload = dummy * 72 + (ret+8) + shell함수 먼저 ASLR을 꺼야한다. 주소들이 계속 변하기 때문이다. echo 0 | sudo tee /proc/sys/kernel/randomize_va_space 끄고 난 후 디버깅을 돌렸다. 0x7fffffffdff8이 ret주소 여기에 +8을 하여 ret에 위치에 다시 넣는다. 그럼 shell이 실행됨 msfvenom -p linux/x64/exec CMD='bin/sh' -f python shell코드 생성 방법이다. 어태치 방법 1.파이썬 스크립트에 sendline 전에 pause를 걸어둔다. 2.그다음..