New insight: Building an actionable exposure program

Insight

HTTP REQUEST SMUGGLING

HTTP REQUEST SMUGGLING — article image 1

HTTP REQUEST SMUGGLING ແມ່ນຫຍັງ? Web Developer ຄວນຮູ້ເຖິງຄວາມອັນຕະລາຍຂອງຊ່ອງໂຫວ່ນີ້ໄວ້. ເພາະເປັນຊ່ອງໂຫວ່ທີ່ຍັງບໍ່ເປັນທີ່ຮູ້ຈັກຫຼາຍ ເຊິ່ງລາຍລະອຽດຈະເປັນແນວໃດໄປເບິ່ງນຳກັນເລີຍ

HTTP REQUEST SMUGGLING ແມ່ນຫຍັງ?

HTTP REQUEST SMUGGLING ແມ່ນ ການໂຈມຕີ web server ທີ່ໃຊ້ Protocol http1.1 ເປັນຫຼັກ, ເປັນການໂຈມຕີທີ່ສົ່ງ http request ໄປ 1 request ທີ່ມີ 2 request ໃນນັ້ນ. ເຊິ່ງກ່ອນອື່ນໝົດເຮົາຈະມາເວົ້າເຖິງປັດໄຈຂອງການເກີດ http request smuggling ກ່ອນ ແລ້ວຈະມາສາທິດການໂຈມຕີ .

ຕົວຢ່າງ :

ຖ້າເຮົາສົ່ງ request ໄປຫາ server ທີ່ມີ Header Content-Length 2 ອັນ ທີ່ມີຄວາມຍາວຕ່າງກັນແລ້ວຈະເກີດຫຍັງຂຶ້ນ?

HTTP REQUEST SMUGGLING — article image 2
  • Frontend ຈະເຫັນ Content-Length: 15 (ສົມມຸດວ່າມັນໃຫ້ຄວາມສຳຄັນກັບ Content-Length ໂຕທຳອິດທີ່ເຫັນ) ແລ້ວສົ່ງ “user=jellyfishG” ໄປຫາ Backend
  • Backend (server)ຈະເຫັນ Content-Length: 14 (ສົມມຸດວ່າມັນມັນໃຫ້ຄວາມສຳຄັນກັບ Content-Length ໂຕສຸດທ້າຍທີ່ເຫັນ) “user=jellyfish”

ແລ້ວ ໂຕ G ຫາຍໄປໃສ?

ເວລາເຮົາ request ເທື່ອຕໍ່ໄປ

HTTP REQUEST SMUGGLING — article image 3

backed ຈະເຫັນແບບນີ້

HTTP REQUEST SMUGGLING — article image 4

ເຫັນວ່າໂຕ G ບໍ່ໄດ້ຫາຍໄປໃສ ມັນພຽງໄປຕໍ່ໃສ່ request ຖັດໄປ.

ນີ້ແມ່ນພື້ນຖານຂອງຊ່ອງໂຫວ່ http request smuggling ເກີດຈາກການທີ Backed (server) ໃຫ້ຄວາມສຳຄັນກັບ Content-Length ໂຕສຸດທ້າຍທີ່ເຫັນເຮັດໃຫ້ຈັດການກັບ request ບໍ່ໝົດເລີຍມີຜົນກະທົບຕໍ່ request ຖັດໄປ. ແຕ່ໃນປັດຈຸບັນບໍ່ສາມາດໃຊ້ວີທີນີ້ໄດ້ແລ້ວ ເຊິ່ງກໍມີການສົ່ງຂໍ້ມູນແບບໃໝ່ມາແທນນັ້ນກໍຄື Transfer-Encoding: chunked.

ເຮົາມາຮຽນຮູ້ກ່ອນວ່າ Transfer-Encoding: chunked ມີວີທີສົ່ງຂໍ້ມູນແນວໃດ

Transfer-Encoding: chunked

{length of content in hex}
{content}
0\r\n
\r\n
  • ການສົ່ງຂໍ້ມູນແບບ Transfer-Encoding: chunked ຕ້ອງຂຶ້ນຕົ້ນດ້ວຍຄ່າ hexadecimal ຂອງຄວາມຍາວຂໍ້ມູນທີ່ຈະສົ່ງ.
  • ຂໍ້ມູນທີ່ຈະສົ່ງ
  • ລົງທ້າຍດ້ວຍເລກສູນ (0) ຕາມດ້ວຍ \r\n\r\n (Enter 2 ເທື່ອ)
HTTP REQUEST SMUGGLING — article image 5

ຖ້າເຮົາລວມການສົ່ງຂໍ້ມູນ ທັງ Content-Length ແລະTransfer-Encoding: chunked ຈະໄດ້ແບບນີ້

HTTP REQUEST SMUGGLING — article image 6

ການໂຈມຕີ

ເຮົາຕ້ອງຮູ້ວ່າ backed (server) ນັ້ນໃຫ້ຄວາມສຳຄັນໂຕໃດລະຫວ່າງ Content-Length ຫຼື Transfer-Encoding: chunked ເຮົາຈຶ່ງສາມາດສ້າງ payload ໄດ້.

ສ່ວນວີທີຫາວ່າ backed (server) ໃຫ້ຄວາມສຳຄັນໂຕໃດແມ່ນເຮົາຈະພາເຮັດໃນ Lab

HTTP REQUEST SMUGGLING — article image 7
description

