[Write-up][ສະເຫລີຍ] intergover | INS’HACK
ໂຕໂຈດຈະໃຫ້ເຮົາໄຟລ໌ Binary ມາໄຟລ໌ໜຶ່ງເມື່ອລອງ run ເບິ່ງແລ້ວຈະໄດ້ແບບນີ້
ມັນຈະໃຫ້ເຮົາພິມເລກຈຳນວນເຕັມໃສ່, ເຮົາລອງພິມເລກ 23 ໃສ່ມັນກໍ່ຂຶ້ນຂໍ້ຄວາມດັ່ງໃນຮູບ, ມັນບໍ່ພົ້ນ flag ອອກມາໃຫ້ເຮົາສະນັ້ນບາດນີ້ເຮົາມາເປີດເບິ່ງໃນ IDA ເບິ່ງວ່າ flow ຂອງໂປແກມນີ້ເປັນແນວໃດ
ເມື່ອໂຍນໂປແກມ intergover ເຂົ້າໄປໃນ IDA ມັນຈະສະແດງ flow ຂອງໂປແກມເປັນ ui ສວຍງາມເບິ່ງງ່າຍຄືໃນຮູບຂ້າງເທິງນີ້ເລີຍ, ບາດນີ້ເຮົາມາສັງເກດດີໆກໍ່ຈະເຫັນວ່າໂຕໂປແກມມີການກວດສອບ ຫຼື cmp ວ່າຄ່າທີ່ເຮົາ input ເຂົ້າໄປແມ່ນເປັນຄ່າ integer ຫຼືບໍ່ຖ້າບໍ່ກໍ່ຈະ jump ໄປເຮັດວຽກຢູ່ຊ່ອງທາງລຸ່ມ ແລ້ວສະແດງຄຳວ່າ “I expect a number.” ອອກມາ
ມາເບິ່ງກັນຕໍ່ກໍລະນີທີ່ເຮົາໃສ່ເລກຈຳນວນເຕັມເຂົ້າມາຖືກຕ້ອງຕາມເງື່ອນໄຂ
ຈະເຫັນວ່າມີການ call function ທີ່ໜ້າສົນໃຈຢູ່ນັ້ນຄື gimmeFlagPliz ມາເບິ່ງກັນວ່າໃນ function gimmeFlagPliz ມີຫຍັງໃນນັ້ນແດ່
ຈະເຫັນວ່າມີການເອີ້ນໃຊ້ function system ເພື່ອ run command ແລ້ວ arg ກໍ່ແມ່ນ “cat flag.txt” — ສະນັ້ນໂຕ code ກໍ່ຈະເປັນແບບນີ້ system(“cat flag.txt”)
ເທົ່ານີ້ກໍ່ຮູ້ແລ້ວວ່າເປົ້າໝາຍເຮົາແມ່ນເຮັດແນວໃດກໍ່ໄດ້ໃຫ້ເຂົ້າມາ run function ນີ້
ມາເບິ່ງເງື່ອນໄຂໃນການທົດລອງໃສ່ເລກຂອງເຮົາແມ່ນມັນຂຶ້ນ “No, I can’t give you the flag:” ເພາະວ່າໃນເງື່ອນໄຂ cmp ມັນເວົ້າວ່າ
cmp [rbp+var_15], 0F2h ; rbp+var_15 ແມ່ນຕຳແໜ່ງໃນ memory ທີ່ເກັບຄ່າທີ່ເຮົາສົ່ງໄປ
jnz short loc_400786 ; loc_400786 ແມ່ນຊື່ຂອງ function ທີ່ຈະ jump ໄປ
ໂຕໂປແກມມັນຈະກວດສອບວ່າໂຕຄ່າທີ່ເຮົາສົ່ງໄປມັນເທົ່າກັບ 0F2h ບໍ່? ເຊິ່ງວ່າໂຕ 0F2h ຫຼື 0xF2 ກໍ່ຄືເລກຖານ 16 ຫລື hexadecimal ນັ້ນລະ, ໂຕ 0xF2 ນັ້ນມີຄ່າເທົ່າກັບ 242 ເມື່ອເຮົາລອງເອົາໄປ submit ກໍ່ຈະໄດ້ flag ມາ
ຂອບໃຈ