[Python 2] input() 취약점에 대하여

두비니

·

2021. 5. 17. 04:21

 

 

 

0. 조사하게 된 계기

 

CTF문제를 풀다가 엄청난걸 알아냈습니다

 

 

python2에 한해서 input함수는 eval(raw_input(prompt))로 실행된다는 사실이요.

일단 eval함수 자체가 보안측면에서 봤을 때는 위험한 함수죠. (명령어를 실행시킬 수 있는 함수인지라)

그래서 조금 더 찾아봤는데 생각보다 뭐가 많더라구요! 그래서 정리할 겸 찾아봤습니다.

 

 

1. input함수 자체에 대하여

 

일단 input함수 자체에 대해서 조금 탐구를 해봅시다.

python2에서 이 함수의 가장 큰 특징은 "알아서 형변환"을 해준다는 점입니다. 직접 확인해봅시다

 

s1 = input("input()>> ")
print(type(s1))
  
s2 = input("input()>> ")
print(type(s2))
  
s3 = input("input()>> ")
print(type(s3))

 

 

이렇게 알아서 형변환을 시켜줍니다.

똑같은 코드로, python3으로 실행시켜보겠습니다.

 

 

나중에도 이야기하겠지만, python3부터는 raw_input()의 역할을 input()이 하고 있습니다. 따라서 어떻게 입력을 하든 무조건 str형태로 들어가는걸 볼 수 있습니다. 일단은 차이점을 아시겠죠?

 

 

2. 그래서 뭐가 문제인가

 

자 그럼 무엇이 문제인지 살펴보도록 합시다.

 

 

python3
python2

 

같은 string값을 넣어도 python2는 에러가 발생하는 것을 볼 수 있습니다.

근데 python2의 에러를 보니깐 뭔가 이상한게 있네요?

뭔가 알 수 없는 type이라는 게 아니라, 변수가 정의되어있지 않다는 NameError가 발생합니다. 

그럼 정의되어있으면 뭔가 다르지 않을까? 하고 코드를 조금 변형해봤습니다.

 

hihihi = 100

s1 = input("input()>> ")
print(type(s1))
  
s2 = input("input()>> ")
print(type(s2))
  
s3 = input("input()>> ")
print(type(s3))

 

 

오오.. 이런 일이 발생하는군요....

 

3. 응용을 해보자

 

몇 가지 재미있는 일을 해봅시다

 

일단 python2의 경우에는 input을 통해서 eval함수를 실행하는 바람에 builtin함수를 이용할 수 있습니다.

 

우왕~

 

이거에 관련한 글은 여기에 작성되어있습니다.

 

이런게 아니여도, 이런 상황을 이용할 수 있습니다.

 

이런 코드가 있다고 가정합시다.

 

hihihi = 100

s1 = input("input()>> ")
print(type(s1))
 
if s1 == hihihi:
	print("yes!")
else:
	print("no:(")

 

 

그러면 정상적인 접근은 100을 입력해서 if문을 통과하도록 하는데 일반적이겠죠?

그러나 python2의 input 성질때문에 다음과 같은 일도 할 수 있습니다.

 

오오... 좋네요

변수 자체가 입력이 된걸로 판단을 하기 때문에 그런거죠?

 

 

4. 결론

 

아무튼 이런 문제들때문에 python3부터는 input()함수가 아예 이용되지 않고 있습니다. raw_input()함수의 역할을 input()이 하게 되었고, 취약점이 있는 input()함수는 없어지게 되었습니다.

python2에서는 주로 raw_input()밖에 안쓰던데 이런 취약점이 있었네용

 

python은 필요할때마다 배워서 그런지 공부하다보니 신기한게 많네요...ㅎ

끝!

 

 

참고

https://www.geeksforgeeks.org/vulnerability-input-function-python-2-x/

 

Vulnerability in input() function – Python 2.x - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org