Re: [問題] Netcat問題

看板Linux作者 ( apple)時間9年前 (2016/06/13 12:51), 9年前編輯推噓22(22011)
留言33則, 25人參與, 最新討論串2/2 (看更多)
※ 引述《luxylu ( 露西露 )》之銘言: : 不好意思不知道該發在哪個版 : 想請教netcat的相關問題 : 最近在解一個CTF的題目 : 題目是nc xxx.xxx.xxx.xxx xxxx 之後會出現一個扔硬幣程式 : 只要連續猜對50次 就可以得到flag : 目前我有扔硬幣的原始碼(xxx.c)跟另一個沒有副檔名的檔案(應該是shell之類) : 我修改了xxx.c 並在我的電腦直行後 可以讓他cat flag(但我電腦沒flag) : 我該如何利用nc 或其他的command : 想辦法讓對方server去執行我修改過後的.c : 或是有其它方法可以利用呢?? : 感謝各位大大給點提示 : 先謝過了 你好 剛好看到回一下 看完原始碼可以很快地發現漏洞在 printf(name) 這一行 這個漏洞叫做 format string exploit 簡單介紹一下 你可以想想看 正常 printf 的時候 stack 會長什麼樣子 printf("%x%x%x",a,b,c); high -------- ------------- | arg4 | | c | -------- ------------- | arg3 | | b | -------- ------------- | arg2 | | a | -------- ------------- | arg1 | | "%x%x%x" | -------- ------------- low 現在 printf 裡面沒有參數會造成什麼問題 printf(name); 假設你輸入的 name = "%x%x%x%x%x%x%x%x%x%x%x%x"; high -------- ------------------------------ | xxxx | | local variable1(name[128]) | -------- ------------------------------ | xxxx | | local variable2(buf[2]) | -------- ------------------------------ | xxxx | | local variable3(seed) | -------- ------------------------------ | xxxx | | ..... | -------- ------------------------------ | name | | "%x%x%x%x%x%x%x%x%x%x%x%x" | -------- ------------------------------ low 註: stack 我畫的很簡陋中間有一些 alignment 和 function call 預留的位置 要看 server 的那隻程式是怎麼編譯的 這時候 printf 會把在 stack 上的值當作參數印出來 就可以 leak 在 stack 上的值 這之中就包含 seed 的值 要是拿到 seed 的值 就可以預測出接下來 50 次的硬幣正反面 exploit 撰寫部分 可以用 pwntools 和 ctypes pwntools 是專門用來寫 exploit 的工具 ctypes 讓你可以模擬 srand(seed) 的行為 以下是範例 from ctypes import * cdll.LoadLibrary("libc.so.6") libc = CDLL("libc.so.6") libc.srand(seed) for i in range(50): print(libc.rand()%2) 自己動手樂趣多XD 加油!!! seed 的位置可以用 objdump 看 或是用 gdb debug 如果還有疑問歡迎來信 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.65.210 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1465793487.A.023.html

06/13 13:14, , 1F
cool
06/13 13:14, 1F

06/13 16:31, , 2F
06/13 16:31, 2F

06/13 17:37, , 3F
跪了
06/13 17:37, 3F

06/13 18:53, , 4F
已跪
06/13 18:53, 4F

06/13 18:56, , 5F
朝聖推
06/13 18:56, 5F

06/13 19:39, , 6F
06/13 19:39, 6F

06/13 19:55, , 7F
朝聖
06/13 19:55, 7F

06/13 22:18, , 8F
06/13 22:18, 8F

06/13 23:23, , 9F
朝聖
06/13 23:23, 9F

06/14 01:07, , 10F
令人雙腳癱軟。
06/14 01:07, 10F
※ 編輯: apple50189 (140.113.65.210), 06/14/2016 02:01:58

06/14 02:09, , 11F
樓上都大師QQ
06/14 02:09, 11F

06/14 17:52, , 12F
樓上是大師
06/14 17:52, 12F

06/15 08:44, , 13F
已跪拜
06/15 08:44, 13F

06/15 09:35, , 14F
朝聖
06/15 09:35, 14F

06/15 10:44, , 15F
完全看不懂QQ
06/15 10:44, 15F

06/15 10:59, , 16F
只看得懂一半QQ
06/15 10:59, 16F

06/15 11:08, , 17F
拜見大大
06/15 11:08, 17F

06/15 12:54, , 18F
推一下好了,要不然會被發現我看不懂...
06/15 12:54, 18F

06/15 17:20, , 19F
朝聖推
06/15 17:20, 19F

06/16 04:31, , 20F
朝聖推,跪在地上起不來了
06/16 04:31, 20F

06/16 09:41, , 21F
我比較想知道如果對方平台的rand實做跟你不一樣怎辦...?
06/16 09:41, 21F

06/16 18:16, , 22F
其實我應該有可以不用知道rand實作的方法(我還沒寫cod
06/16 18:16, 22F

06/16 18:16, , 23F
e驗證),只是通常CTF題目的意思會以正常邏輯想的出解
06/16 18:16, 23F

06/16 18:16, , 24F
法的方向出題,像是有一定限度的測試和猜測是可以接
06/16 18:16, 24F

06/16 18:16, , 25F
受的,但是要是偷偷換掉rand再叫你去猜rand的實作,
06/16 18:16, 25F

06/16 18:16, , 26F
那就算不合理的了
06/16 18:16, 26F

06/17 04:39, , 27F
不知道 rand 實做的話可以試試一次開 51 個 connection XD
06/17 04:39, 27F

06/17 15:22, , 28F
樓上正解XD 如果GOT可寫應該可以把atoi改成system賭點
06/17 15:22, 28F

06/17 15:22, , 29F
運氣輸sh看會不會爛掉(buf只有2 bytes最後沒有終止字
06/17 15:22, 29F

06/17 15:22, , 30F
元)看可不可以拿shell
06/17 15:22, 30F

06/20 01:20, , 31F
QQ 這個ip
06/20 01:20, 31F

06/22 00:40, , 32F
已跪拜
06/22 00:40, 32F

06/22 11:48, , 33F
這ip 似乎在我隔壁
06/22 11:48, 33F
文章代碼(AID): #1NNZlF0Z (Linux)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
18
44
完整討論串 (本文為第 2 之 2 篇):
問題
18
44
文章代碼(AID): #1NNZlF0Z (Linux)