bugku 代码审计

1、strcmp比较字符串

1、这里strcmp()函数漏洞,在传入非字符串类型的变量,一般是数组,函数返回值是0,payload:?a[]=1。

2、md5()函数

1、md5绕过,payload:?username[]=1&password[]=2。

3、extract变量覆盖

1、extract()函数变量覆盖漏洞,payload:?shiyan=&flag=。

4、数组返回NULL绕过

1、

strpos()如果传入的参数是数组,返回的是NULL,不等于FALSE,所以用数组绕过strpos,payload:?password[]=1。

5、弱类型整数大小比较绕过(php弱类型)

1、

$temp不能是数字还要大于1336

payload:?password=1337a

6、sha()函数比较绕过

<?php
$flag = "flag";
if (isset($_GET[‘name‘]) and isset($_GET[‘password‘]))
{
	var_dump($_GET[‘name‘]);
	echo "";
	var_dump($_GET[‘password‘]);
	var_dump(sha1($_GET[‘name‘]));
	var_dump(sha1($_GET[‘password‘]));
	if ($_GET[‘name‘] == $_GET[‘password‘])
		echo ‘Your password can not be your name!‘;
	else if (sha1($_GET[‘name‘]) === sha1($_GET[‘password‘]))
		die(‘Flag: ‘.$flag);
	else
		echo ‘Invalid password.‘;
}
?>

1、sha()函数用数组绕过,payload:?name[]=1&password[]=2。

7、md5加密相等绕过

<?php
$md51 = md5(‘QNKCDZO‘);
$a = @$_GET[‘a‘];
$md52 = @md5($a);
if(isset($a)){
	if ($a != ‘QNKCDZO‘ && $md51 == $md52) {
		echo "flag{*}";
	}
}
?>

1、payload:?a=s878926199a

8、十六进制与数字比较

<?php
error_reporting(0);
function noother_says_correct($temp)
{
$flag = ‘flag{test}‘;
$one = ord(‘1‘); //ord — 返回字符的 ASCII 码值
$nine = ord(‘9‘); //ord — 返回字符的 ASCII 码值
$number = ‘3735929054‘;
// Check all the input characters!
for ($i = 0; $i < strlen($number); $i++)
{
	// Disallow all the digits!
	$digit = ord($temp{$i});
	//$temp{#$i}不能是1-9
	if ( ($digit >= $one) && ($digit <= $nine) )
	{
		// Aha, digit not allowed!
		return "flase";
	}
}
if($number == $temp)
	return $flag;
}
$temp = $_GET[‘password‘];
echo noother_says_correct($temp);
?>

$temp既要等于3735929054,又不能是数字,用16进制绕过,payload:?password=0xdeadc0de。

9、ereg正则%00截断

<?php
$flag = "xxx";
if (isset ($_GET[‘password‘])){
	//password必须是字母数字
	if (ereg ("^[a-zA-Z0-9]+$", $_GET[‘password‘]) === FALSE){
		echo ‘You password must be alphanumeric‘;
	}
	//password不能超过7位,还要大于9999999
	else if (strlen($_GET[‘password‘]) < 8 && $_GET[‘password‘] > 9999999){
		//password中必须有-
		if (strpos ($_GET[‘password‘], ‘-‘) !== FALSE){
			die(‘Flag: ‘ . $flag);
		}
		else{
			echo(‘- have not been found‘);
		}
	}
	else{
	echo ‘Invalid password‘;
	}
}
?>

1、strlen()和strpos()用数组绕过,payload:?password[]=。

10、strpos数组绕过

