php注入祥解

來源:互聯網
上載者:User

本文主要是為小菜們服務的,如果你已經是一隻老鳥呢,可能某些東西會感覺比較乏味,但只要你仔細的看,你會發現很多有趣的東西哦。

閱讀此文你只要明白下面的這點東西就夠了。

1.明白php+mysql環境是如何搭建的。
2.大概瞭解php和apache的配置,主要用到php.ini和httpd.conf
而此文我們主要用到的是php.ini的配置。為了安全起見我們一般都開啟php.ini裡的安全模式,即讓safe_mode = On,還有一個就是返回php執行錯誤的display_errors 這會返回很多有用的資訊,所以我們應該關閉之,
即讓display_errors=off  關閉錯誤顯示後,php函數執行錯誤的資訊將不會再顯示給使用者。
在php的設定檔php.ini中還有一個非常重要的配置選項magic_quotes_gpc,高版本的預設都是magic_quotes_gpc=On,只有在原來的古董級的php中的
預設配置是magic_quotes_gpc=Off,可是古董的東西也有人用的哦!
當php.ini中magic_quotes_gpc=On的時候會有什麼情況發生哩,不用驚慌,天是塌不下來的啦!它只是把提交的變數中所有的 ' (單引號), " (雙引號), \ (反斜線) 和 Null 字元會自動轉為含有反斜線的逸出字元,例如把'變成了\',把\變成了\\。
就是這一點,讓我們很不爽哦,很多時候我們對字元型的就只好說BYEBYE了,
但是不用氣餒,我們還是會有好方法來對付它的,往下看咯!
3.有一定的php語言基礎和瞭解一些sql語句,這些都很簡單,我們用到的東西很少,所以充電還來的及哦!

我們先來看看magic_quotes_gpc=Off的時候我們能幹些啥,然後我們再想辦法搞一搞magic_quotes_gpc=On的情況哈

一:magic_quotes_gpc=Off時的注入

ref="http://hackbase.com/hacker" target=_blank>攻擊
magic_quotes_gpc=Off的情況雖然說很不安全,新版本預設也讓
magic_quotes_gpc=On了,可是在很多伺服器中我們還發現magic_quotes_gpc=Off的情況,例如www.qichi.*。
還有某些程式像vbb論壇就算你配置magic_quotes_gpc=On,它也會自動消除逸出字元讓我們有機可乘,所以說
magic_quotes_gpc=Off的注入方式還是大有市場的。

下面我們將從文法,注入點 and 注入類型幾個方面來詳細講解mysql+php注入

A:從MYSQL文法方面先
  1。先講一些mysql的基本文法,算是給沒有好好學習的孩子補課了哦~_~
      1)select
    SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
    select_expression,...
    [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
    [FROM table_references
        [WHERE where_definition]
        [GROUP BY col_name,...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] ;   ]
常用的就是這些,select_expression指想要檢索的列,後面我們可以用where來限制條件,我們也可以用into outfile將select結果輸出到檔案中。當然我們也可以用select直接輸出
例如

mysql> select 'a';
+---+
| a |
+---+
| a |
+---+
1 row in set (0.00 sec)
具體內容請看mysql中文手冊7.12節
下面說一些利用啦
看代碼先
這段代碼是用來搜尋的哦
.........
SELECT * FROM users WHERE username LIKE ‘%$search%' ORDER BY username
.......
?>

這裡我們順便說一下mysql中的萬用字元,'%'就是萬用字元,其它的萬用字元還有'*'和'_',其中" * "用來匹配欄位名,而" % "用來匹配欄位值,注意的是%必須與like一起適用,還有一個萬用字元,就是底線" _ ",它代表的意思和上面不同,是用來匹配任何單個的字元的。在上面的代碼中我們用到了'*'表示返回的所有欄位名,%$search%表示所有包含$search字元的內容。

我們如何注入哩?
哈哈,和asp裡很相似
在表單裡提交
Aabb%' or 1=1 order by id#
註:#在mysql中表示注釋的意思,即讓後面的sql語句不執行,後面將講到。
或許有人會問為什麼要用or 1=1呢,看下面,

把提交的內容帶入到sql語句中成為

SELECT * FROM users WHERE username LIKE ‘%aabb%' or 1=1 order by id# ORDER BY username

假如沒有含有aabb的使用者名稱,那麼or 1=1使傳回值仍為真,使能返回所有值

我們還可以這樣

在表單裡提交
%' order by id#
或者
' order by id#
帶入sql語句中成了
SELECT * FROM users WHERE username LIKE ‘% %' order by id# ORDER BY username

SELECT * FROM users WHERE username LIKE ‘%%' order by id# ORDER BY username
當然了,內容全部返回。
列出所有使用者了喲,沒準連密碼都出來哩。
這裡就舉個例子先,下面會有更精妙的select語句出現,select實際上幾乎是無處不在的哦!
2)下面看update咯
Mysql中文手冊裡這麼解釋的:
UPDATE [LOW_PRIORITY] tbl_name SET col_name1=expr1,col_name2=expr2,...
        [WHERE where_definition]
UPDATE用新值更新現存表中行的列,SET子句指出哪個列要修改和他們應該被給定的值,WHERE子句,如果給出,指定哪個行應該被更新,否則所有行被更新。
詳細內容去看mysql中文手冊7.17節啦,在這裡詳細介紹的話會很羅嗦的哦。
由上可知update主要用於資料的更新,例如文章的修改,使用者資料的修改,我們似乎更關心後者,因為......
看代碼先哦
我們先給出表的結構,這樣大家看的明白
CREATE TABLE users (
id int(10) NOT NULL auto

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.