最近看了下tpshop,審計出幾個雞肋的漏洞,這個SQL注入漏洞是其中之一。然后審計完網上搜了一下發現有一堆后臺的sql注入漏洞,應該是覺得后臺的SQL不用修叭(我個人是可以理解的)。
首先要登錄后臺,這也是我說漏洞很雞肋的原因。
漏洞位于在后臺的商城-》文章->文章列表處的搜索
抓包,存在漏洞的參數是keywords,當輸入payload' or length(database())=10)#
時,頁面返回文章數0,
而當輸入payload' or length(database())=9)#
時,頁面返回為共33篇文章(總共33篇,數據庫名是tpshop2.0)
因此可以通過布爾注入來獲取數據庫信息,當然延時也可以,只不過我自己是能不用延時就不用延時的人。
分析下代碼,原因很簡單,where直接拼接了。并且會將查詢到的結果返回到頁面中。application/admin/controller/Article.php:56
$keywords = trim(I('keywords'));
$keywords && $where.=" and title like '%$keywords%' ";
$cat_id = I('cat_id',0);
$cat_id && $where.=" and cat_id = $cat_id ";
$res = $Article->where($where)->order('article_id desc')->page("$p,$size")->select();
$count = $Article->where($where)->count();// 查詢滿足要求的總記錄數
$pager = new Page($count,$size);// 實例化分頁類 傳入總記錄數和每頁顯示的記錄數
//$page = $pager->show();//分頁顯示輸出
$ArticleCat = new ArticleCatLogic();
$cats = $ArticleCat->article_cat_list(0,0,false);
if($res){
foreach ($res as $val){
$val['category'] = $cats[$val['cat_id']]['cat_name'];
$val['add_time'] = date('Y-m-d H:i:s',$val['add_time']);
$list[] = $val;
}
}
$this->assign('cats',$cats);
$this->assign('cat_id',$cat_id);
$this->assign('list',$list);// 賦值數據集
$this->assign('pager',$pager);// 賦值分頁輸出
return $this->fetch('articleList');
最后執行的sql語句為:
我在用payload的時候用的是=,是因為輸入做了過濾,會轉義> <,用大于號不能直接執行sql,會報錯。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。