这两天一直在搞CTF,焦头烂额,这玩意脑洞不够大,思域不够开阔简直分分钟急哭,到现在还有几个没做完,先把做好的附上思路+流程,本人小白一个,大牛遇到不喜勿喷,有其他思路可以帮忙评论教育!谢谢!
第一个
- 1、robots.txt可以告诉百度您网站的哪些页面可以被抓取,哪些页面不可以被抓取。
- 2、您可以通过Robots工具来创建、校验、更新您的robots.txt文件,或查看您网站robots.txt文件在百度生效的情况。
- 3、Robots工具暂不支持https站点。
- 4、Robots工具目前支持48k的文件内容检测,请保证您的robots.txt文件不要过大,目录最长不超过250个字符。
最后顺便附上360对于robot协议的词条解释https://baike.so.com/doc/4854891-5072162.html。
第二个
第三个
第四个
第五个
Branch analysis from position: 0
Jump found. Position 1 = 23, Position 2 = 38
Branch analysis from position: 23
Jump found. Position 1 = 26, Position 2 = 35
Branch analysis from position: 26
Jump found. Position 1 = 29, Position 2 = 32
Branch analysis from position: 29
Jump found. Position 1 = 34
Branch analysis from position: 34
Jump found. Position 1 = 37
Branch analysis from position: 37
Jump found. Position 1 = 40
Branch analysis from position: 40
Return found
Branch analysis from position: 32
Jump found. Position 1 = 37
Branch analysis from position: 37
Branch analysis from position: 35
Jump found. Position 1 = 40
Branch analysis from position: 40
Branch analysis from position: 38
Return found
filename: C:\ctf\index.php
function name: (null)
number of ops: 44
compiled vars: !0 = $a, !1 = $b, !2 = $c
line # * op fetch ext return operands
---------------------------------------------------------------------------------
2 0 > EXT_STMT
1 ECHO 'do+you+know+Vulcan+Logic+Dumper%3F%3Cbr%3E'
3 2 EXT_STMT
3 BEGIN_SILENCE ~0
4 FETCH_R global $1 '_GET'
5 FETCH_DIM_R $2 $1, 'flag1'
6 END_SILENCE ~0
7 ASSIGN !0, $2
4 8 EXT_STMT
9 BEGIN_SILENCE ~4
10 FETCH_R global $5 '_GET'
11 FETCH_DIM_R $6 $5, 'flag2'
12 END_SILENCE ~4
13 ASSIGN !1, $6
5 14 EXT_STMT
15 BEGIN_SILENCE ~8
16 FETCH_R global $9 '_GET'
17 FETCH_DIM_R $10 $9, 'flag3'
18 END_SILENCE ~8
19 ASSIGN !2, $10
6 20 EXT_STMT
21 IS_EQUAL ~12 !0, 'fvhjjihfcv'
22 > JMPZ ~12, ->38
7 23 > EXT_STMT
24 IS_EQUAL ~13 !1, 'gfuyiyhioyf'
25 > JMPZ ~13, ->35
8 26 > EXT_STMT
27 IS_EQUAL ~14 !2, 'yugoiiyhi'
28 > JMPZ ~14, ->32
9 29 > EXT_STMT
30 ECHO 'the+next+step+is+xxx.zip'
10 31 > JMP ->34
11 32 > EXT_STMT
33 ECHO 'false%3Cbr%3E'
13 34 > > JMP ->37
14 35 > EXT_STMT
36 ECHO 'false%3Cbr%3E'
16 37 > > JMP ->40
17 38 > EXT_STMT
39 ECHO 'false%3Cbr%3E'
19 40 > NOP
22 41 EXT_STMT
42 ECHO '%3C%21--+index.php.txt+%3F%3E%0D%0A%0D%0A'
43 > RETURN 1
branch: # 0; line: 2- 6; sop: 0; eop: 22; out1: 23; out2: 38
branch: # 23; line: 7- 7; sop: 23; eop: 25; out1: 26; out2: 35
branch: # 26; line: 8- 8; sop: 26; eop: 28; out1: 29; out2: 32
branch: # 29; line: 9- 10; sop: 29; eop: 31; out1: 34
branch: # 32; line: 11- 13; sop: 32; eop: 33; out1: 34
branch: # 34; line: 13- 13; sop: 34; eop: 34; out1: 37
branch: # 35; line: 14- 16; sop: 35; eop: 36; out1: 37
branch: # 37; line: 16- 16; sop: 37; eop: 37; out1: 40
branch: # 38; line: 17- 19; sop: 38; eop: 39; out1: 40
branch: # 40; line: 19- 22; sop: 40; eop: 43
path #1: 0, 23, 26, 29, 34, 37, 40,
path #2: 0, 23, 26, 32, 34, 37, 40,
path #3: 0, 23, 35, 37, 40,
path #4: 0, 38, 40,
do you know Vulcan Logic Dumper?<br>false<br><!-- index.php.txt ?>
require_once 'dbmysql.class.php';
require_once 'config.inc.php';
if(isset($_POST['number']) && isset($_POST['username']) && isset($_POST['password'])){
if (strlen($_POST['username']) > 10){
echo "<script>
alert('用户名长度超出限制!');
function jumpurl(){
location='register.html';
}
setTimeout('jumpurl()',1000);
</script>";
exit();
}else{
$db = new mysql_db();
$number = is_numeric($_POST['number']) ? $_POST['number'] : 1;
$username = $db->safe_data($_POST['username']);
$password = $db->my_md5($_POST['password']);
$sql = "insert into"."`".table_name."`"."values('$username', '$password', $number)";
if($db->select($sql)){
echo "<script>
alert('注册成功!1秒钟以后页面将自动跳转');
function jumpurl(){
location='login.html';
}
setTimeout('jumpurl()',1000);
</script>";
}else{
die('该用户名已被注册!');
}
}
}
?>
require_once 'dbmysql.class.php';
require_once 'config.inc.php';
if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['number'])){
$db = new mysql_db();
$username = $db->safe_data($_POST['username']);
$password = $db->my_md5($_POST['password']);
$number = is_numeric($_POST['number']) ? $_POST['number'] : 1;
$username = trim(str_replace($number, '', $username));
$sql = "select * from"."`".table_name."`"."where username="."'"."$username"."'";
$row = $db->query($sql);
$result = $db->fetch_array($row);
if($row){
if($result["number"] === $number && $result["password"] === $password){
echo "<script>alert('nothing here!')</script>";
}else{
echo "<script>
alert('密码错误,老司机翻车了!');
function jumpurl(){
location='login.html';
}
setTimeout('jumpurl()',1000);
</script>";
}
}else{
exit(mysql_error());
}
}else{
echo "<script>
alert('用户名密码不能为空!');
function jumpurl(){
location='login.html';
}
setTimeout('jumpurl()',1000);
</script>";
}
?>
class mysql_db{
public static $link = null;
public function __construct(){
if(self::$link == null){
self::$link = self::connect();
}
}
/*
数据库连接
*/
public static function connect(){
self::$link = @mysql_connect(DB_HOST, DB_USER, DB_PASS);
if(self::$link == false) exit("数据库链接失败!");
$db = mysql_select_db(DB_NAME, self::$link);
if($db == false) exit("数据库选择失败!");
mysql_query('SET names utf8');
return self::$link;
}
/*
数据库执行语句
*/
public function query($sql){
$res = mysql_query($sql) or die("数据库执行错误!".mysql_error());
return $res;
}
public function select($sql){
if(!mysql_query($sql)){
return false;
}
return true;
}
/*
自定义数据库密码存储时候的加密函数
*/
public function my_md5($string){
return md5(substr(md5($string),5,24));
}
/*
一个数据库查询的返回值,返回值是一个维数组
*/
public function fetch_array($query) {
return mysql_fetch_array($query, MYSQL_ASSOC);
}
/*
入库前的安全处理函数
*/
public function safe_data($value){
if( MAGIC_QUOTES_GPC ){
stripcslashes($value);
}
return addslashes($value);
}
}
?>
header("Content-type: text/html; charset=utf-8");
define('IS_MASTER', true);
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc() ? true : false);
define('DB_HOST','localhost');
define('DB_USER','test');
define('DB_PASS','test1234');
define('DB_NAME','test');
define("table_name", 'users');
?>
第六个
有提示!Large internal network,译为大内网,看来这是大内密探的官网了(哈哈哈哈)。根据提示,我们肯定需要伪造IP了,这里我直接用XFF或者client-ip,大内网就用A段10.0.0.1
当我在这个页面停留了近十分钟都没有发现任何反应之后我发现我失去耐心了,在暴走之际,突然想起火狐有个XFF的插件,果断放弃burp,该用火狐的XFF重新尝试
刷新页面
发现页面提示有变化,show me your key,随便传个key值666,发现没反应,换成POST方式试试
告诉我这个key的md5值是5a2a7d385fdaad3fabbe7b11c28bd48e,key值前面是ichunqiu开头,后面三位要我从a到z0到9**,怎么办?burp**?别搞那么复杂,写个python脚本啊!据说python是世界上最好的计算机语言,有不同意见的可以在评论里发表(静待各位互撕嘻嘻嘻),python脚本内容如下
#!/bin/bash
import hashlib
def md5(data):
m = hashlib.md5()
m.update(data)
a = m.hexdigest()
return a
a = 'ichunqiu'
b = 'abcdefghijklmnopqrstuvwxyz1234567890'
for i in b:
for j in b:
for k in b:
if md5(a+i+j+k)=='5a2a7d385fdaad3fabbe7b11c28bd48e':
print a+i+j+k
**出key值为ichunqiu618ok,将key值传给网站
让我继续访问xx00xxoo.php,将之拼接到URL中,URL=http://106.75.108.111:2222/xx00xxoo.php,访问之
源代码在x0.txt,发现是discuz加密函数,回显的加密字符是flag加密的结果,我们需要调用这个函数本地写个PHP跑一下就出flag了,下面是自己拼接的PHP文件内容
<?php
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
$ckey_length = 4;
$key = md5($key ? $key : UC_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for ($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for ($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for ($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if ($operation == 'DECODE') {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc . str_replace('=', '', base64_encode($result));
}
}
echo authcode($string='5558r8JQYwfDM89zyttHVaMLg2NRDiGRetV65PBi7Zsj6mJ3kYTo5QIcKVooQoPEVKLMgPvH6Z/bo8GoNPL2Os63qiUYk4Q',$operation = 'DECODE', $key = 'ichunqiu618ok', $expiry = 0);
?>
下面是跑得结果
第七个
import time,hashlib,thread,requests
def ww(url):
a=requests.get(url)
#print url
if a.status_code==200:
a.encoding="utf-8"
print a.text
return
for i in range(1,1001):
a=hashlib.md5(str(i)).hexdigest()
url="http://106.75.26.211:3333/u/"+a+".txt";
thread.start_new_thread(ww,(url,))
time.sleep(0.1)
至此,除了两个还没搞之外其他CTF全部搞定,真心很累,但是很充实,在这个过程中学到了很多知识,也知道了自己的诸多不足,总之一句话,革命尚未成功,同志还需努力!大家共勉!