黑客比普通程序員高在哪里?
假設老板今天給bai了我們一個任務,讓我們判斷一個IP是否在du線。我們可以zhi用Python編寫ping IP代碼importost=input('請輸dao入要檢測的IP:')result=os.popen('ping-C 1-t1%s'%(主機))。Read()如果'ttl'inresult:Print('Ip online')否則:Print('Ip offline')。
現在,作為一個代碼審閱者,您不會考慮代碼的總體結構,也不會考慮編寫此代碼的程序員為什么使用Ping或Popen。你覺得有什么問題嗎?如果沒有,請考慮兩個問題:波本的本質是什么?如果您不知道或沒有使用過Popen,請不要查找它并猜測此函數的用。在這個程序中,Popen要執行的命令是什么?既然 popen 后面執行的語句中的 host 變量是由用戶輸入的,那惡意用戶是不是可以輸入一個localhost && whoami 呢?這樣 popen 執行的代碼就變成了 ping -c 1 -t 1 localhost && whoami。注意,就算上述例子中沒有將運行結果直接打印出來,但沒打印出來并不代表代碼沒有運行。例如如果我直接輸入 host 為 localhost && whoami的話,輸出結果還是 IP 存在, 但這并不代表 whoami 命令沒有運行,我們依舊可以建立一個 Reverse Shell。為了驗證結果,我們在代碼里面讓 result 被打印出來。
這種技術稱為命令注入。如果普通程序員沒有遇到這種問題,他們就不會碰這種技術。當他們看到上面的漏洞代碼時,他們會覺得沒有問題。他們至多認為這有點不愉快,但能反映出第一時間安全漏洞的少數人是少數。這聽起來像是一種簡單的技術,比反向和動力提升簡單得多。但這項技術很有創意,有低下限和高上限。例如,我們現在知道上面的問題存在,所以在輸入階段中過濾一些關鍵字是可以的。在這個問題中,我們希望用戶輸入一個IP地址,所以我們需要直接過濾掉空間。普通IP地址中沒有空格。
我認為它在脆弱性敏感度和創造力方面都很強。在CVE、黑客論壇等場所提高脆弱性敏感度需要花費大量時間,而創造力只有靠天賦和運氣才能提高。你可能認為有很多方法可以避免這個例子。首先,我承認這個例子是一個暫時的例子,這是不好的,但請注意,我的例子是非常簡單和不成熟的。在現實的紅藍戰場上,以SQL注入為例,經過這么多年,我們能完全避免它嗎?我記得今年年初黑網曝光的收藏數據庫,1000克各種注入數據庫,涉及世界各地的各種論壇,甚至包括一些銀行、一些人口辦公室和一些政府機構。代碼思想是有限的,創造力是無限的。