ວີທີຜ່ານ lab ແມ່ນໃຫ້ລັກເອົາ cookie ຂອງ victim ໂດຍໃຊ້ຊ່ອງໂຫວ່ http request smuggling

ເຮົາມາເລີ່ມກັນເລີຍ

ໜ້າຕາ Lab

HTTP REQUEST SMUGGLING — article image 8
HTTP REQUEST SMUGGLING — article image 9

ລອງສົ່ງ request post ທຳມະດາໄປເບິ່ງວ່າ ສາມາດສົ່ງໄດ້ບໍ່

HTTP REQUEST SMUGGLING — article image 10

ບາດນີ້ ຕື່ມ header Transfer-Encoding: chunked

HTTP REQUEST SMUGGLING — article image 11

ແປວ່າສາມາດສົ່ງຂໍ້ມູນທັງ Content-Length ແລະ Transfer-Encoding: chunked ພ້ອມກັນໄດ້.

ມາຫາວ່າ backed (server) ໃຫ້ຄວາມສຳຄັນໂຕໃດດ້ວຍວີທີເພີ່ມ ແລະ ຫຼຸດຄວາມຍາວຂອງ Content-Length ເພື່ອເບິ່ງວ່າ Fronted ແລະ Backed ໃຫ້ຄວາມສຳຄັນໂຕໃດ

HTTP REQUEST SMUGGLING — article image 12
HTTP REQUEST SMUGGLING — article image 13
HTTP REQUEST SMUGGLING — article image 14
HTTP REQUEST SMUGGLING — article image 15

ເຫັນວ່າຄວາມຍາວຂອງຂໍ້ມູນແບບ Content-Length ສົ່ງໄປເກີນ ຫຼື ໜ້ອຍກ່ອນບໍ່ໄດ້ ສະແດງວ່າ Fronted ໃຫ້ຄວາມສຳຄັນ Content-Length

ບາດນີ້ມາລອງກັບ Transfer-Encoding: chunked ໂດຍການຕື່ມໂຕ G ໃສ່ຫຼັງສຸດ

HTTP REQUEST SMUGGLING — article image 16

ສົ່ງໄປໄດ້

ລອງສົ່ງໄປອີກເທື່ອ

HTTP REQUEST SMUGGLING — article image 17

“Not Found” ?

ມາເບິ່ງພຶດຕິກຳຂອງ backed (server) ກ່ອນວ່າຖ້າເຮົາສົ່ງ GGET ແລ້ວ ມັນຈະ response ກັບມາແນວໃດ

HTTP REQUEST SMUGGLING — article image 18

response ຄືກັນ ສະແດງວ່າ backed (server) ໃຫ້ຄວາມສຳຄັນກັບ Transfer-Encoding: chunked, ແບບນີ້ເຮົາກໍສາມາດຄວບຄຸມ request ຂອງຄົນອື່ນໄດ້

ເປົ້າໝາຍຂອງເຮົາແມ່ນລັກເອົາ cookie ຂອງ victim ເຊິ່ງໃນ lab ມັນຈະມີບ່ອນ comment ເຮົາສາມາດຄວບຄຸມ request ຂອງ victim ໄປ comment ໄດ້.

request ຂອງ comment

HTTP REQUEST SMUGGLING — article image 19

ສັງເກດວ່າ Content-Length ແມ່ນ 106 ຖ້າເຮົາຢາກເອົາ request ຂອງຄົນອື່ນໄປ comment ເຮົາຕ້ອງໄດ້ເພີ່ມ Content-Length ຂຶ້ນ.

ເອົາ request ໄປປະກອບກັນ

HTTP REQUEST SMUGGLING — article image 20

ແປງ content-length ຂອງ request ທີ 2 ເປັນ 500 ແລ້ວ ສົ່ງໄປ 2 ເທື່ອ

HTTP REQUEST SMUGGLING — article image 21

ເຫັນວ່າມັນຈະໄດ້ request ຂອງເຮົາ ຢູ່ໃນ comment ນຳ, ແຕ່ເຮົາຕ້ອງການ cookie ຂອງ victim ເຮົາຕ້ອງສົ່ງ request ໄປເທື່ອດຽວແລ້ວ ລໍຖ້າໃຫ້ victim request

HTTP REQUEST SMUGGLING — article image 22

ໄດ້ request ຂອງ victim ມາບໍ່ໝົດ ເຮົາຕ້ອງໄດ້ຕື່ມ content-length ໄປເລື້ອຍໆຈົນກວ່າຈະໄດ້

HTTP REQUEST SMUGGLING — article image 23

ແປງ cookie ແລ້ວ refresh

HTTP REQUEST SMUGGLING — article image 24

ພຽງແຕ່ເທົ່ານີ້ເຮົາກໍ່ສາມາດປອມໂຕເປັນ victim ໄດ້ແລ້ວ.

ນອກຈາກການລັກຂໍ້ມູນແລ້ວ http request smuggling ຍັງມີເທັກນິກການໂຈມຕີທີໜ້າສົນໃຈອີກຫຼາຍເທັກນິກທີບໍ່ໄດ້ເອົາມາຂຽນໃນບົດຄວາມນີ້ຖ້າໃຜສົນໃຈສາມາດສຶກສາຕື່ມໄດ້ທີ່ນີ້.

Reference

HTTP request smuggling

https://portswigger.net/web-security/request-smuggling/exploiting/lab-capture-other-users-requests

Talk to a specialist

Tell us about your environment, timing and the outcome you need, and a member of the Cyberus team can follow up to discuss scope.

Talk to a specialist
Talk to a specialist