[問題] format string 和 endian

看板C_and_CPP (C/C++)作者 (のヮの)時間12年前 (2013/09/18 23:59), 編輯推噓4(4011)
留言15則, 3人參與, 最新討論串1/1
大家好 這兩天玩 wargame 遇到一題,程式碼如下 http://codepad.org/hSs9gtNg 提示是利用 printf %n 寫 flag 的值 目前只想到輸入 %0255x%n%n%n 可以將 *(point + 1) *(point + 2) *(point + 3) 改成 0xff 但是這麼一來 *point 就被跳過了,最後變成 flag = 0xffffff00 如果 fprintf buf 後面多帶一個參數就好了 XD 無頭緒中,請各位指點迷津 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.34.207.177

09/19 00:46, , 1F
09/19 00:46, 1F

09/19 01:39, , 2F
對,如果他在 point 前面還有一個參數的話這樣就過了
09/19 01:39, 2F

09/19 01:39, , 3F
但是沒有...所以也許 %0255d 這個方向是錯的
09/19 01:39, 3F

09/19 01:41, , 4F
可是我不曉得還可以怎麼改變輸出的長度讓%n寫flag的值 orz
09/19 01:41, 4F

09/19 02:21, , 5F

09/19 02:55, , 6F
"%1$255x%n%n%n%n"
09/19 02:55, 6F

09/19 03:06, , 7F
請問 $ 是什麼意思呢??
09/19 03:06, 7F

09/19 09:49, , 8F
以這個例子來說,就是印出第 1 個實際參數,也就是 point
09/19 09:49, 8F

09/19 09:51, , 9F
"%1$65535x%1$n%3$n"
09/19 09:51, 9F

09/19 09:53, , 10F
在 arg1 跟 arg3 所對應的指標,都寫入 0xFFFF
09/19 09:53, 10F

09/19 12:10, , 11F
推 %1$65535x%1$n%3$n ~ (前面 n$ 跟非 n$ 應該不能混用~)
09/19 12:10, 11F

09/19 12:42, , 12F
翻了一下文件,好像說混用的結果是未定義,不過在 Ideone
09/19 12:42, 12F

09/19 12:43, , 13F
混著跑 "%1$255x%n%n%n%n" 也是能跑出 -1 就是
09/19 12:43, 13F

09/19 14:05, , 14F
好酷 XD 我都查不到這種用法 @@
09/19 14:05, 14F

09/19 14:49, , 15F
man 3 printf 看看,這是 Unix/Linux 限定用法
09/19 14:49, 15F
文章代碼(AID): #1IESthEH (C_and_CPP)
文章代碼(AID): #1IESthEH (C_and_CPP)