php_bugs代码审计(二)

本文详细介绍了PHP代码审计中的多种漏洞利用方式,包括SQL注入注释外包和OR绕过、MD5函数的数组绕过、ereg与strpos函数的NULL绕过、弱类型比较的漏洞利用等。通过具体的payload示例,阐述了如何利用这些技巧来绕过代码验证和安全措施。
摘要由CSDN通过智能技术生成

16、SQL注入注释外包’及or绕过

<?php
#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';
 
function clean($str){
   
	if(get_magic_quotes_gpc()){
   
		$str=stripslashes($str);
	}
	return htmlentities($str, ENT_QUOTES);
}
 
$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);
 
$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
   
	die('Invalid password!');
}
 
echo $flag;
?>

目标! r e s u l t ∣ ∣ m y s q l _ n u m _ r o w s ( result || mysql\_num\_rows( resultmysql_num_rows(result) < 1为真,并没有对内容进行检测,不需要是admin也行
几个函数提一下:

  • get_magic_quotes_gpc,获取当前php.ini中的magic_quotes_gpc 的配置(on/off)。如果 magic_quotes_gpc 为off时返回 0,否则返回 1。在 PHP 5.4.0 起将始终返回 FALSE。 magic_quotes_gpc是一种转义配置,所有的 ’ (单引号)、" (双引号)、\(反斜杠)和 NUL’s 被一个反斜杠自动转义。
  • stripslashes,去掉反斜杠
语法
stripslashes(string)

例:echo stripslashes("Who\'s Bill Gates?");
运行结果:Who's Bill Gates?

echo stripslashes("Who\\'s Bill Gates?");
运行结果:Who's Bill Gates?

echo stripslashes("Who\\\'s Bill Gates?");
运行结果:Who\'s Bill Gates?
  • htmlentities,把字符转换为 HTML 实体。ENT_QUOTES是转换双引号和单引号,单引号被转换为&#039;

也就是说,参数可能被去掉\,但是单引号和双引号一定会被html实体化,所以参数不能有单引号和双引号,而现今版本的php,get_magic_quotes_gpc是被废掉的

php中查询语句:
SELECT * FROM users WHERE name=’’.KaTeX parse error: Can't use function '\'' in math mode at position 11: username.'\̲'̲ AND pass=\''.password.’’;
sql中也就是
SELECT * FROM users WHERE name=‘username’ AND pass=‘password’;
参数的单引号是拼接上去的,而我们输入单引号就会被html实体化(虽然在页面上显示的仍然是单引号)

payload:
?username=\&password= or 1%23

形成查询语句:SELECT * FROM users WHERE name=’\’ AND pass=’ or 1%23’
也就是PHP语句的name后面的单引号被转义
这样最后的单引号被注释了,因为有个单引号被转义,所以name就是’AND pass =,or 1之后就为true。

17

这个跟9重复了

18、md5()函数===使用数组绕过

<?php
error_reporting(0);
$flag = 'flag{test}';
if (isset($_GET['username']) and isset($_GET['password'])) {
   
    if ($_GET['username'] == $_GET['password'])
        print 'Your password can not be your username.';
    else 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值