目录遍历
这个怎么感觉这么草率,就是我们把目录都点一遍
然后就找到flag了
可能告诉我们每一个东西都有用,都要仔细看
PHPINFO
这个也是直接就从这些信息里找到flag就行了
备份文件下载
太难的方法不会,只能一个一个试,访问这些组合
这也可以用来解题,下面是常见的备份名字和后缀,可以用来猜测
bak
后缀名是.bak的文件是备份文件,是文件格式的扩展名
这里有一点提示,然后直接访问index.php.bak
vim
vim备份文件后缀名.文件名.swp格式,
在路径中,文件名前面带有点(.)的文件通常被视为隐藏文件。这意味着它们在默认情况下不会在文件浏览器或命令行中显示出来。隐藏文件通常用于存储配置文件、临时文件或其他不需要用户直接访问的文件
所以这里访问 index.php.swp是没有办法出来的,必须要在前面加一个点
.index.php.swp隐藏文件
.DS-Store
这个是我们直接访问.DS-Store 然后就出现了一些,虽然乱码了,但是我们就应该从乱码中找到一些信息,看到了txt 就前面一些就可以把空格去掉
弱口令
这里就是用一些常用的密码和用户名进行尝试啦,可以使用burp的
Sinper 数据一一对应
Battering ram 将同一个数据给俩个一起用
Pitch fork 将俩个字典分别匹配
Cluster bomb 俩个字典交叉匹配
默认口令
这个就是指的在特定的网站或软件中会有自己特定的密码和用户名,可以根据其中一点去百度就可以进去啦
xss
在url中操作,get传参
主要就是由于输入过滤不严格,我们可以嵌入恶意代码,一般是javscript,如果执行我们就
成功了
xss可以分为
反射性
存储型:会在可以持久的储存的地方,比如会可能在数据库里
DOM:主要区别就是不会与服务器进行交汇,直接利用浏览器的DOM功能进行
这个会利用到# #后的称为描点,不会传到服务器,这里先暂时了解一下,后面再慢慢学习DOM吧
主要playload的构造就是
1.利用伪协议
<a href="javascript:alert(/xss/)">
没有javascript好像也行,会识别成javascript语言
<a> <img>
2.利用事件
<img src='./smile.jpg' οnmοuseοver='alert(/xss/)'>
<img> <input>
大部分标签应该都能使用
3.也可以直接在<script> <script\>之间插入代码
然后就是具体绕过源代码中的一些过滤,转义,编码(通过一些函数)(防止xss漏洞的手段)
1.闭合,闭合前面的一些标签
2.大小写
3.双写
4.编码
5.利用burp
文件上传
文件上传大体就是我们需要让用户下载我们的木马文件,然后该文件被简析
分为几类:(大体概括一下,后续应该会有补充)
1.客户端(应该就是我们说的前端吧,一般会直接显示在浏览器中,都是服务器的可能就是源码了吧)
(1)禁用javascript
(2)burp抓包,修改后缀
2.服务器端
这个会验证Content-Type
所以我们用burp抓包,然后修改Content-Type的内容
3.黑名单
(1)换成 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtm
(2)大小写绕过
(3)双写绕过
(4)点绕过,burp抓包,在后面加点
(5)::$DATA 绕过,burp抓包,在后面加::$DATA
(6)点空格点绕过,burp抓包,在后面加. .
(7)利用中间文件,.htaccess .user.ini
4.白名单
(1)%00截断
(2)0X00截断
%00 0X00都是表示结束符
二者的区别就是%00是get ,进行了get编码
他们都是把文件名字改为白名单里有的,然后把路径改为1.php%00
(3)条件竞争
指会验证白名单,如果不在白名单里,就会删除
这个我们要在删除前将文件上传上去
利用burp无限次放送,不断刷新
5.图片马
copy 图片文件名称/b+脚本文件名称/a
制作图片马
(1)可以绕过getimagesize
(2)文件头检测
(3)exit_imagetype(检验前俩个字节并检验后缀)
6.二次渲染
指会在后端对图片重新修改一些内容
上传俩张图片,找一下俩个不同的地方,将我们的PHP代码放进去
我们的题
1.无验证
这个要先自己上传一句话木马
然后会显示上传路径
之后我们用蚁剑连接
2.前端验证,
上传1.jpg,利用burp将jpg修改为php
3. .htaccess
上传一个.htaccess文件,具体看前面
然后直接上传1.jpg
.htaccess文件会直接把我们jpg解析为php的
4.mime验证
这个也是burp抓包
然后修改contene-type
记得是修改底下那个,别修改上面的,没用的
而且可以先上传一个标准的jpg,然后看看contene-type是什么,直接复制到我们上传的php的时候就欧克
5.%00截断
burp抓包,上传1.php
修改名字为1.jpg 在filename里修改
修改路径,在最上面upload/后加1.php%00,
6.双写
直接双写上传
7.
rce
xss漏洞与rce漏洞的区别
xss主要在前端,而rce是后端
- XSS漏洞主要影响用户端,攻击者通过注入恶意脚本来获取用户信息;
- RCE漏洞主要影响服务器端,攻击者可以在远程服务器上执行任意恶意代码;
- XSS漏洞发生在前端页面的输入输出处理过程中,RCE漏洞发生在后端服务器应用程序中
rce 主要是分为远程代码执行或者系统命令执行
远程代码
eval() assert() 把字符串当作php代码执行
preg_replace()preg_replace 函数执行一个正则表达式的搜索和替换。
create_function()
从传递的参数中创建动态参数,并返回它的唯一名字,会创建一个匿名函数
array_map()
、call_user_func()、call_user_func_array()、array_filter()、uasort()
系统命令
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
1.eval
首先第一题,直接给了源码,
这个源码意思
就是isset检测一下是否有cmd 变量
如果有的话就eval() 这个就是把代码直接按php执行
因为这里是有变量的,使用我们是可以直接用这个变量来写入一些东西
/?cmd=system("ls")
system():能将字符串作为OS命令执行,且返回命令执行结果
这里我们
ls指显示当前目录下的文件
ls / 就是根目录, / 本身就表示根目录
ls 后加文件路径就可以看指定路径下的目录了
这道题我们从当前路径没有什么信息,我们可以看看根目录
然后看到了 flag 我们就直接读其中的内容就欧克
cat 用来显示文件里的内容
2.文件包含
第二题get中用了strpos函数来过滤了flag
所以不能直接使用,我们发现shell.txt中正好有eval函数
使用先把shell.txt付给file 然后再把我们想要的东西付给shell,txt中的ctfhub
想之前一样,先查询一些目录和根目录
然后用cat来显示文件内容
注意事项:
system("cat flag")
会尝试查找名为flag
的文件,并将其内容打印到终端上。system("cat /flag")
会尝试查找根目录下的名为flag
的文件,并将其内容打印到终端上
在使用引号时,单引号和双引号的选择主要取决于字符串中是否包含特殊字符。如果字符串中包含特殊字符(如空格),则需要使用双引号将整个字符串括起来,以确保命令被正确解析
3.php://
这一题用了substr来检验
php:// 访问各个输入/输出流(I/O streams)
php://input 是可以访问请求的原始数据的只读流。可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。
由于php://input是POST,所以我们burp抓包,修改get为post
POST /?file=php;//input HTTP1.1
然后再把我们的php内容放在最后面就行
4.读取源代码
php://filter
用于筛选过滤,可以作为一个中间流来处理其他流
名称 | 描述 |
---|---|
resource=<要过滤的数据流> | 这个参数是必须的。它指定了你要筛选过滤的数据流。 |
read=<读链的筛选列表> | 该参数可选。可以设定一个或多个过滤器名称,以管道符(| )分隔。 |
write=<写链的筛选列表> | 该参数可选。可以设定一个或多个过滤器名称,以管道符(| )分隔。 |
<;两个链的筛选列表> | 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。 |
这里我们只需要写我们想要读的文件就欧克,后面还可以用这个函数进行过滤,编码等,
php://filter这个是get的,所以我们可以抓包,或者直接在url中进行赋值也可以,get的赋值可以用url 进行传参
/?file=php://filter/resource=/flag
这里题目提醒了说flag 在/flag中,所以我直接用的,是可以的,直接就出来了我们的ctfhub{ }
5.命令执行
(1)过滤了cat
我们用\ '' "" {任意无意义变量名}绕过
(2)过滤空格
用IFS$9、%09、<、>、<>、{,}、%20、${IFS}
、${IFS}
来代替空格
(3)过滤目录分隔符
由于目录分隔符被过滤了,所以我们在使用cat 的时候就没办法让它到了/ 根目录那里
我们用其他办法让它路径过去
可以使用cd cd就是命令可以切换当前工作目录
用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 无论是否失败, 所有命令都会执行。
(4)过滤运算符
flag_168921794030659.php
这个把其他过滤了,都是还有;
flag_18803100013080.php
ssrf
ssrf指服务器端请求伪造
原因:漏洞形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
1.题目说尝试访问位于127.0.0.1的flag.php吧
打开后什么url 什么都没有,直接构造
/?url=127.0.0.1/flag.php
2.
/?url=file:///var/www/html/flag.php
网页根目录(/var/www/html)
一般网页的都在这个目录里
file协议: 在有回显的情况下,利用 file 协议可以读取任意文件的内容
3.端口
用burp进行爆破
选Numbers
设置step为1
直接找不一样的就行啦
这里我的是8492,真的是眼花,