2019 ISCC WEB trick笔记 (intval,chr)
WEB1
考的既然是简单题目,肯定是一些小trick,做的多的就会了。
<?php
error_reporting(0);
require 'flag.php';
$value = $_GET['value'];
$password = $_GET['password'];
$username = '';
for ($i = 0; $i < count($value); ++$i) {
if ($value[$i] > 32 && $value[$i] < 127) unset($value);
else $username .= chr($value[$i]);
if ($username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333) {
echo 'Hello '.$username.'!', '<br>', PHP_EOL;
echo $flag, '<hr>';
}
}
highlight_file(__FILE__);
代码审计一波,就是传入数组,并且组成''w3lc0me_To_ISCC2019'',但是问题来了,要绕过$value[$i] > 32 && $value[$i] < 127,然后再chr变回字符,一开始我想用16进制或者8进制试试,发现不行。
我试了下chr(7777),竟然是a,想着是不是循环的,估计是对什么取模,查了下,发现确实是对256取模,呢么我们传入这些字符并且加上256就行了
写了个脚本,然后一个一个传过去。最后的一步是怎么绕过intval呢,可以传入16进制,令其强制转换。
payload如下:
WEB2
队友说,就是纯爆破。。我惊了。第一次做纯爆破的,一般都是套路下的。队友告诉我一款工具,Pkav HTTP Fuzzer ,可以爆破简单的带验证码的密码.
首先自己写个脚本生成以0-9为基本字符的一个3位数密码dict
然后根据网上Pkav网上的教程,先抓包,然后数据包cv到指定对应拦中
因为验证码图片用了#,所以F12查看源码
所以地址即为 http://39.100.83.188:8002/vcode.php
然后添加到验证码识别的地方
重放选项中可以选择字符串匹配或者正则表达式匹配,我们匹配了flag
然后发包器开始,发现没有设置变体值,回去又设置了一下
然后发包器start
get
WEB4
web4又是一道代码审计的题目
<?php error_reporting(0); include("flag.php"); $hashed_key = 'ddbafb4eb89e218701472d3f6c087fdf7119dfdd560f9d1fcbe7482b0feea05a'; $parsed = parse_url($_SERVER['REQUEST_URI']); if(isset($parsed["query"])){ $query = $parsed["query"]; $parsed_query = parse_str($query); if($parsed_query!=NULL){ $action = $parsed_query['action']; } if($action==="auth"){ $key = $_GET["key"]; $hashed_input = hash('sha256', $key); if($hashed_input!==$hashed_key){ die("<img src='cxk.jpg'>"); } echo $flag; } }else{ show_source(__FILE__); }?>
爆出flag最关键的一步就是你输入的key
这个题目,我看了5分钟,突然想起来的一个知识点(变量覆盖)。之前看过一个文章,总结了一些引起变量覆盖的函数
我找了下收藏夹发现了他 https://www.freebuf.com/column/150731.html
parse_str会引起变量覆盖的漏洞,但是出现在比较老的php版本中,新版本貌似修复了,如果不是数组的话,什么都不返回(函数细节望百度,Google)
呢么我们可以将预先定义的$hashed_key覆盖,payload如下
http://39.100.83.188:8066/?action=auth&hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b&key=1
hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b 是1的sha256加密后字符串
key=1
这样就可以覆盖原来的hashed_key并且使传入的key与我们事先准备好的key的sha256加密
呢么就OK了
WEB5(根据大佬wp https://www.zhaoj.in/)
UA头注入
order by盲注
这题是看了WP,并且WP中有一个语句是这样的,select*from table_name=''*'',相当于select*from table_name
我自己实验了如下:
发现只是匹配的字符。(算认识到的一个trick吧)
题目中的order by注入,其实是根据order by排序的顺序,出来的是字母或者数字小的条目
test1:order by 1 根据第一列,id排序
test2:order by 2根据第二列,name排序(数字在字母前面)
test3:order by 3,2,1如果第三列相同,则比较第二列(题目中已得到第二列,若passwrod第一位相等,呢么按照order by出来的一定是新条目,因为数字先字符)