일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Reversing
- K-shield Jr 10기
- Android
- ZIP
- disk
- swing
- tar
- Interceptor
- crack
- 디스크
- Frida
- 모바일프로그래밍
- K-sheild Jr
- ctf-d
- 포렌식
- 안티디버깅
- John the ripper
- 파일해시생성
- 침해사고대응
- upx
- Multimedia
- CodeEngn
- SW에듀서포터즈
- 써니나타스
- shadow
- 케쉴주
- 리버싱핵심원리
- Mobile
- Autoware
- Today
- Total
물먹는산세베리아
pwntools(1)_계산문제 본문
문제: 49.247.132.71 1234
칼리에서 문제에 접속해 보았다. nc 명령어를 사용하여 문제에 접근하였고, 그 결과 위와 같이 더하기 문제에 대해 20번 답을 하라는 문제임을 알 수 있었다.
일일이 입력해서 20번을 채워도 되지만 시간상 무리이기 때문에 파이썬으로 코드를 작성하였다.
주어진 주소로 연결을 하고 questions라는 단어까지 문자를 받는다.
20번 반복이므로 위와 같이 for문을 돌렸고, 두번째 줄부터 바로 문제가 나오므로 한줄을 받아 t에 대입하였다.
t는 eval 함수를 통해 답을 도출하며 anw 변수에 들어가고, = 문자까지 닿게 되면 아까 받은 답을 보낸다.
그 후 쉘의 마지막에 p.interactive()를 써 주었다.
그 결과,
연결이 되긴 하지만 문법상의 문제 때문에 제대로 결과가 나오지 않았다.
그래서 아래와 같이 수정하였다.
주목할 점들은 다음과 같다.
1) anw=eval(t)이 안되는 이유
- eval 함수는 주어진 문자를 연산자로 만들어 계산한다.
- 여기서는 = 기호도 포함되기 때문에 eval을 써서는 안된다. = 이전까지의 수와 연산자를 계산해야 한다.
2) 숫자(a) + 숫자(b)
- =이전까지 받는 것만 계산을 해야 하는데 한줄을 다 받으면 =까지 계산해야되는 것으로 받아들이기 때문에 첫번째 피연산자와 두번째 피연산자를 따로 변수에 저장한다.
- 저장한 변수들을 + 연산자를 사용하여 답을 구한다.
- int(p.recv(2),10)은 2바이트를 10진수로 읽어오라는 뜻이다.
* sendlineafter("=", str(anw)): '='까지 모두 받아야 str(anw)을 전송할 수 있다. '='를 출력할 때, str(anw)+'\n'을 입력한다.
위의 소스파일을 실행한 결과 Gongratulations~~!!를 볼 수 있었다.
'Language > Python' 카테고리의 다른 글
python: 반올림, 올림, 버림, 소수점 출력 (0) | 2021.10.10 |
---|---|
pwntools 정리 (0) | 2021.04.28 |
파이썬 bs4, requests 모듈 이용하여 네이버 실시간 검색어 크롤러 만들기 (0) | 2020.09.08 |
파이썬 소캣 프로그래밍 이용해 파일 보내기 (0) | 2020.09.08 |
파이썬 tkinter를 이용해 gui 계산기 만들기(비트연산, 진법 변환) (0) | 2020.09.08 |