워게임/Root Me

[Root Me] Python - input() - 포너블

SecurityMan 2023. 6. 10. 11:00

 

파이썬과 관련된 포너블 문제

 

파이썬 스크립트의 취약점을 이용해

 

.passwd 파일의 내용을 읽어 비밀번호를 획득하면 된다.

 

반응형

 

 

문제에서는 파이썬 소스코드와

 

원격 접속할 수 있는 WebSSH 링크가 제공된다.

 

 

WebSSH 를 이용하면 이렇게 원격에서 웹으로 작업할 수 있다.

 

ls -al 을 해보니

 

.passwd 와 ch6.py, setuid-wrapper 파일이 보인다.

 

ch6.py 외에는 모두 app-script-ch6-cracked 소유의 파일이다.

 

 

당연하게도 .passwd 파일은 권한이 없어 읽을 수 없다.

 

 

setuid-wrapper.c 파일을 보면

 

setreuid 를 사용해서 ch6.py 파일을 실행시킨다.

 

위에서 setuid-wrapper 파일을 봐도 권한에 s 가 들어가 있는게 보인다.

 

setuid-wrapper 파일을 이용해 ch6.py 파일을 실행시켜야 한다.

 

#!/usr/bin/python2
 
import sys
 
def youLose():
    print "Try again ;-)"
    sys.exit(1)
 
 
try:
    p = input("Please enter password : ")
except:
    youLose()
 
 
with open(".passwd") as f:
    passwd = f.readline().strip()
    try:
        if (p == int(passwd)):
            print "Well done ! You can validate with this password !"
    except:
        youLose()

 

이게 ch6.py 의 내용이다.

 

사용자의 입력값을 받아 p 라는 변수에 저장,

 

.passwd 파일의 내용을 passwd 변수에 저장하고

 

p == int(passwd) 인지 확인한다.

 

하지만 p 에 들어가는 값에 대해 제약이 없기 때문에

 

장난을 칠 수 있다.

 

 

./setuid-wrapper 를 실행시킨 후

 

Please enter password : 라고 나오면

 

__import__('os').system('cat .passwd') 라고 입력하면 된다.

 

__import__('os').system('cat .passwd') == int(passwd) 가 되어

 

참이 되기 때문에 비밀번호를 확인할 수 있다.

반응형