orw run_sh 분석
![](https://velog.velcdn.com/images/dongtime/post/bcef87aa-2a0e-4d42-bdc5-963867295d95/image.png)
- 작성했던 쉘코드 실행 부분에 breakpoint를 걸고 실행 한 사진
![](https://velog.velcdn.com/images/dongtime/post/8f30655b-07e8-480c-9474-5231b6c32d55/image.png)
- run_sh+12까지 실행하고 나면 0x7fffffffe0b8에 /tmp/flag가 push 된 것을 확인 할 수 있음
syscall(open)
![](https://velog.velcdn.com/images/dongtime/post/5177dbb6-3495-44d1-8d6f-a827faa4c9fc/image.png)
- 첫번째 syscall(open)에 bp걸고 인자 확인 file:/tmp/flag / syscall:open
![](https://velog.velcdn.com/images/dongtime/post/0df8e854-46f1-4c20-98f7-a7b11169b96e/image.png)
![](https://velog.velcdn.com/images/dongtime/post/d7bf5e02-2aa7-4dfc-8a61-9e446c1180f7/image.png)
- rax의 값이 이상해서 확인해보니 -2가 나옴. 생각해보니 파일을 안만들어서 그런것 같음. 파일이 없을때 return -2 하나 봄
![](https://velog.velcdn.com/images/dongtime/post/c1d8ec06-940e-492e-891a-717720d64818/image.png)
- 경로에 다시 파일 만들어주고 return 값 확인하니 3 나옴
syscall(read)
![](https://velog.velcdn.com/images/dongtime/post/74cffcd4-5260-48df-8343-c3b1d50f034f/image.png)
- run_sh+55에 bp 걸고 실행
- fd:/tmp/flag
- buf: 0x7fffffffe088 ~ 0x7fffffffe0b7(run_sh+37에서 0x30만큼 만들어 줌)
![](https://velog.velcdn.com/images/dongtime/post/13025aa2-53e0-425b-9560-a075431deff2/image.png)
- 실행하고 나면 지정해줬던 버퍼 RSI에 /tmp/flag를 불러와 저장해놓은 것을 볼수 있음
![](https://velog.velcdn.com/images/dongtime/post/94ddfec6-91de-4096-aeb4-05917d96064e/image.png)
syscall(write)
![](https://velog.velcdn.com/images/dongtime/post/4959f60c-7653-4296-a58a-49b9f118224d/image.png)
- run_sh+71에 bp 걸고 실행
- fd: 0x1
- buf: 0x7fffffffe088 : 읽어온 버퍼
- n: 0x30 :버퍼 크기
![](https://velog.velcdn.com/images/dongtime/post/ba132250-b7dc-4a58-8f60-4a67a9def951/image.png)
- 출력됬는데 뒤에 이상한 값이 따라서 나옴
- \n 개행문자 안넣어줘서 그런 것으로 추정 -> 내일 다시 자세히 알아보자 -> null 연산자 안넣어줘서 그럼