<?php
$flag = "flag";
if (isset ($_GET[‘ctf‘])) {
	if (@ereg ("^[1-9]+$", $_GET[‘ctf‘]) === FALSE)
		echo ‘必须输入数字才行‘;
	else if (strpos ($_GET[‘ctf‘], ‘#biubiubiu‘) !== FALSE)
		die(‘Flag: ‘.$flag);
	else
		echo ‘骚年,继续努力吧啊~‘;
}
?>

1、strpos()用数组绕过,payload:?ctf[]=。

原文地址:https://www.cnblogs.com/wrnan/p/12520118.html

时间: 2024-10-10 06:07:05

bugku 代码审计的相关文章

bugku 变量覆盖

bugku 变量覆盖 代码审计,注重变量 变量覆盖一般使用置空的方式让他们的值相等 解题 白话代码: 一个名叫flag的变量等于'xxx' 将通过GET传过来的数组转为一个名为数组名,值为数组值的变量(如果新的变量和已有变量重名,会将已有变量替换) 如果存在一个名叫shiyan的字符串 将flag变量的值赋给名为content变量 如果变量shiyan和变量content的值相同, 就输出flag的值 否则就输出Oh,no 因为extract()会把符号表中已存在的变量名的值替换掉,所以制造Pa

php代码审计知识整理【4】

代码审计 =================================================================================================== *   sql注入     **  变量未过滤导致         *** http://www.test404.com/post-811.html         -   $_SERVER变量未过滤,请求头中X_FORWARDED_FOR,CLIENT_IP,HTTP_HOST,ACCE

php代码审计之弱类型引发的灾难

有人说php是世界上最好的语言,这可能是对开发人员来说,确实有这方面的特点,因为它开发起来不像其他语言那样麻烦,就比如:弱类型,它不需要像java等语言那样明确定义数据类型.这给开发带来了很大的便利,所有的数据类型都可以用$xx来定义,而不需要int i,string a,fload b等等这样去定义它.这样确实很方便,因为php帮助你判断了数据类型,比如整形int ,你只要$a=1;那这个1就是整形,$a='abc'那这个abc就会被php判断为字符串类型.但是弱类型方便是方便,但是带来的安全

技术专题-PHP代码审计

作者:坏蛋链接:https://zhuanlan.zhihu.com/p/24472674来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.前言 php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞.如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程. 入门php代码审计实际并无什么门槛要求,只需要理解基础的php语法规则,以及理解各种类型漏洞的出现原因则可以开始尝试审计php源代码.通常的漏洞演示中

PHP代码审计1-审计环境与调试函数

审计环境与调试函数 审计环境 测试环境 常用集成环境:phpStudy.WampServer #不同的操作系统下,漏洞测试的结果也可能不一样 PHP编写工具 EditPlu Notepad++ 代码审计工具 Seay 代码审计平台 DVWA(注:windows下,需要将配置文件中的password改为空) ZVulDrill (注:需要重新导入数据库文件) 漏洞验证辅助工具 Burp Suite 浏览器扩展(Hack Bar.Firebug.Modify) 正则调试工具 SQL执行监控工具 常用

代码审计基础知识

代码审计函数篇 addslashed() 添加反斜杠 stripslashed() 去掉反斜杠 get_magic_quotes_gpc() 判断是否开启gpc expode(".",$array) 分割成数组 is_numeric() 判断是否为数字 sizeof() 判断长度 trim() 去处字符串开头和末尾的空格或其他字符 exec() 不输出结果,返回最后一行shell结果,所以结果可以保存到一个返回的数组里面 passthru()只调用命令,把命令的运行结果原样地直接输出到

php代码审计学习之dvwa_sql

0x00 由于转了onenote行列,所以已经好久没有发表新的随笔了,但是想想还是非常有必要的,这几天开始学习php代码审计,所以先开始发这一些的随笔吧! 首先就先通过十大测试平台dvwa开始学习吧,先在这里带上参考的大牛链接,感谢分享 1.http://drops.wooyun.org/papers/483 2.http://www.lxway.com/86980986.htm   is_numeric 函数绕过 3.http://www.cnblogs.com/Safe3/archive/2

代码审计入门后审计技巧

很多朋友读了<PHP代码审计>,书的确很好. 根据书中内容总结大概如下: https://www.waitalone.cn/introduction-to-code-auditing.html 当你面对100行代码,你可以轻松找到漏洞.但当面对1W行以至于整个项目的代码时候,你还能轻松的找到么? 这时候想到第一个问题,可能是应该怎么下手?从哪里下手? 程序可以理解为树,树根是数据库,树干是支撑框架.容器,树叶是Web程序,等等. 当数据从Web程序通过时候,一定会有数据到达数据库.我想数据库的

php代码审计基础笔记

出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 ---------------------------------------------------------- team:xdsec&90sec author:wilson blog:http://blog.wils0n.cn/ 文章链接:wilson's blog_php代码审计基础笔记[求人气~~] ----------------------