請問關於攻擊 PHP 網站的技術

來源:互聯網
上載者:User
請教關於攻擊 PHP 網站的技術
大家好,最近我們來了個變態老師給了一個變態的課題,希望大家給些建議:
他在校內區域網路內建立了一個用 Linux + Apache + PHP + PostgreSQL 搭建的一個個人網站,然後我們的作業就是發現該網站的bug或者直接攻擊它(本人賊想接管它的伺服器然後給他換成黑屏!),找到一個bug就加分...
暫時想到的2個方法是:
1. 編寫一個shell,無窮地測試直到找到該網站的一個法定帳號。 (已經有幾個同學這樣幹了,達到了5分鐘10 000的登人請求包,但是沒有成功,原因是老師狡猾,ID並不是常見的 user, webadmin 等,所以給這個方法帶來了難度)
2. 利用session作文章(網上看到的,但是不知道如何操作)

所以現在很矛盾,沒有這方面的經驗也沒有很好的ideas,所以在這裡請高手們出山指點一二,如果能稍微介紹詳細點那就感激不盡。

先謝謝拉,回答滿意地追加分



------解決方案--------------------
SQL inject / XSS / CC ....
------解決方案--------------------
好厲害。。。
------解決方案--------------------
SQL inject / XSS
這兩個比較靠譜
------解決方案--------------------
僅供參考:


如何入侵php網站

第一講:判斷有沒注射點
這個很簡單,我們最常用的就是看到頁面的格式為:index.php?id=2這樣的地址,我們知道PHP經常是和MYSQL資料庫一起用的,在MYSQL資料庫中一定存在一個表,比如setting_table,我們提交上面地址的時候,程式一般上這樣處理的:
1、用GET或者POST取我們提交的id=1把這個值傳給一個變數id.
2、查詢:select * from setting_table where id =$id
上面的語句就是查詢的語句,我們代入$id=1就是:
select * from setting_table where id=1
這話是沒什麼問題的,會取出id為1的資訊進行顯示給我們,所以我們就能看到正常的頁面。

--------------
看我們是怎麼判斷的:
1、我們提交id=1 and 1=1
看看這個是什麼效果,這裡的$id就是1 and 1=1,我們看看是什麼樣子的:
select * from setting_table where id =1 and 1=1
這個語句加了一個and 語句,後面是1=1是肯定成立的,所以就不影響上面語句的成立,它還會取出id=1的資訊進行顯示給我們,所以我們看到的還是原來的正常頁面。
2、我們提交 id =1 and 1=2
看看這個是什麼效果,這裡的$id就是 1 and 1=2,我們看看在SQL中怎麼執行
select * from setting_table where id =1 and 1=2
分析下這個語句,前面還是一樣的,只是最後加了個and 1=2,這個自然不成立啦!又因為是and串連的,so自然找不到合格啦!只能回顯給我們一個錯誤或者空白的頁面拉~!!
上面就是一般我們採用and 1=1 & and 1=2來判斷的基本原來,但是這裡還要注意幾點,如下:
1、程式處理的時候必須是where id =$id 而不是where id=$id,這個單引號是很不一樣的,怎麼不一樣,以後再說。。
2、程式對我們提交的參數沒有處理或者處理的不好,導致我們可以直接提交,如果程式多我們提交的參數進行處理,又會不一樣,也是後話!
第二講:快速判斷MYSQL版本
前提:你得到一個注射點,比如:news.php?id=1
這個點是你找到的,提交and 1=1 和and 1=2返回的是不同的。
我們就可以這樣來猜MYSQL的版本了。。步驟如下:
1、提交/news.php?id=1/*!40000%20s*/ 如果返回正常就說明MYSQL版本在4000版本以下,你可以依次調節最高位的數字,比如我改為39000提交,如果再正常,就提交38000....直到返回錯誤提示,最後固定的那個就是MYSQL的版本了。。
下面是我提交測試時的過程(唯寫MYSQL版本)
40000(+)--39000(+)--38000(+)--370000(-)--37900(+)--37800(+)--37700(-)--結束!!
得到MYSQL版本是37700。
2、一般我們不去猜具體的版本,我們只關係MYSQL是不是在4.0以上,以為只有4.0以上的MYSQL才支援UNION查詢,以下是不支援的,所以我們經常只用/*!40000%20s*/ 看看是不是4.0以上的版本。
PS:/*!40000%20s*/ 這裡的/*!......*/是mysql裡一種特殊的注釋方式,也沒什麼好奇怪的,記得怎麼用就可以了~~
第三講:PHP注射怎樣得到表名。。
正準備寫,看到有人問到了,就總結下,算第三講吧!

Quote:
Originally posted by spirit at 2006-5-16 05:57 PM:
看了好多 文章了 ....眼睛都花了
裡面涉及到的東西也比較全面
不過 一直不知道怎麼搞出 表
總不能直接搞 去 欄位吧..??
一個一個來啊
資料庫 表 欄位 值...
這個邏輯我認為是對的 ....
對了這裡還是 感 ...
表確實不好搞,不像ASP可能直接暴出來,PHP到現在還是暴不出來的,我們一般有兩個辦法:
1、靠經驗猜:比如大家常用的admin,user,news,vote,wenzhang,guanliyuan等等,沒辦法的事。。
2、暴代碼查看:用Load_file暴出檔案代碼,就可以看到資料插值到什麼表,什麼欄位了,這樣就很明白了,但是load_file也很有技巧的。。以後再講。。
--------------------------------------------
具體說一下吧:
1、這個沒什麼好說的,直接猜就可以了,比如你看到一個注射點,類似news.php?id=1這樣的點,你用union查詢得到具體的欄位,比如這樣:news.php?id=1 and 1=2 union select 1,2,3,4 是成立的,
你就可以這樣猜:news.php?id=1 and 1=2 union select 1,2,3,4 from admin/*如果存在admin表,就會返回真,否則就不存在表admin,其他和這個一樣的。
2、這個就有點終極了,比如你得到他的絕對路徑,可以load_file(file path)出檔案的代碼,比如你暴得管理員登陸的頁面,就能看到他其中的SQL語句,可以看到他是從哪個表了取的值了,是吧》》
原理就是這樣的,多多思考,有什麼心得,希望能分享。。。。
第四講:有無引號的差別
很多朋友都對那個引號的作用不很瞭解,認為加引號和不加是一樣的效果..
引號(包括單、雙)對我們的注射是有著很大的影響的,這裡主要還是和magic的狀態有關,當這個magic為off的時候倒沒什麼影響,當這個magic為on的時候就大不一樣了。。
  • 聯繫我們

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