2020全国大学生软件测试大赛——WEB安全测试练习题WriteUp
2020全国大学生软件测试大赛——WEB安全测试练习题WriteUp
练习题:
一、简单的计算题-1
题目网站没有给源码,但是这道题是安恒六月赛的一道题,当时是给了源码的。https://h3110w0r1d.com/archives/221/。不过不给源码也并不是做不了。这道题主要考察的是python注入。
关键点:①将cookie的sessionid进行base64解码可以看出就是题目的计算题字符串以及一些其它编码。同时每次服务器都会下发一个新的sessionid和新的题目。通过BP抓包尝试,每次服务器下发新的sessionid和题目后不会清除以前的session内容,所以我们可以使用一个sessionid对应一个不变的答案。
②题目没有其它回显值,只会返回error、Congratulations、InValid。可以通过布尔盲注,使用Python语句注入爆破flag。例如:答案 and open('./flag', 'r').read()[0] == 'D'
③此题的flag就在./flag文件中,但是题目没有给任何的提示。这一点有点奇怪,不过一般硬猜的话可能也是flag flag.txt?
爆破脚本
1 | import requests, re |
flag:****** flag ===>DASCTF{53a6ee70a3e8c013e2b1dbb2b926d3b2}
一些坑点
1、脚本中的payload payload = str(answer_val) + ' and open("/flag", "r").read()[{}] == "{}"'.format(i, chr(j))
判断是否等于一个字符的位置应该加引号,不然判断不出来。 ??? == ‘D’ 这里的D要加引号
2、在爆破的时候有可能因为一些网络情况requests方法抛出异常,这种情况需要增加一个异常处理语句,不处理语句让其pass继续进行。