SQL注入挖掘思路

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

一般SQLI出现在登陆页面,获取HTTP头(user-agent,client-ip等),订单处理等处。

  1. 普通注入:

如下代码,

<?php  

$uname = $_GET['name'] ;
$sql = "SELECT * FROM user where name=$uname";
$conn=mysql_connect('localhost','root','root');
mysql_select_db("userinfo",$conn);
$result=mysql_query($sql,$conn);
print_r('now sql is:'.$sql.'<br/>result is:');
print_r(mysql_fetch_row($result));
?> 

uname变量没有经过处理,便拼接到数据库指令之中,造成了sql注入风险。

所以我们在审计的时候应该关注一些重点关键字,就可以帮助我们高效的发掘漏洞。

关键字
select from
mysql_connect
mysql_query
mysql_fetch_row
...
  1. 编码注入:

宽字节注入

如下代码:

<?php  

$conn=mysql_connect('localhost','root','root');
mysql_select_db("userinfo",$conn);
mysql_query("SET NAMES 'GBK'");
$uid=addslashes($_GET['id']);
$sql="SELECT * FROM user where name='$uid'";
$result=mysql_query($sql,$conn);
print_r('now sql is:' .$sql. '<br/>result is:');
print_r(mysql_fetch_row($result));
mysql_close();
?>   

这里加入了addslashes函数,对部分字符进行了转义,比如:

这里主要是存在一个问题是,编码设置成了GBK,这里会导致成编码注入,也就是宽字节注入,GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,这里addslashes会将引号后面加入反斜杠(\),会造成我们无法利用,GBK的编码范围是0x8140~0xFEFE(不包括xx7F),在遇到%df(ascii(223)) >ascii(128)时自动拼接%5c,因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了,而反斜杠的编码是%5c,而%df%5c是汉字“運”,所以我们在单引号前加上%df即可将后面的单引号吞掉,造成引号成功逃脱转义:

GBK编码第一字节(高字节)的范围是0x81~0xFE,第二字节(低字节)的范围是0x40~0x7E与0x80~0xFE,这样的十六进制表示。而\符号的十六进制表示为0x5C,正好在GBK的低字节中,如果之前有一个高字节,那么正好会被组成一个合法字符,GB2312是被GBK兼容的,它的高位范围是0xA1~0xF7,低位范围是0xA1~0xFE(0x5C不在该范围内),因此不能使用编码吃掉%5c,其它的宽字符集也是一样的分析过程,要吃掉%5c,只需要低位中包含正常的0x5c就行了。

这里一定要注意sql注入和xss不同,在xss中,把上面的PHP代码的GBK改为GB2312,在浏览器中处理行为同GBK,也许是由于GBK兼容GB2312,浏览器都做了同样的兼容:把GB2312统一按GBK行为处理

结果如下:


关键字
SET NAMES
character_set_client=gbk
mysql_set_charset('gbk')

二次urldecode注入

字符进行转换就会有可能产生漏洞,现在大多数web程序都会进行参数过滤,一般会选择addslashes() 等函数或者开启GPC来对特殊符号进行转义,如果某处使用了urldecode或者rawurldecode函数会导致二次解码生成单引号而引起注入。

测试代码:

<?php  

$a=addslashes($_GET['p']);
$b=urldecode($a);
echo 'a='.$a;
echo "<br/>";
echo 'b='.$b;
?>  

这里我们有两个变量,a变量是使用addslashes函数对get得到的p进行转义,b变量是对a进行urldecode的结果,由于使用了addslashes,所以我们的单引号后面加上了反斜杠:

但是由于urldecode函数的存在,我们可以构造如下利用过程:

?p=1%2527

由于浏览器自动进行了一次url解码,所以%25被解码为%,而又因为urldecode函数的作用,%27被解码为单引号('):

关键字
urldecode
rawurldecode

Base64编码注入

类似于URL编码注入,还有Base64编码注入,经过前端Base64转换后,参数被Base64加密,防御模块无法通过关键词分析出此参数的恶意字符。审计过程中遇到Base64_decode函数,之后没有做任何过滤,直接拼接到SQL语句中,就可能导致SQL注入漏洞。

参考文章:

  1. http://netsecurity.51cto.com/art/201404/435074.htm
  2. http://www.qingpingshan.com/m/view.php?aid=152779
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 在PHPMySql语句中存在着宽字节注入漏洞,MySQL宽字节注入漏洞是SQL注入漏洞攻防技术相互促进的一个典型例...
    BerL1n阅读 2,583评论 1 4
  • Web安全简史 在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Web...
    潘良虎阅读 3,909评论 3 72
  • 01 背景知识 字符集 在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二...
    Ackerzy阅读 2,779评论 0 7
  • 从今晚开始大学最后的一个暑假开始了,以前恨不得还没考完试就回家的舍友,这次神奇般的跟我一样临近最后封宿舍的时...
    Lydia陈文婷阅读 267评论 0 6
  • 宋三澜多阅读 114评论 0 0