Tesla123
VIP Members
-
25/03/2014
-
7
-
141 bài viết
[Write up 31C3] cfy
Chạy chương trình, hiện ra 1 menu:
Chương trình parse input option vào như sau :
option người dùng nhận vào ở rbp-0xc
Kiểm tra giá trị rbp-0xc nếu bằng 3 thì thoát.
Nhận input người dung vào địa chỉ 0x6010e0 dùng option mà người dụng chọn tính ra hàm tương ứng cần gọi (0x601080 lưu địa chỉ các hàm : fromhex,fromdec,fromptr)
để ý lúc kiểm tra option nhập vào trương trình chỉ kiểm tra đk $(rbp-0xc) != 3 thì sẽ execute đoạn trên. Để ý địa chỉ input lớn hơn địa chỉ lưu trữ các hàm, nếu nhập input > 3 thì ta sẽ có : 0x601080 + $(rbp-0xc)*8 với 1 giá trị x của $(rbp-0xc) thì eax sẽ trỏ tới input của mình và mình có thể kiếm soát đc call rax.
Ngoài ra, hàm fromptr có thể cho phép mình đọc bất kỳ vùng nhớ nào.
Payload sẽ là:
– dùng hàm fromptr để leak địa chỉ 1 hàm trong libc, dự đoán phiên bản libc đang chạy trên server (ở đây là ubuntu 14.10) , có offset từ hàm đó đến system
– sử dụng bug trên để rax=system, và argv = /bin/sh
https://babyphd.net/2015/01/write-up-31c3-cfy/
PHP:
What do you want to do?
0) parse from hex
1) parse from dec
2) parse from pointer
3) quit

option người dùng nhận vào ở rbp-0xc

Kiểm tra giá trị rbp-0xc nếu bằng 3 thì thoát.

Nhận input người dung vào địa chỉ 0x6010e0 dùng option mà người dụng chọn tính ra hàm tương ứng cần gọi (0x601080 lưu địa chỉ các hàm : fromhex,fromdec,fromptr)
PHP:
rax = (long *)0x601080[$(rbp-c)]; mov rdi,0x6010e0; call rax;

Ngoài ra, hàm fromptr có thể cho phép mình đọc bất kỳ vùng nhớ nào.
Payload sẽ là:
– dùng hàm fromptr để leak địa chỉ 1 hàm trong libc, dự đoán phiên bản libc đang chạy trên server (ở đây là ubuntu 14.10) , có offset từ hàm đó đến system
– sử dụng bug trên để rax=system, và argv = /bin/sh
https://babyphd.net/2015/01/write-up-31c3-cfy/